Book Review: Software Estimation - Demystifying the Black Art

16. August 2006 19:40

A couple of months ago, I decided to make myself start reading a minimum of one technical book per month.  The goal is to shoot for two, but I must read at least one.  As I read a book, I am going to post a review about it on the blog.  Last month, I read Framework Design Guidelines.  This month I have just finished reading Software Estimation: Demystifying the Black Art by Steve McConnell.

Obviously, McConnell is already a very well-known author from previous books that he has written such as Code Complete and Rapid Development.  Once again, he has delivered a technical masterpiece that should be required reading for anyone responsible for estimation.  All of the material is delivered in a sensible manner that is easy to comprehend.  I have gained a signficant amount of insight into the entire concept. 

The book is split into three parts.  The first part is about critical estimation concepts.  It covers a lot of important information that serves as somewhat of a primer for the remainder of the book.  McConnell does a good job clarifying the difference between an estimate, a target, and a commitment.  Even though it is sometimes easy to blur the lines between them, each one is unique and has a specific purpose.  He also covers some good information about the distinctions of accuracy and precision.  In typical conversation, these terms are often used to convey the same meaning, but they are not really the same thing, especially when it comes to a software estimate.  The section also discusses some of the important issues that influence estimation as well as problems that lead to estimation error.

The second part of the book is about essential techniques for creating estimates.  One of my favorites is what was referred to as Count, Compute, Judge.  Basically, this refers to the idea of counting as your first course of action.  If there is a way to directly count some value to provide the estimate, it is the your best option since it usually provides the most accurate result.  When you can't directly count the answer, you should compute the answer by counting something else that is related.  If you can't count or compute, you should use judgement only as a last resort as it introduces the greatest opportunity for bias and error.  A lot of this is may seem obvious, but it is often neglected in practice.  Some other estimation techniques that were examined include Calibration via Historical Project Data, Decomposition and Recomposition, Proxy-Based Estimates, Estimation by Analogy, and more.  It should also be noted that McConnell provides some guidance as to which of these techniques work best for sequential software developement and iterative software development as well as the level of accuracy (low, medium, or high) that is possible with each technique and the point(s) in the project when it is most useful (early, middle, or late).

The final part of the book is about some of the specific challenges involved with software estimation.  It covers a lot of the pros and cons of various ways to estimate size, effort, and schedule.  McConnell also gives some tips about the best manner in which to present your estimate.  He also provides some practical advice about the political atmosphere that often accompanies software development.

On a scale of one to five, I would easily give this book a five.  It is an excellent resource for practical advice about software estimation.  Anyone that is involved with estimates would benefit from reading this book.  Even if you aren't directly involved with software estimation, it would be advantageous to read this book for anyone that wants a better understanding of the ingredients of a successful project.

This was the last of the books that I had lying around waiting to be read.  I ordered three new books from Amazon earlier this week.  As soon as they arrive, I will get started reading my next one.  Here is a list of the books to give you a preview of the upcoming book reviews for the next couple of months:

Service-Oriented Architecture (SOA): A Planning and Implementation Guide for Business and Technology
Applying Domain-Driven Design and Patterns: With Examples in C# and .NET
Pro .NET 2.0 Extreme Programming

Comments are closed

About Me

I'm a passionate software developer and advocate of the Microsoft .NET platform.  In my opinion, software development is a craft that necessitates a conscious effort to continually improve your skills rather than falling into the trap of complacency.  I was also awarded as a Microsoft MVP in Connected Systems in 2008, 2009, and 2010.

Can’t code withoutThe best C# & VB.NET refactoring plugin for Visual Studio
Follow jeff_barnes on Twitter

View Jeff Barnes's profile on LinkedIn


Shared Items


Anything you read or see on this site is solely based on my own thoughts.  The material on this site does not necessarily reflect the views of my employer or anyone else.  In other words, I don't speak for anyone other than myself.  So, don't assume I am the official spokesperson for anyone.