The Estimation Dilemma in software projects 

What came first: the chicken or the egg?  

A new study from the University of Geneva suggests that the egg came first.

But, when it comes to estimates in software development projects, clients and development teams still can’t get on the same page about what should come first –clear requirements or accurate estimates. 

It’s completely reasonable for clients to want to know how much a project will cost and how long it will take before committing. The challenge is that they often don’t have a full picture of the requirements but still need an estimate to make a decision. On the other hand, development teams need clear, detailed requirements in order to provide accurate estimates.  

This is the Estimation Dilemma.  

The Cone of Uncertainty

To even begin to tackle the Estimation Dilemma we first need to understand the concept of the cone of uncertainty.  

According to Steve McConnell, 2006:  

“The Cone of Uncertainty represents the best-case accuracy that can be expected in software estimates at different points in a project’s lifecycle” 

Based on Steve McConnell, “The Cone of Uncertainty,” Construx Software

This concept illustrates how uncertainty decreases over time as a project progresses and more information is gathered.  

“At the very beginning of a software project, estimates can be off by a factor of 4x on the high side or 4x on the low side”

Research shows that the accuracy of a software estimate is directly tied to the level of clarity in the definition of the project. When scope and requirements are vague, estimates naturally carry a higher degree of uncertainty.  

In essence, the variability of an estimate reflects the variability of the project itself. Achieving more predictable estimates requires reducing uncertainty within the project. 

But what if there was a way to tackle these variabilities early on?  

In this article, we’ll explain why defining your requirements early matters and share practical steps you can take to make the estimation process smoother: for both you and your software development team. 

Why requirements matter

As we’ve already established, the largest source of uncertainty early in a project comes from unclear or incomplete requirements.   

The Cone illustrates this: at the start of a project, the wide end of the cone reflects the fact that requirements are often vague (“Build me a house”) instead of precise (“Build me a two-story house with three glass walls, five windows, two skylights, and a balcony”).  

So, at this point you might be wondering: if I invest the time and effort to provide clear requirements before getting an estimate, what’s in it for me? 

  • Lower risk of surprises in cost: when requirements are well defined upfront, the estimate is based on a solid understanding of what’s needed. The more details the client provides early, the less the team has to guess or plan for unknowns, which ultimately makes the estimate more favourable. 
  • More reliable timelines: clear requirements allow the team to provide a realistic estimate for how long the project will take. It also reduces the time spent on back-and-forth analysis or changes later in the project.  
  • Reduced risk of scope misunderstandings: comprehensive requirements leave less room for surprises, unplanned work, or scope creep 
  • Stronger collaboration from the start: providing detailed requirements fosters constructive discussion, aligns expectations, and lays the foundation for a smooth working relationship. 

Practical advice for clients

Even if you don’t have all the answers at the start of the project, any info you can provide in your requirements will help the development team create a more accurate estimate. 

Here are some practical steps you can take: 

  1. Decide early on key elements: Major decisions such as application type, integrations, or core workflows should ideally be made before requesting an estimate. Delaying decisions can again increase uncertainty.  
  2. Prioritize: Focus on your most important features first. If you can, rank them as “must-have,” “nice-to-have,” or “later.” This gives the team flexibility to manage the scope in case of budget or timeline constraints.  
  3. Document assumptions: clearly note any assumptions you’re making about features, users, workflows, etc. This provides the team enough information so they can plan for unknowns.  
  4. Provide context and goals: explain the why behind your requirements. Knowing the business goals and user needs helps the team make smarter trade-offs in the estimate. 
  5. Bring examples: screenshots, competitor products, diagrams or sketches. Even rough examples can help the team understand what you want.  

Conclusion

No estimate is perfect, and requirements aren’t either, especially at the beginning of a project. 

There will always be uncertainties at the start of a project but with shared information, and iterative refinement, estimates become a reliable tool rather than a risky guess. So, if you’re preparing to ask for an estimate, try to give your development partner as much context as possible up front – it’s the best way to turn uncertainty into a reliable estimate.