It’s always difficult to tell potential customers that we simply don’t know how long it’s going to take to build a software system, if said system is moderately complex. This is one reason we avoid fixed-priced projects — when the cost of building something is unknown, you want to make sure both you and the customer are on the same side of the table. It’s also why the principle of building the simplest system possible is so important.
In the future, I’ll probably point people to this great article, Software is Hard.
After a half-century of software scheduling, after counting function points and lines of code and switching from waterfall development to spiral to agile methods, the most effective scientific tools we have for estimating software development time are:
- The Ninety-Ninety Rule: The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.
- Hofstadter’s Law: It always takes longer than you expect, even when you take into account Hofstadter’s law.
As well as this quote, from one of my heroes, Fred Brooks:
The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence.