← Back to Insights

Engineering

Estimating Engineering Timelines Honestly

Written by:Better SoftwareBetter Software TeamUpdated 10 min read
Estimating Engineering Timelines Honestly

Quick Answer

Honest engineering timeline estimates come from small pieces of work, each estimated as a range rather than a single date. Add the work that is not coding, such as review, testing, deployment and interruptions. Run short investigations on the biggest unknowns before committing, cut scope before stretching the date, and re-estimate at each milestone. Early estimates can be off by a factor of four in either direction, so a range is the accurate answer.

We have watched many teams give a confident date for a feature and then miss it by weeks. Usually nobody lied on purpose. The estimate was built from a best case, and everyone quietly treated it as a promise.

An engineering timeline estimate is a forecast of how long a piece of software work will take, given what the team knows at the time. That last part matters, because what the team knows changes as the work goes on. This post covers why estimates drift, a seven-step way to estimate engineering timelines honestly, a worked example of an integration estimate, the mistakes that turn ranges into promises, and when a detailed estimate is not worth making.

Why Engineering Timeline Estimates Drift From Reality

Engineering timeline estimates drift because early in a project the work itself is not yet defined, so any single number hides a wide range. Steve McConnell's Construx describes this as the Cone of Uncertainty, and it is the most useful idea we know for explaining missed dates to non-engineers.

According to Construx, estimates created at Initial Concept time can be inaccurate by a factor of 4x on the high side or 4x on the low side, which is a total range of 16x. The same page notes that a significant narrowing of the cone occurs during the first 20-30% of the total calendar time for the project, as requirements and design get pinned down.

Three habits make the drift worse. Large tasks are estimated as one block, so their unknowns stay hidden, and estimates assume focused coding time and ignore review, testing, deployment and interruptions. And the most hopeful number becomes the plan, because it is the one people want to hear.

The fix is not better guessing. It is a process that exposes uncertainty instead of hiding it.

How to Estimate Engineering Timelines Without Lying to Yourself

To estimate engineering timelines honestly, we follow seven steps, starting with why the estimate is needed and ending with a habit of re-estimating as the work moves. Each step removes one of the usual sources of false precision.

1. Decide What Decision the Estimate Will Support

Martin Fowler argues that "Estimation is valuable when it helps you make a significant decision". Before estimating, name the decision, such as which of two features to build first, when to tell a customer to expect a launch, or how much budget to raise.

The decision tells you how precise the estimate needs to be. Choosing between two features may need only a rough comparison. A contractual launch date needs much more care. Estimating without a decision in mind usually produces effort that nobody uses.

2. Break the Work Into Pieces of a Few Days Each

Split each feature into tasks small enough that an engineer can picture every step, typically one to three days of work. If a task still feels vague at that size, split it again or mark it as an unknown.

Small pieces expose hidden work. "Add payments" sounds like one task until it becomes checkout, webhooks, refunds, receipts, failed-payment emails and tests. The estimate grows, but it grows on paper instead of in the middle of the project.

3. Estimate Each Piece as a Range, Not a Date

For every task, give a best case and a worst case, and note how confident you are. The best case assumes nothing goes wrong. The worst case includes the debugging, environment problems and surprises that normally happen.

Ranges keep the uncertainty visible all the way to the final number. Summing only the best cases is the classic error, because the chance of every task hitting its best case at once is close to zero.

4. Add the Work That Is Not Writing Code

List the non-coding work explicitly, including code review, testing, documentation, deployment, coordination with other teams, and the support and production issues that will interrupt the work. We put each one in the estimate as its own line.

Interruptions are the line most teams forget. If part of every week goes to triaging support tickets or fixing production, the timeline has to say so. We cover how to measure that share in how to account for production work in engineering capacity planning.

5. Run Short Spikes on the Biggest Unknowns First

A spike is a short, time-boxed investigation that turns an unknown into a known, such as testing an unfamiliar API or checking how an old system stores data. Schedule spikes at the start, before anyone commits to a date.

Spikes are how a team moves down the cone on purpose. Construx makes the point that the only way to reduce the variability in the estimate is to reduce the variability in the project itself, and a spike does exactly that for one risk at a time.

6. Cut Scope Before You Stretch the Date

When the honest range is longer than the business can accept, look at scope first. Ask which tasks could be simpler, deferred or dropped without losing the point of the release.

A smaller scope also narrows the range, because fewer pieces means fewer places for surprises. Stretching the date while keeping every feature tends to repeat the original problem with a later deadline.

7. Re-Estimate at Every Milestone and Track Actuals

Treat the first estimate as a starting point. At each milestone, compare actual time against the estimate, update the remaining ranges and share the new forecast.

Large public programs work the same way. The US Government Accountability Office's Cost Estimating and Assessment Guide, published in March 2020, lists sensitivity and risk analysis and updating estimates with actual costs as steps in a reliable estimating process. Tracking actuals is also how a team's next estimate gets better.

A Worked Estimate for an Integration With an Unfamiliar API

A worked example shows how a range-based estimate changes as unknowns are resolved. This is an illustration, not a client project, of adding sign-in through an external provider whose documentation is thin.

TaskFirst rangeAfter the spike
Spike on the provider's API2-3 daysTook 4 days
Build the sign-in flow3-5 days5-7 days
Connect to existing user accounts2-4 days3-5 days
Unit and integration tests1-2 days1-2 days
Review and deployment1 day1 day

The first estimate added up to 9 to 15 days. The spike showed the provider used non-standard data structures and complex error handling, so the team re-estimated the build and connection tasks. The new total was 14 to 19 days. We would share that range on the day the spike ended, not at the end of the original window, so the business can decide early on scope or timing.

Estimation Mistakes That Turn Ranges Into Promises

The most common estimation mistakes turn a reasonable range into a date that sounds like a commitment. We see these most often:

  • Reporting only the low end of the range, because it is the number stakeholders want.
  • Applying past velocity to work that is new to the team, which ignores learning time and accumulated technical debt.
  • Leaving out dependencies on other teams, vendors or third-party services that the team does not control.
  • Estimating coding time and calling it the project timeline.
  • Hiding uncertainty to look confident, instead of naming the riskiest parts and a confidence level.

Each of these mistakes makes the estimate look more precise than it is. The cure is the same in every case, which is to keep the range and the assumptions attached to the number wherever it travels.

When a Detailed Estimate Is Not Worth Making

A detailed estimate is not worth making when no significant decision depends on it, or when the work is so new that a spike would teach more than any estimate. In those cases we time-box the work instead, agreeing on how much effort to spend and what to learn before deciding again.

Founders planning a whole product, rather than one feature, face a different question. There the useful answer is a phased plan with a range for each phase, which is how we approach product engineering scoping before any build starts. For a sense of whole-product ranges, see how long it really takes to build an app in the AI era.

Give Every Engineering Timeline a Range and a Date to Revisit

An honest engineering timeline is a range with its assumptions attached and a date to revisit it. Name the decision the estimate supports, break the work into small pieces, estimate ranges, add the non-coding work, spike the unknowns, cut scope before stretching dates, and re-estimate at every milestone. We would rather give a wide range that holds than a precise date that slips.

If you want a second opinion on a project plan or a vendor's timeline, the team at Better Software can review it with you.

Frequently Asked Questions

How Do You Estimate Development Timelines Without Overpromising?

We estimate development timelines without overpromising by giving ranges instead of single dates, listing the assumptions behind each range, and including review, testing and interruptions. We also run short investigations on the riskiest parts first, then update the estimate at every milestone so surprises surface early.

Why Is Software Estimation Important?

Software estimation is important because budgets, launch dates, hiring and customer commitments all depend on it. We treat an estimate as decision support, so its value comes from helping choose what to build, in what order, and when to tell customers to expect it.

Why Are Software Developers Resistant to Provide Specific Time Estimates?

Developers resist specific time estimates because early in a project the work is not yet defined, and a single number is often treated as a promise. We find that asking for a range with stated assumptions gets more honest answers than asking for one date.

What Is the Cone of Uncertainty in Software Estimation?

The Cone of Uncertainty describes how estimate error is largest at the start of a project and narrows as requirements and design are settled. We use it to explain why an early estimate should be a wide range and why it improves only as decisions are made.

What Is Software Effort Estimation?

Software effort estimation is forecasting how much work, usually in person-days or hours, a piece of software will take to build and release. We convert effort into a calendar estimate only after adding team size, interruptions and dependencies, since effort and elapsed time are different numbers.

About the author

Better Software

Better Software Team

Product and engineering team

Better Software Team is the product and engineering team at Better Software. We build new software products and improve existing applications and systems, with deeper experience in healthcare, finance and energy.