Why Software Development Estimates Cannot be Accurate

Software development is a complex activity. There are too many unknown and unknowable variables that impact development time.

This document is intended to help clarify the impossibility of producing an accurate software development estimate by detailing specifically why it is not possible.

Team capabilities

The individuals developing your software are both unique and unpredictable.

No two developers have the same knowledge of any given technology. One of your team may be the author of said technology, another may never have heard of it.

People

Your team are human. Any one could become ill, or take unexpected leave. They may suffer unexpected techincal difficulties, for example the internet cutting out, broken hardware, a software update that breaks their development environment, power cuts, authentication issues, etc. Not to say all these will happen, but some likely will.

Your project

Almost every feature you build will be unique in some way, meaning your project most likely has never been done before. Similar projects will exist, but an exact replica is unlikely.

Technical dependencies

Your software will have dependencies that are outside your control. Both for your production systems and for your supporting systems, eg third-party packages, development tooling, infrastructure, hardware, etc. Those dependencies can change in ways that will impact your project. Eg patching a newly discovered security vulnerability, or fixing a bug that's critical for your use case.

Unknown unknowns

What unknown bugs or complexities exist in the systems you are going to change as part of your project?