Start from outcomes, list the unknowns and plan a small first release.
Most estimates fail before development starts. The number was built on a description of the project that was too vague to price, so the real cost arrives later as change requests and arguments. A tighter scope does not remove uncertainty, but it shows you where the uncertainty is.
Write down the outcome, not the feature list
Start with what should be different when the project is done: orders are processed without manual re-entry, or customers can book without calling. A feature list describes a solution someone has already chosen. An outcome lets the team propose the smallest solution that delivers it.
Separate what must ship from what would be nice
Sort every item into three groups: needed for launch, needed soon after, and wanted eventually. Be strict with the first group. If everything is essential, nothing can be traded when time or budget tightens.
List the unknowns openly
Every project has them: an integration nobody has tested, data of unknown quality, a rule only one person understands. Write each one down with an owner and a date by which it will be answered. An estimate is more honest with a visible list of open questions than with a confident total that hides them.
Estimate in ranges and tie them to assumptions
A single figure suggests precision that does not exist. Give a range for each piece of work and note the assumption behind it, for example "assumes the payment provider's sandbox works as documented". When an assumption proves wrong, the range moves for a reason everyone can see.
Plan a small first release
Choose a first milestone that is small enough to finish in a few weeks and real enough to put in front of users. It tests the estimate against actual delivery speed, and it is far cheaper to correct course after four weeks than after four months.
Agree how changes are handled
Changes will come. Decide up front who can request one, who sizes it and who approves the cost or the trade-off. A simple rule such as "anything added removes something of similar size, or moves the date" keeps the conversation calm.


