Estimations in software engineering

How does one minimise unpredictability in software engineering estimations?

SOFTWARE ENGINEERINGSTARTUPSPROJECT MANAGEMENT

12/25/20242 min read

Trying to be predictable regarding estimations in software engineering is almost always tricky. There is a reason why they are called estimations. There will always be some level of ambiguity, and the more ambiguity present, the greater the chances that the team misjudges the time and resources needed for the project. As depicted in the diagram above, the cone of uncertainty tends to expand exponentially at the early stages of project development, particularly when clarity about the "What" is lacking. Essentially, this refers to understanding exactly what the team is trying to build or deliver. In a startup environment, this ambiguity is even more pronounced due to the exploration and discovery phases that are inherent to product maturation.

Here is a typical flow that any team goes through (ideally)

[Project Requirements] → [Break Down Tasks] → [Select Estimation Technique] → [Collaborate & Discuss] → [Compile Estimates] → [Review & Adjust] → [Final Estimation] → [Execute Project]

The challenge for many companies, especially startups, often begins with the first phase: defining project requirements. Given the dynamic nature of startups, this initial stage can be especially nebulous, leading to what I refer to as uncontrollable factors. However, as a software engineer, there are several elements within your control:

Controllable Aspects of Estimation
  1. Due Diligence in Task Breakdown:

    • Any task requiring more than two days for implementation should be further decomposed. This practice not only clarifies the work involved but also helps mitigate risk, as smaller tasks can be assessed more accurately. Smaller units of work are generally easier to estimate and less prone to unexpected complications.

  2. Choosing a Suitable Estimation Technique:

    • Implement a consistent estimation technique that resonates with your team, whether it is planning poker, function point analysis, story points, or another method. The key is to ensure the chosen technique aligns with your team's workflow and promotes consensus while facilitating accurate estimates.

  3. Review and Adjust Regularly:

    • Engage regularly with peers and stakeholders to reassess and clarify what the team is trying to build. This step is essential for maintaining alignment and ensuring everyone shares the same vision. Once clarity is achieved, proceed with your estimates with confidence.

  4. Conduct Retrospectives:

    • It’s essential to look back and analyze the previous project cycles to identify areas that may have led to inaccuracies in estimates. Consider factors like code complexity, dependencies on third-party services, or other overlooked elements. This practice not only enhances future estimations but cultivates a culture of continuous improvement within the team.

Importance of Control in Estimation

By focusing on these four aspects that fall within your control, you can significantly enhance the precision of your estimations. Emphasizing diligence, consistency, collaboration, and reflection can set a strong foundation for successful projects, especially in unpredictable startup environments.

Estimations are the cornerstone of effective software engineering projects. While many methodologies exist, the real key to successful estimations lies in understanding the specific project context, leveraging the diverse expertise of your team, and committing to a cycle of continuous improvement in the estimation process. By approaching estimations with intention and care, software teams can significantly enhance predictability, facilitate better collaboration, and ultimately increase the chances of project success.