Code Complete (Steve McConnell)
- Highlight Loc. 26756-72 | Added on Wednesday, February 23, 2011, 07:44 AM
If management applies pressure to change your estimate, realize that ultimately the decision whether to do a project rests with management: "Look. This is how much it's going to cost. I can't say whether it's worth this price to the company—that's your job. But I can tell you how long it takes to develop a piece of software—that's my job. I can't ‘negotiate’ how long it will take; that's like negotiating how many feet are in a mile. You can't negotiate laws of nature. We can, however, negotiate other aspects of the project that affect the schedule and then reestimate the schedule. We can eliminate features, reduce performance, develop the project in increments, or use fewer people and a longer schedule or more people and a shorter schedule." One of the scariest exchanges I've ever heard was at a lecture on managing software projects. The speaker was the author of a best-selling software-project-management book. A member of the audience asked, "What do you do if management asks for an estimate and you know that if you give them an accurate estimate they'll say it's too high and decide not to do the project?" The speaker responded that that was one of those tricky areas in which you had to get management to buy into the project by underestimating it. He said that once they'd invested in the first part of the project, they'd see it through to the end. Wrong answer! Management is responsible for the big-picture issues of running a company. If a certain software capability is worth $250K to a company and you estimate it will cost $750K to develop, the company shouldn't develop the software. It's management's responsibility to make such judgments. When the speaker advocated lying about the project's cost, telling management it would cost less than it really would, he advocated covertly stealing management's authority. If you think a project is interesting, breaks important new ground for the company, or provides valuable training, say so. Management can weigh those factors, too. But tricking management into making the wrong decision could literally cost the company hundreds of thousands of dollars. If it costs you your job, you'll have gotten what you deserve.
And once you have given them your honest estimate on how long a piece of work will take, pray that they have heard of the 'Mythical Man Month'.
Estimation is a difficult thing to get right. The best advice I ever read about providing software estimates was to use suitable units of estimation. If you think something will take 3 days, estimate 'a week'. Chances are your 3 day estimate is hopelessly optimistic anyway.
And always keep in mind Hofstader's law, even though it will make no difference:
"Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law."