Search
Close this search box.
Search
Close this search box.
Search
Close this search box.

The horrible truth about software development estimation, and what to do about it

Facebook
Twitter
LinkedIn
Pinterest
WhatsApp

In recent years I’ve been working with many software development teams and almost all of them struggle with estimating the work. The energy spent on this and the frustration it causes should come to a halt. And so, in this short article, I combine knowledge gained by many people with my experience and explain how to address this.

A significant amount of time is spent on estimating the work required to build software. I’ve seen teams spending around two days every two weeks trying to understand how much the work will cost, with organizations spending valuable time of managers and experts haggling, pushing and fighting over estimations.

Does it work? Do they get the estimations right? No, they don’t. Why? Simply put, building software is complex. We think we know what’s ahead of us, but we just don’t. This is very difficult to grasp and accept. Requirements evolve. Design evolves. We gain understanding through the work. Things change all the time.

And so, as your expertise increases you come to the conclusion that, while it is usually possible to know the magnitude of order (hours/days/weeks), accurate estimation of the work in hours, days, weeks or months is almost impossible.

This is a great breakthrough, as once you understand this reality, that accurate estimation of software development is not possible, you can start moving forward.

What can be done? How can we have a prediction of when things will get done?

Reduce possibility of development going out of control

The key to the solution is to reduce the possibility of the development process getting out of control. Instead of trying to figure out how much effort it will take to develop features, we take two main measures to increase the predictability of our development process.

The first measure is keeping the batch size, the amount of requirements we develop, small enough. This is because the complexity of development increases at an exponential rate with the growth of the number of requirements.

The main question, therefore, when estimating work is not how much effort it is but rather is it in the right size. If it is too big we need to break it down to smaller pieces.

The right size may change from team to team according to several factors, but from my experience a software development team working with modern tools usually aims towards a few days per development item, something that can be demonstrated to a product manager.

Below see a cycle time control chart of a development team, produced from Jira Software. Each dot is one or more development items that ended on the time indicated by the X axis. The Y axis shows how long it took to develop that item. This team’s average cycle time is around 4 days, but from time to time There are items escaping that average – the team discusses these items in order to improve.

As written above, the first thing to do to handle the problem of estimating work items is to try and bring them down to a size the team is comfortable with. Whether it is 2, 3, or 4 days doesn’t matter – what matters is that it is more or less the team’s usual size, which gives plenty of space for changes during the actual development.

Increase development predictability

The second approach to adopt to increase development predictability is combining forces, working together as a team.

To handle the complexity of software development we use a whole team approach. The team plans its work and does it together. The approach of the team leader making the plan and then each team member getting an assignment that they work on alone doesn’t work.

Practically, what does “Teamwork” mean? It means planning together: the team looks at the scope of items, determines together whether they are small enough (see above), and decides on their forecast for the development period. The team then starts handling the various items. They take items according to priority and work on them together. Working on items together sometimes means working on two parallel streams of the same job, sometimes it means sitting together at one development machine (pairing). It means that according to need and priority people switch tasks to help their teammates, and in general, the team does whatever it takes to get the work done.

Here is an example of a team who moved from investing a lot of time (2 days per person per 2 weeks) on estimating to working together and avoiding exact estimation. The gray columns are how much was planned for a development period and the green columns are how much was actually done (the changes in throughput are due to personnel changes)

To summarize, instead of being heartbroken over spending endless time on estimation and not hitting the estimates, strive to break your work into smaller, lower complexity items and focus on teamwork. Software development work is thinking. And nothing beats thinking together.

(Photos by ThisisEngineering RAEng on Unsplash)

Subscribe for Email Updates:

Categories:

Tags:

SAFe Release Planning
Agile Techniques
LeSS
GanttBan
Story Slicing
Reading List
BDD
Professional Scrum with Kanban
Agile Basics
Daily Scrum
Agile Delivery
Lean Agile Management
Slides
Accelerate Value Delivery At Scale
Covid19
Manage Budget Creation
Nexus Integration Team
System Archetypes
QA
Acceptance Test-Driven Development
Legacy Enterprise
Kanban
Pomodoro Technique
Amdocs
ROI
Jira admin
Keith Sawyer
Introduction to Test Driven Development
Legacy Code
Scrum Primer
chatgpt
Frameworks
Lean Startup
Agile Israel Events
Agile Community
Iterative Incremental Development
AI Artificial Intelligence
Achieve Business Agility
Agility
Agile Product Ownership
Lean Agile Leadership
speed @ scale
Nexus and SAFe
Agile Games
Lean Software Development
Managing Risk on Agile Projects
Agile Risk Management
Certified SAFe
Agile Product Development
Continuous Integration
Jira Cloud
Self-organization
Kanban 101
Lean Agile Organization
Agile Program
Business Agility
ARTs
Kanban Game
System Team
Scrum
Software Development Estimation
Scrum and XP
Atlassian
ART Success
Agile and DevOps Journey
Agile Contracts Best Practices
Agile Project Management
Jira Plans
Product Management
Code
AgileSparks
Agile Marketing
System Integration Environments
Professional Scrum Master
Continuous Improvement
Test Driven Development
RTE Role
PI Objectives
speed at scale
Scrum Master Role
Engineering Practices
Nexus and Kanban
Risk-aware Product Development
Professional Scrum Product Owner
Scrum Master
Lean Budgeting
RTE
lean agile change management
Games and Exercises
NIT
Video
SAFe DevOps
Tips
ATDD vs. BDD
Portfolio for Jira
Development Value Streams
Agile Project
IT Operations
Planning
POPM
AI
Agile Development
Product Ownership
Change Management
Agile in the Enterprise
Agile Israel
transformation
Scrum Guide
Limiting Work in Progress
Certification
Agile for Embedded Systems
Software Development
Sprint Planning
Lean Agile Basics
Agile Mindset
Operational Value Stream
TDD
Lean-Agile Software Development
What Is Kanban
Coaching Agile Teams
Nexus vs SAFe
Implementing SAFe
Kanban Basics
ScrumMaster Tales
Agile Games and Exercises
A Kanban System for Software Engineering
predictability
Lean and Agile Principles and Practices
Kaizen
Scaled Agile Framework
Scrum.org
SAFe
Agile Outsourcing
agileisrael
Rapid RTC
PI Planning
User stories
Agile Testing Practices
LAB
Agile Exercises
Enterprise DevOps
Continuous Deployment
Continuous Delivery
ALM Tools
DevOps
Applying Agile Methodology
Agile Release Management
Confluence
LPM
The Kanban Method
Lean and Agile Techniques
Kaizen Workshop
Implementation of Lean and Agile
Nexus
SPC
Agile
Retrospectives
Releases Using Lean
Sprint Retrospectives
Systems Thinking
Tools
Large Scale Scrum
Agile Assembly Architecture
Atlaassian
Webinar
SA
Team Flow
Agile Release Planning
Effective Agile Retrospectives
Built-In Quality
An Appreciative Retrospective
Spotify
Advanced Roadmaps
Program Increment
Hybrid Work
Managing Projects
Introduction to ATDD
Lean Risk Management
Process Improvement
Presentation
Agile India
WIP
Entrepreneurial Operating System®
Sprint Iteration
Release Train Engineer
Risk Management in Kanban
Elastic Leadership
EOS®
Kanban Kickstart Example
Artificial Intelligence
Jira
Rovo
Quality Assurance
RSA
Lean-Agile Budgeting
Perfection Game
Scrum With Kanban
Scrum Values
Continuous Planning
Principles of Lean-Agile Leadership
ATDD
Value Streams
Risk Management on Agile Projects
The Agile Coach
AgileSparks
Logo
Enable registration in settings - general

Contact Us

Request for additional information and prices

AgileSparks Newsletter

Subscribe to our newsletter, and stay updated on the latest Agile news and events

This website uses Cookies to provide a better experience
Shopping cart