Estimating software development is hard. But it doesn’t have to be impossible.
Software Estimation by Steve McConnell draws together research and experience from the field of estimation into a single, easy to read, volume.
The biggest lesson I got out of the book is “Count, Compute, Judge”.
Count if at all possible. Compute when you can’t count. Use judgement alone only as a last resort.
The software estimation I have been involved in falls into the realm of judgement. This is usually due to insufficient data available, or the lack of knowledge of the data that needs to be collected.
Some other highlights include:
Relevant information from many sources (ie. key formulas from research papers, process details and examples)
Details of industry studies and references to other work, allowing for deeper study.
Broad coverage of estimation topics. There is much happening in this area, and this book covers it from a practical standpoint.
Strategies for presenting estimates to stakeholders and navigating the associated political minefield.
… estimate negotiations tend to be between introverted technical staff (developers) and seasoned professional negotiators (sales staff).
One area I found missing from the book is estimating changes to existing systems, such as maintenance and enhancements. The focus for the book is on new features and creating new products. Hopefully the process and systems recommended, such as estimating from historical data, covers maintenance development.
In addition to good process and practice, there is a useful section towards the end with rules of thumb derived from industry findings. Some of them include:
To go from one-company, one-campus development to international outsource development, allow for a 40% increase in effort.
Allow for a 1% to 4% increase in requirements per month.
For first-time development with new language and tools compared to comparable development with familiar language and tools, allow for a 20% to 40% increase in effort.
For administrative and clerical support, add 5% to 10% to the base effort estimate.
Software estimation is an important part of the development process. Estimates provide the benchmark that subsequent development is measured against. Making estimation an area that deserves more study, and making this book a must read for any software professional.