From guesswork to agile predictions: complexity-based estimations in a nutshell

Have you ever wondered why estimating the distance between cities as the crow flies is easy, but when it comes to software development, estimating task complexity seems like rocket science?

10 months ago   •   4 min read

By Stefan Mangat
Table of contents

Let’s break down this mystery and explore how applying a 'beeline' approach to agile estimations simplifies the process and make it more effective.

The Beeline Approach: Simplifying Complexity

Think about it this way: if someone asks you how far Berlin is from Singapore, you’d probably think of the straight line distance, not the exact driving route or hours to travel. This straight-line, or 'beeline', estimation is simple and gives us a general understanding of distance without worrying about the specific paths or transport modes. Of course we know, it's no clear statement about when you could be there, but still allows you to compare several cities by there straight-line distance and bring them to an order of what's far and what's close.

Now, what if we apply this same logic to software development?

Why Time-Based Estimations Often Miss the Mark

If you want time-based estimations for tasks and stories in agile software projects to be more than just rolling dices, you need to go into details and consider under which circumstances the implementation will take place. So you must try to map out every twist and turn of a road trip and their impact on time before you start the engine. That's why such estimations either get overly complicated or are nothing better than guessing. And let's face it, in the end they often go wrong due to unforeseen issues like 'traffic jams' (unexpected impediments) or 'road closures' (technical difficulties) etc.

The Power of Relative Complexity Estimation

Using relative complexity, following our beeline analogy, means estimating tasks based on their inherent difficulty, size, or complexity - not the hours it will take. I would agree, this may be difficult. But I bet it's easier to use the metric that intends to abstract from details than the one that highly depends on those. You'll need to keep in mind: it doesn't need to be exact, but good enough to measure the overall effort of a project and prioritize and select stories for later implementation. It's a pragmatic approach that helps teams avoid getting lost in the weeds of time estimation.

Benefits of Estimating with Relative Complexity:

  1. Easier to Agree Upon: Just like it's simpler to agree that Singapore is farther from Berlin than London, it's often easier for teams to reach a consensus on the relative size or complexity of tasks.
  2. Adapts to Team Differences: Different teams, like different cars, have different 'speeds'. What takes one team a day might take another two. Relative complexity acknowledges this variability.
  3. Focuses on What Matters: This method keeps teams focused on tackling the task's challenges, not watching the clock.

Dealing with the 'Are We There Yet?' Question:

Now, about that impatient child in the backseat, constantly asking, “Are we there yet?” – a.k.a. management wanting to know project timelines. This is absolutely valid, and we shouldn't dismiss it. Here's where understanding your team’s velocity – how fast you can move through these story points – becomes crucial.

Combining Relative Complexity with Team Velocity for Effective Planning

  1. Know Your Speed: By tracking how quickly your team completes story points, you get a real sense of your velocity, enabling you to predict timelines more accurately.
  2. Give Realistic Timeframes: With this approach, you can give management the answers they need without resorting to wild guesses or overly optimistic deadlines.
  3. Stay Flexible and Adapt: Just like a good road trip, be ready to adapt. If your team's velocity changes, adjust your estimations accordingly and communicate this.

Calculating Velocity and Predicting Timelines

So, understanding your team's velocity is like knowing the average speed of your car; it's essential for accurately predicting how long a journey will take. To calculate velocity in agile development, you simply track how many story points your team completes in a fixed time frame, typically during a sprint. For instance, if over the past three sprints your team has completed 30, 35, and 40 story points respectively, your average velocity is ( 30 + 35 + 40 ) / 3 = 35 story points per sprint.

With this velocity, you can start predicting timelines for future work. Let's say you have a project with an estimated total of 140 story points. Based on your velocity of 35 story points per sprint, you can predict that this project will take approximately 4 sprints to complete. It's similar to calculating travel time: if you know your car moves at an average speed of 60 km/h and your destination is 240 km away, you can estimate a 4-hour journey.

However, remember that velocity is an average based on past performance and can fluctuate. Just as road conditions can affect travel times, factors like team changes, varying task complexities, and unforeseen challenges can impact your team's velocity. Therefore, it’s important to regularly reassess and adjust your estimations as needed. This ensures that your timeline predictions remain as accurate and realistic as possible.

Dealing with Deadline Mismatches: Adjusting Your Journey

Now, imagine you're on a road trip and realize you're going to be late for an appointment at your destination. What do you do? Similarly, in software development, when your estimated timeframe doesn't align with the business deadline, you have a few options:

  • Increasing Velocity: This is like stepping on the gas pedal. You can look into ways to speed up the work without compromising quality. This might mean bringing in additional resources or finding efficiencies within your current team. However, be cautious – just like driving too fast can be risky, pushing your team too hard can demotivate or lead to errors. Also, onboarding additional people can be counterproductive as it normally slows down speed in the first place.
  • Reducing Scope: Sometimes, it's about taking a shorter route. Review the project scope and see if there are features or tasks that can be deprioritized or moved to a later phase. This approach ensures you still deliver on time but with a scope that matches the available timeframe.
  • Negotiating the Deadline: If speeding up or trimming down isn’t viable, you may need to discuss adjusting the deadline with management. This is like calling ahead to reschedule your appointment. It's about having an open and honest conversation regarding the feasibility of the deadline, backed by your team's velocity and complexity estimations.

In each of these options, clear communication and transparency with all stakeholders are key. Just like adjusting plans on a road trip, being upfront about challenges and collaboratively seeking solutions can ensure a smoother journey to your project’s completion.

Conclusion

Estimating task complexity in software development doesn’t have to be a labyrinth of guesswork. By understanding and adopting the beeline approach – focusing on relative complexity and team velocity – we can make estimations more straightforward, understandable, and accurate. Let’s leave the winding road of time estimations behind and follow a clearer path forward.

Spread the word