HomeProjectsBlogContact

How to Estimate Software Projects Without Lying to Anyone

Estimates go wrong for predictable reasons: hidden work, unknowns and optimism. How to break work down, estimate in ranges, account for risk and communicate estimates so they're actually useful.

How to Estimate Software Projects Without Lying to Anyone

"How long will it take?" might be the hardest question in software. Developers are famously bad at estimating, not because they lack skill, but because software work hides a lot of its effort until you're in the middle of it. You can't make estimates perfect. You can make them honest and useful.

Why estimates go wrong

  • Hidden work. We estimate the feature and forget the edge cases, error handling, tests, reviews, deployment, documentation and bug fixes.
  • Unknowns. An unfamiliar API, a legacy codebase or vague requirements can double the effort. (Working with legacy code.)
  • Optimism. We picture the smooth path, not the afternoon lost to a configuration problem.
  • Interruptions. Meetings, support, context switching. Nobody codes eight focused hours a day.
  • Changing scope. The thing being estimated changes after the estimate.

Step 1: break the work down

Large tasks are impossible to estimate well. Break them into pieces small enough that each takes no more than a day or two:

"User accounts" becomes:

  • Signup form with validation
  • Signup API, password hashing, duplicate-email handling
  • Email verification flow
  • Login and logout, sessions
  • Password reset flow (which has a lot of detail)
  • Account settings page
  • Tests for the critical paths
  • Deployment and configuration

Breaking work down often reveals forgotten tasks, which is half the value.

Step 2: estimate in ranges

A single number pretends to a certainty you don't have. Give a range instead:

"Two to four days."

For each task, think in three numbers:

  • Optimistic: everything goes smoothly.
  • Likely: a normal amount of friction.
  • Pessimistic: realistic problems, not disasters.

The width of the range communicates uncertainty. A narrow range means you've done this before; a wide range means there are unknowns, and that's valuable information for whoever's planning.

Step 3: separate known work from unknowns

If something is genuinely uncertain, like an integration with an unfamiliar third-party API, don't guess. Propose a spike: a short, time-boxed investigation (say, half a day) to answer the open questions. Then estimate properly.

Step 4: add the work people forget

Explicitly include:

  • Testing (what to test)
  • Code review and revisions
  • Deployment, configuration and data migrations
  • Cross-browser and mobile checks
  • Bug fixing after the first round of feedback
  • Communication and meetings

A common rule of thumb is that these "extras" add a significant share on top of the pure coding time.

Step 5: track actuals and calibrate

Write down your estimates and compare them with how long things actually took. After a few projects, you'll know your personal multiplier. If your estimates are consistently 40% low, adjust future ones accordingly. This is the single most effective way to get better.

Communicating estimates

  • State assumptions: "This assumes the designs are final and we reuse the existing auth."
  • Name the risks: "The payment integration is the biggest unknown."
  • Separate estimate from commitment. An estimate is a forecast; a deadline is a business decision. Make the difference clear.
  • Update early. When you learn something that changes the estimate, say so immediately, not on the due date.
  • Offer trade-offs: "We can hit that date if we drop the export feature from the first version."

Fixed-price projects (freelancers, take note)

Fixed-price work puts all the estimation risk on you. Protect yourself:

  • Define scope precisely, in writing, with what's included and excluded.
  • Break the project into milestones with payments attached.
  • Handle extra requests through change requests with their own price.
  • Include a buffer for the unknowns you identified.

(Freelancing and finding clients.)

Story points and other team methods

Many teams estimate in relative units like story points rather than hours, comparing tasks to each other ("this is about twice as big as that"). It can reduce false precision and works well for planning over time. Whatever method you use, the same principles apply: small pieces, honest uncertainty, and learning from actuals.

FAQ

How do you estimate a software project?

Break it into small tasks, estimate each as a range, explicitly include testing, review and deployment, separate unknowns with time-boxed spikes, and calibrate using how long past work actually took.

Why are software estimates always wrong?

Hidden work, unknowns, optimism, interruptions and changing requirements. Estimates improve with smaller tasks, ranges instead of single numbers and tracking actual time.

Should I give a single number or a range?

A range. It communicates uncertainty honestly and helps others plan for risk, while a single number implies false precision.

Keep reading

More from the workbench

All articles →