- Guess and feedback. "Hell, I don't know, maybe two weeks. ... Four weeks instead of two? Okay. I think this one will take three weeks." You will be surprised how fast this converges. Most folks forget the feedback part.
- Estimate as a factor above or below a comparable task. "The option embedded bond was two weeks so this should be about half that."
- Estimate in terms of ideal engineering time and multiply by an observed factor (2 seems to be good for greenfield development, 3 while you are in production).
- Have experienced personnel do estimates. Pick projects the experienced personnel feel are similar in scope and complexity. Get the actual calendar time for each of these projects. Depending upon the level of risk the project can absorb, you can use the lowest, highest, or average value as your time and manpower estimate. Finally, estimate at the largest scale possible; do not estimate a bunch of tiny tasks and try to add them up.

- Many project managers do exactly this - there are project planning tools designed to help them do it. Is this bad? Well, if you add up all the small tasks, it probably gives you a good minimum estimate. There will also of course be integration time, plus the time taken to design the interfaces between units etc. I see it as a valuable sanity check on higher level estimates.
- In my limited experience, estimation by composition of small tasks doesn't work because complexity of the whole project is often related to number of connection between tasks (or modules) rather than raw count of the tasks themselves. Like the number of diagonals in a polygon ((n^2 - 3n)/2), it goes up pretty fast. And if you have completely independent tasks, is it still one project? --DexenDeVries

It Gets Worse. The math itself produces wrong, seriously optimistic results even if your inputs are good (for arbitrary measures of "good"). "How long will it take?" doesn't have just one answer; it has a whole bunch of answers--each with its own probability of being right. The only meaningful answer is a cumulative probability distribution. Plot time to completion against the probability of meeting or beating that time. We also know that deliveries are at best a bit early and at worst a lot late. The distribution is skewed, so the expected completion of a bunch of tasks is not the sum (or max if they're in parallel) of the individual expectations. You can do the calculation that way, but the probability of meeting or beating the estimate shrinks with each calculation, and the odds of success vanish. The only way to get reliable estimates is to estimate and calculate with distributions (it's called MonteCarloSimulation?. See http://en.wikipedia.org/wiki/Monte_Carlo_method). Then you decide how much risk you can tolerate and plan accordingly. The same applies to cost estimates. And the probability of being on time

And also, make sure you know what you estimate for. In a multi person project you will, at least initially, have a very diverse view among the developers of what it means to have finished a task. To deal with this, you should come up with a TaskCompleteDefinition.

I remember trying to estimate how long some programming tasks took, failing miserably, and then deciding that estimating programming time is inherently impossible. But "Painless Software Schedules" by Joel Spolsky 2000-03-29 "I've found that most programmers become very good schedulers with about one year of experience." http://www.joelonsoftware.com/articles/fog0000000245.html has just about convinced me that I can learn to make adequate estimates; it's not even that difficult. Just a few minutes a day, updating a simple spreadsheet that, as a bonus, also helps TimeManagement. -- DavidCary

See: GopherHoles, StoryEstimate, IdealEstimates, LoadFactorInEstimatingOtherProjects Contrast: NegotiateEstimates, GuessTheNumber, GiveMeEstimatesNow, EstimationWoes, SchedulingMyths, EstimationRuleNumberOne CategoryProjectManagement, CategoryPattern, CategoryAntiPattern (can this page be both pattern

EditText of this page (last edited November 27, 2010) or FindPage with title or text search