I find this problem a really easy one to deal with as soon as you realize that it is an apples and oranges problem. There is no relation between the time and cost the client (or your boss) is willing to spend on the project and the time it will take to implement it. They are two different things*.
As a developer it is your responsibility to make a good faith estimate and stick to it. The only way to marry a gap between the estimate and clients expectations is to either add resources (to a point) or to remove functionality. Don't buckle and agree to a date you cannot meet because your boss is unhappy with your estimate.
Also, any estimate given should be submitted with a list of caveats, bottlenecks and external requirements. CYA for when things go wrong. If you need a database set up, a webserver set up, etc., the estimate should include this, and make clear at what point their absense will affect the deliverable.
That being said, I find that the biggest enemies to accurate estimation are incomplete or changing requirements. One thing I have learned as a developer is to always push back on requirements. Do not estimate against anything that is unclear. Your first response to an estimate request should be a list of questions. Questions that point to the missing and fuzzy requirements. Questions that, until answered, will prevent you from making an estimate. Your estimate should make very clear that if any of the requirements change the date will be affected. Then, as the project continues be diligent and estimate the delta of any proposed requirement change and insist that the date be pushed back if the change is to be made.
Don't waver. They can accept your method and have good estimates and happy clients, or they can fire you. Chances are if they do the latter, you didn't want to work in an environment where you would constantly be overworked, behind schedule and taking the blame for other's bad decisions.
Finally, get everything in writing and signed off on. When the sh*t hits the fan, make sure it is somebody elses sh*t and somebody elses fan.

* This applies to a lot of games that people play. The amount of money you are making at your current position has nothing to do with what the prospective job pays, nor does what you are looking to earn. They know what they are willing to spend, let them tell you.

-pete
"Ted Nugent called. He wants his shirt back."

In reply to Re: The IT Project Estimation Game by dreadpiratepeter
in thread The IT Project Estimation Game by grantm

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.