TL;DR. What to say when asked for an estimate? I'll get back to you.
Tip: Estimate to avoid surprises
To some extent, all answers are estimates. It's just that some are more accurate than others.
The units you use for estimation matter: compare 'about 130 days' and 'about 6 months'. '130 days' probably implies a higher degree of accuracy.
Recommendation:
- 1-15 Days
- 3-6 Weeks
- 2-6 Months
- 20+ Think hard before giving an estimate
A basic estimating trick that always gives good answers: ask someone who's already done it.
PERT (Program Evaluation Review Technique) - every task has an optimistic, a most likely, and a pessimistic estimate.
- How long will it take to paint the house?
- Well, if everything goes right, and this paint has the coverage they claim it might be as few as 10 hours. But that's unlikely: a more realistic figure is closer to 18 hours. And, ofc, if the weather turns bad, that could push it out to 30 or more.
Practice incremental development, repeating the following steps with every piece of functionality:
- Check requirements
- Analyze risk (and prioritize riskiest items earlier)
- Design, implement, integrate
- Validate with the users
The refinement gets better and better each time, and you can refine your initial guess on the number of iterations.
Iterate the schedule with the code
References:
- The Pragmatic Programmer: Your Journey To Mastery, 20th Anniversary Edition (2nd Edition)