An estimate is not a prediction, it is a commitment shape, and the difference matters more than the precision of the underlying number.
A single number invites the wrong conversation
Quote one figure and every subsequent conversation is about whether reality matches it. Quote a range with the assumptions attached and the conversation shifts to whether the assumptions still hold, which is a far more useful thing to be arguing about six weeks into a project.
What we now attach to every estimate
- The assumptions it depends on, stated plainly enough that a client can tell us when one has broken.
- What would move the number up, named in advance rather than discovered defensively later.
- What is deliberately not included, so scope creep is visible the moment it happens rather than absorbed silently until someone notices the burn rate.
Re-estimating is not a failure
We re-estimate whenever an assumption breaks, and we treat that as normal project hygiene rather than something to apologise for. Clients who have been burned by studios before often expect the apology and are more reassured by a calm, dated re-estimate with the reason attached than by a promise that the original number still holds when it plainly does not.
An estimate that never changes was either lucky or being protected from the truth. Neither is a plan.
How this interacts with generated code
Coding agents have made implementation time more variable, not less — fast on well-specified, conventional work, no faster on ambiguous or unusual work, and occasionally slower once you count the review and correction cycle. We now estimate the specification and review effort separately from the implementation effort, because they have stopped moving together in the way they used to when all code was hand-written at a roughly constant rate.
What clients actually want from an estimate
Almost nobody has pushed back on a range with reasoning attached. Nearly everyone has pushed back, eventually, on a single confident number that turned out to be wrong. The lesson took longer to learn than it should have.
