Estimating software development is a tricky proposition.
For context, I find it helpful to understand the difference between complicated and complex processes:
- A complicated process involves many moving parts, but they interact from one to the next in a linear and predictable way.
- A complex process also involves many moving parts, but they interact with each other in random and unpredictable ways.
For example, migrating the data itself from a backend Access database to a SQL Server database is a complicated process. There are many steps involved, but each step is well-defined and predictable.
On the other hand, updating the front-end Access application following a migration of the backend data is a complex process. It’s difficult to anticipate how the data migration will affect the various forms, reports, and data-related code.
Impact on Software Estimates
Whether a process is complex or complicated has a profound impact on how confident we can be in our estimates:
- We can produce a reliable estimate for a complicated system.
- Estimates for a complex system are much less reliable.
Accounting for Estimate Volatility with Ranges
One way to deal with this reality is to use range estimates rather than single values.
Estimates where we have high confidence in how long it will take to complete a task will have narrow ranges, whereas estimates for more complex tasks will tend to have wider ranges.