A #NoEstimates poster asked *what books *(or materials) *can be used to learn about software estimating*?

The first step is the understand that all estimating, for software, for building machines that fly to the moon, for planning a drive to DIA, means that the variables of the estimate are *random variables* draw from an underlying probability distribution.

Knowledge of this distribution is helpful. If you don't know the shape of the distribution, then there are simple ways to build one that represent the *most probable* shape. That shape is a triangle, that is skewed to the right. Symmetric shapes *never* occur in project work.

This list is of two types - a populist list for probability and statistics and books that do not contain much math or any math. Books that are math books.

Here's my bookshelf list for populist books and some papers on software estimating.

*Agile Estimating and Planning*, Mike Cohn - this is an agile estimating book that should be read by anyone writing software for money.*The Flaw of Averages: Why We Underestimate Risk in the Face of Uncertainty*, Sam L. Savage - when people start to say things like*you can't estimate*, or*How to Think About Statistics*, John L. Phillips - statistics and the probability that drives projects is a critical understanding of success. This is a way to start to think in statistical terms.- Review of Traditioanal and Agile Cost Estimation Success Factor in Software Development Projects
- Software Cost Estimating Relationships, Jennifer Leotta, this is a detailed report about the relationship between cost and regression models for complex software systems. Look at the math. It's not necessary to apply this in agile, but look at the principles.
- Cost Estimation in Agile Development Projects
- An Effort Estimation Model for Agile Software Development,
*Advances in Computer Science and its Applications (ACSA)*314 Vol. 2, No. 1, 2012, ISSN 2166-2924 *How To Lie with Statistics,*Darrell Huff - this book should be in everyone's library. It is a 1954 classic that describes all the misunderstandings we have about statistics and those are used to misinform us.- Software Cost Estimating Handbook, Software Technology Support Center, Cost Analysis Group, Hill Air Force Base, Ogden UT - this is how software is estimated for mission critical complex systems. It is not applicable for small agile projects. The point is when someone says
*you can't forecast the future in software products*, they are simply misinformed. It's done every month on the programs I work. Choosing not to forecast or estimate is not that same as not being able to.

There are companies that make software cost estimating tools

- Price Systems
- Galorath
- QSM
- COCOMO tool from Costar
- ICEAA is a professional society for Cost Estimating and Analysis
- INCOSE provides a list of cost estimating tools

The underlying mathematics for making estimates of future behaviour are based on probability and statistics. Some was probably learned in High School, some in college. If you were a Computer Science major, you likley had a queuing theory class to go along with your mandatory probability and statistics class. I was a physics graduate student and a systems engineering graduate student, so math was the langauge we used to talk to each other. Here's books from that shelf.

*Time Series Analysis: Forecasting and Control*, George Box and Gwilym Jenkins - when people misuse the quote*all models are wrong, some models are useful*this is the George Box they are quoting. If they don't have this book on their desk when they are typing that quote into Twitter, then they have not understood what he was speaking about. The Box Jenkins algorithm is the seminal piece of mathematics that allows use to forecast future behaviour given past behavior. This was formulated in 1970. It is in a class of algorithms called Autoregressive Moving Average.*Bayesian Statistics, 2nd Edition*, William M. Bolstad - Reverend Bayes*invented*an alternative way of thinking of statistical processes. It basically says*the past forecasts the future*. This is very useful for managing projects. It more complex than that of course, so Google will find you lots of web sources explaining the principles and the practices.*Probability & Statistics with Reliability, Queuing and Computer Science Applications*, Kishor S. Trivedi*The Art of Modeling Dynamic Systems: Forecasting for Chaos, Randomness and Determinism,*Forster Morrison - all useful systems are dynamic. Some stable (stationary), some change with time non-stationary, many are chaotic.*Time Series, 3rd Edition*, Sir Maurice Kendall and J. Keith Ord - this book speaks directly to forecasting the future using time series from the past. A simple example of a time series is the number of stories produced per period of time on an agile project. This are (or should) never be constant. They fluctuate between the period of performance. Statistically there is a picture of this in a video presentation. But the time series itself tells us much more. One thing it tells us is the likelihood of the number of stories that can be produced in the next period or 5 periods from now. Kendall is the seminal author of all things probability and statistics, so this is a heavy weight book, which is why I saved it for the last

This is the tip of the iceberg and not fully representative of the discipline. My domain is complex real-time programs, with fixed launch dates, andtightly controlled delivery dates. So we're outside the norm, but the principles are the same.