Monday, December 8, 2008

Book Review – The Mythical Man Month

The Mythical Man Month by Frederic P. Brooks is a collection of essays on software engineering based on his work with IBM. Professor Brooks has some excellent insight into the workings of large software engineering projects and teams. Each essay (chapter) focuses on a specific topic in the process of creating software.

This book is considered a “classic” in software engineering books. The examples and data are based on Dr. Brooks experience with the System 360 and OS/360 which were developed in the mid 1960s. It is very interesting reading about shared computer time, OS/360 was built on mainframes before the advent of the personal computer. The first printing of the book was 1975.

The most valuable essay is in chapter  2 entitled appropriately the Mythical Man Month. This chapter focuses on five reasons why software doesn’t get done on time I thought I would share two with you. First programmers are optimists we tend to overestimate our abilities to get something coded. Second that man months are interchangeable, hence adding more workers reduces the time or having more time requires fewer workers. In fact, the more people added to a project and the later people are added actually increases the time the project may take. This is due to the increased complexity of communication between team members and the time it takes to get new team members up to speed.

Chapter six provides a good discussion on how teams communicate. This is further emphasized in chapter seven which demonstrates the failure of a project to the breakdown of communication. the next several chapters highlight why it is difficult to estimate software because of its technical and artistic qualities.

One of his most interesting recommendations is to build one system to throw away which takes an entire chapter. The point being that the first design is rarely 100% correct and design flaws are easier to recognize with a prototype. By taking the time to try out a concept you may discover a better way to accomplish the task. This chapter was introduced with a quote from Franklin D. Roosevelt:

It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something.

Chapter 12 discusses the use of good tools. This includes using appropriate languages and determining when to use a commercial tool as opposed to building it yourself. However, one excellent point is for developers to share the tools that they use. If you have developed a piece of code that provides a great solution to a common problem share it with your team. Chapter 13 has many practical tips on debugging programs. Unsurprisingly Dr. Brooks goes back to good design as a key piece of debugging.

Chapter 14 discusses software estimation and how to avoid making millstones out of milestones. Make sure that the milestones that are set reflect realistic goals. Chapter 15 discusses providing information to the users of your software. This is written from a tools or OS perspective so it focuses on developers but many of the principals could be translated into modern end users.

The final chapters were added for the 20th anniversary edition. Chapter 16 is a 1986 paper called “No Silver Bullet”, which discusses which asserts

There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.

Chapter 17 is a 1995 paper called “No Silver Bullet Refired” which is Dr. Brooks rebuttal to the criticism and “silver bullets” proposed since the original paper.  The assertions made in the original paper have held up very well and no “silver bullets” have been found. Chapter 19 is a discussion of the original book contents after 20 years.

Chapter 18 provides an overall summary of the book and is a good place to start if you want to get a high level overview of the book contents. All of the major points for each chapter are listed in the summary. You can get more details about the points by going back to the chapter containing the points you are most interested in. This chapter also includes some updated comments on the points made in the first edition. Interestingly most of his original points have stood the test of time.

Overall the book has many interesting ideas and recommendations which have stood the test of time. I found “No Silver Bullet” very interesting and “No Silver Bullet: Refired” is an excellent update of the original paper. The book reads a bit like a text book in some of the essays, presenting the material in a dry fashion. This made the book a bit slower to read than some of the others I have read this year. However, I found the book to be worthwhile and a nice perspective on the computer industry as it was in the 1960s and 1970s.

1 comment:

Dave Agans said...

Chris,

Good perspective on a classic. I noted that your reading list contains several of my favorites, Code Complete and Peopleware, and even the wonderful Design of Everyday Things, which of course, I think about every day as I deal with, well, things.
May I suggest that you take a look at my book, Debugging, which I hope will also be a classic (it's about timeless, universal, essential debugging techniques, and has been selling steadily for 7 years now.) It's NOT the textbook style that Brooks uses (in fact, he doesn't approve of the humorous approach I use), but it makes for a fun, quick read. So you can actually get through it, and use it, without investing a lot of time or money. More info and a funny poster of my nine rules at www.debuggingrules.com.

Dave Agans