Most software estimates are a single number produced by an experienced person staring at a brief. That number is usually wrong in a predictable direction — too low — and because it is a single number, there is no way to tell whether it was wrong by 10% or 300%. The fix is not to estimate better. It is to estimate differently.
Why are software estimates systematically too low?
Because people estimate the work they can picture, and the work you cannot picture is where the time goes. Integration, error handling, deployment, review cycles, and the second round of changes after a stakeholder sees it are all real work that rarely appears in the first breakdown.
How do you decompose a brief into estimable pieces?
Break the work down until each item is something one person could finish inside a week. Anything larger hides uncertainty. The act of decomposing is most of the value — items you cannot break down are exactly the items you do not understand well enough to price.
- Split by user-visible outcome first, not by technical layer.
- Any item you cannot describe in one sentence is two items.
- Any item nobody on the team has done before gets flagged as an unknown, not padded silently.
- Stop decomposing at roughly one week — below that the overhead exceeds the accuracy gain.
Should you estimate a single number or a range?
Always a range. Give an optimistic, likely, and pessimistic figure for each item, then combine them. A range communicates the thing a single number destroys: how confident you are. A client who is told 'six to nine weeks' can plan; one told 'seven weeks' will treat it as a commitment.
Per item, capture three numbers:
O = optimistic (everything goes right)
L = likely (your honest expectation)
P = pessimistic (the plausible bad case, not the worst imaginable)
A common weighting is the PERT expected value:
E = (O + 4L + P) / 6
Estimate the range at the project level, not by summing worst cases —
summing every pessimistic figure produces a number nobody will accept,
because not everything goes wrong at once.What multiplier should you apply?
Whatever your own history says, not a rule of thumb from the internet. Take your last five completed projects, compare estimated hours to actual hours, and use that ratio. Teams that do this for the first time typically find a multiplier between 1.3 and 2.0 — and the number itself matters far less than the fact that it is measured rather than invented.
The only estimate defence that survives contact with a client
Show the decomposition. A single number invites haggling because there is nothing to discuss except the number. A list of 40 items with ranges moves the conversation to scope — which items to cut — which is the conversation you actually want to be having.
What should an estimate document contain?
Four things: the itemised breakdown with ranges, the assumptions you priced against, what is explicitly out of scope, and what would change the number. The assumptions section is what protects you when the brief turns out to have meant something else.
- Itemised breakdown with optimistic/likely/pessimistic per item.
- Assumptions — the things you took as given, each one a potential renegotiation trigger.
- Out of scope — stated explicitly, because silence reads as inclusion.
- Change triggers — the specific events that would require a new estimate.
How do you handle the unknowns?
Price them separately as a time-boxed spike rather than folding them into the main estimate. A two-day investigation with a defined output is honest and sellable; a silently padded line item is neither, and it is the first thing a client will push back on when they compare quotes.
Frequently Asked Questions
How accurate should a software estimate be?
At the proposal stage, a range of roughly plus or minus 40% is normal and honest. Anyone quoting a single number on a brief they received last week is guessing. Accuracy improves as scope is fixed, not as more time is spent estimating.
Should estimates be in hours or story points?
Hours for client-facing estimates, because clients buy time and money. Points are useful for internal velocity tracking but cannot be converted into a price without a velocity history that a new client engagement does not have.
How do I estimate work my team has never done?
Time-box a spike, price the spike, and re-estimate afterwards. Do not fold unfamiliar work into a confident-looking number — that is where the largest overruns come from.
What do I do when the client wants a lower number?
Cut scope, not the estimate. Reducing the number without reducing the work converts a pricing problem into a delivery problem, and you will pay for it later at a worse exchange rate.
References
- DORA research program — DORA / Google Cloud
- Google SRE Book — Google
- MonolithFirst — Martin Fowler
About Jishu Labs
Jishu Labs is a software development company founded in 2016. We build custom software, AI/ML systems, and full-stack web and mobile applications for clients, and we make eight AI tools for software teams.