The Software Estimation Manifesto

07 February 2011

by PeterHilton

Making estimates for how long a software development task will take is the closest that commercial software developers come to performing a black art. And a black art it is, because software estimation is a minefield of mis-information and misunderstandings, unrealistic expectations and wishful thinking, risk and reward.

28 theses

  1. Accept that making estimates is unavoidable in commercial software development, whatever your methodology.

  2. Accurate estimation is hard, harder without lots of experience, and even harder with changing scope or project risks.

  3. Accept that time and money are never unlimited (if you can consistently achieve this please tell us how).

  4. Assume initial bad estimates and use an ‘expected vs actual’ feedback loop to improve accuracy over time.

  5. Verify your estimates (get a second opinion) before you communicate them to the project manager.

  6. Move away from development methods that require perfect predictions in an up-front project plan written in stone.

  7. Adopt development methods that minimise the impact of bad estimates and generate continuous improvement.

  8. There are many types of estimate: developer fantasy world, realistic, pessimistic, arse-covering and downright cynical.

  9. Realistic estimates allow for frequent annoyances (telephones), occasional impediments & rare disasters (office on fire).

  10. Pessimistic estimates are more useful than best-case estimates; under-run usually has less impact than over-run.

  11. Your estimates are not just wrong because the task takes longer, but also because you forgot a quarter of the tasks.

  12. Estimates are inherently non-negotiable - how long it will actually take. Argue about price and quality instead.

  13. Don’t negotiate estimates with your manager. Apart from anything else, he is better at it and will ‘win’.

  14. Define ‘done’. What are you estimating exactly? (Several of Scrum’s benefits are individual wins.)

  15. Specify who does the work. Despite much wishful thinking in the industry, programmers are not fungible, especially not good ones.

  16. Make estimates that can be added together. If you say each feature will take a day, they’ll expect five per week.

  17. How long a task should take is a fantasy best-case. Telling your colleagues about your fantasies is TMI.

  18. The most cynical technique is sometimes true: take the next time unit and double it - ‘3 days’ becomes ‘6 weeks’.

  19. Do not vary quality; software quality is a project-level consideration, not a per-feature decision.

  20. Making estimates is a game of averages. Trade individual accuracy for overall accuracy.

  21. Avoid the bandwagon effect. Blind estimation is common to the Delphi method, Scrum planning and others.

  22. Improve estimates with comparison (with other estimates) and feedback (how good they turned out to be).

  23. Learn the estimation techniques, such as Delphi method or Scrum planning; then learn some rules of thumb.

  24. Even if you are not using Scrum, its principles of Transparency, Measurement and Improvement are useful.

  25. Check your estimates to avoid them being ‘obviously wrong’. The best way to do this: ask someone else.

  26. Understand the business context to the question ‘how long will it take?’ to discover the actual question.

  27. Communicate estimates carefully - project stakeholders’ own interpretations are not necessarily the ones you want.

  28. Improve your estimates. Use reality for feedback, i.e. ask yourself how long it actually took.

Peter Hilton is a senior software developer at Lunatech Research.