The Codist - Programmerthink

The Mythical Man-Month - 32 Years Old And Still Relevant

Posted: 07/02/2007, Perm Link Readers: 6276


"The Mythical Man-Month: Essays on Software Engineering" is a book written by Fred Brooks back in 1975, based on his experiences managing IBM's OS/360. It's still a classic book, and despite how long ago it was written, much of it remains relevant. People sadly still fail in the same ways today.

The Mythical Man-Month

The idea that adding people to a late project in order to get it done actually makes the project later should be permanently ingrained in people by now. I bet almost everyone is familiar with recent projects (especially in IT departments) where some manager or PM attempts to fix a late project with a few more people. The whole concept that there remains X extra units of work that can be completed by adding Y people seems so seductive. As true as in the book, adding people (or for that matter starting out with too many people) makes the communication harder, and eventually most of the project time is soaked up by overhead.

I remember being in a meeting with a new client about a modest project when EDS showed up and promised they could have 100 people on the job tomorrow. If 10 people could do the project, then 100 people must be better! The federal government always falls for this one.

Progress Tracking

Although people like to measure progress in different ways (I remember at Lotus seeing dozens of huge charts with all sorts of metrics posted everywhere, all pointless, as an encouragement to the teams) the real point is to have many smaller real milestones. I've always been a proponent of small iterations and making progress highly visible; it's easy to say "it's almost done" when no one can see anything. If there is a new version every week that actually does something you can't hide.

Conceptual Integrity

Yet another great idea - that a system needs to be designed as a whole to meet the user's needs and not just be a collection of "features" or "requirements". Determining what is actually necessary often falls to the needs of management, politics, or ego (and commercially to marketing) and the software winds up bloated, ugly, unusable and often "completed" by the mythical month-men.

The Manual

Documentation. What a concept! Often project documentation is written to meet the requirements of management, often to some broken methodology (like the Waterfall, SDLC), instead of the people actually writing the system. I've always wanted to work somewhere where every scrap of discussion, email, IM, request, comment and of course bugs were all stored in the same system and managed by someone for easy examination and searching. In many projects I've seen managers and customers wander around and "ask" for stuff; even email would be an improvement.

The Pilot System

If you are writing your 12th accounting package, then what it takes to develop it is pretty well known. The problem comes if you are developing something that has never been done or before, or at least new for you and your team. It's impossible to estimate such a project; you have to write it once as a pilot or prototype in order to discover the pain points, the difficult algorithms, or to even understand how complicated it will be. It always amuses me for managers to ask for estimates on an unknown project. It's even funnier (or sadder) when they give a date it must be shipping by.

Formal Documents

Like the manual, it is good to have a small set of documents stating what is to be done, basically a roadmap for the benefit of the customer and a starting point for the developer. It has to be constantly updated as new information appears (you are iterating, right?) or it becomes a useless historical oddity. Even better, this information should be versioned right along with every other project artifact. That way you can tell how the roadmap changed over time. It doesn't have to be fancy (DOORS).

Project Estimation

Nothing irritates developers more than having to give estimates, especially for new projects with unknown requirements. Usually they are worse than useless, since in IT a vague estimate often becomes a hard ship date and promise to upper management and the customer, and ends in more mythical monkey business at the end. Often these estimates are based on the assumption that the developers actually have 100% of their time devoted to work; the reality is that the larger the team (and often the larger the management and customer teams are) the smaller % of time is actually useful.

People used to laugh about my estimates and always multiplied by 3. Eventually I learned and began to refuse to estimate at all. It's done when it's done.

Communication

I once worked for a consulting firm that was called in to "rescue" a failed project; apparently their managers had been so paranoid that each developer (30 of them) was forced to work in a vacuum without seeing other peoples work or source code. The code was unbelievably worthless and the only rescue was a rewrite. The company went under soon after.

People have to be able to communicate while working on the project; these days there is no excuse with email, phones, conferencing and IM. Yet when I worked on Aldus Persuasion, my team and the primary author worked together using nothing but phones and Fedex.

Communication isn't just holding meetings and visiting cubes; that's why I still wish for the project artifact database I mentioned above; if information is easily searchable and readable by everyone, then communication can often happen without contact, leaving the face to face meetings to be held far less often. More time to work.

The Surgical Team

Some system have crucial components that really need to be written by the best programmers you have; the assumption that if a system is documented well enough that any monkey can write the code is yet another Mythical.

Code Freeze and System Versioning

Versioning is such a good idea that even today people refuse it. A few years ago I did a contract at a place where the manager argued for 3 months that a version control system was unnecessary and took too much time. Especially in an iterative process, and even more so with multiple parallel developments, you can't live without the best possible versioning system.

Another job I had used a version control system that took hours to tag a version (every file was updated) so branching and tagging were rarely used. Once we switched to Subversion all sorts of improvements happens to the process. With good branching and tagging (and a process for how to use it) you can actually freeze code before every iterative release without slowing down the overall development.

Specialized Tools

No IT shop wants to dedicate people to tools; management thinks of it as a waste of developers. Yet having specialized tools for builds, utilities, frameworks and the like and someone to maintain them fulltime can make development of the real application a lot easier for everyone else. Sadly I've rarely ever seen such a person; usually developers try to squeeze time to build a few things themselves and they are often unsupported and unmaintained. In many places QA winds up in the same boat.

Despite all of the improvements in software development over the years, some things never change. People are still often stupid, don't learn and don't want to listen. Even 32 years after this book was written many of its ideas are routinely ignored.

The costs of ignorance are definitely not a myth at all.

Lister 07/02/2007 12:31

Very interesting! I liked the fact about the mythical man-month =).

~Lister Pinto

Supply Chain Intern, AMX

Aldrin 07/02/2007 13:15

Strongly agree with all the above except 'Project Estimation'. I've frequently had to estimate projects (usually on the basis on experience and not any scientific technique), and have found it useful to plan the project. Of course, calculating a hard ship date from the estimates is probably foolhardy - it's an estimate after all.

austin s 07/02/2007 13:21

I managed to read the Man-month through about a year ago; it's pretty funny (yet sad) how many people neglect something that's been a definitive insight into their own profession (generally) for 30 years or so. But I suppose you can't exactly shove it down their throat, either.

Rob Menke 07/02/2007 15:07

Don't forget the dreaded Second System Effect: that developers and analysts, once having finished version 1 (or whichever one is truly feature-complete), dump every single delayed feature into the next release. Microsoft Word is the canonical example of this.

The Agile people have this razor called YAGNI (You Ain't Gonna Need It), which is one of the few things of Agile that I honestly like.

One of the best defenses against Man-Month worshipers is to point out that by that logic, if a woman can have a baby nine months then nine women can have a baby in a single month. The bumbling defenses are very entertaining.

Chonger 07/02/2007 20:52

It's not that adding more people to a project makes it more late. You need to add people to work on the right tasks.

Someone to bring me food and coffee, pick up my dry cleaning, organize my calendar, answer my phone, keep me from going to meetings yet keep me informed of what I need to know with daily reports would make a realistic difference in helping a project meet its deadlines. Of course, we all know the purpose of adding more resources is not to help the project meet deadlines, but to punish workers for allowing the deadline to slip in the first place!

BlackWasp 07/03/2007 04:53

A great book and one that has been in my collection for a while. The 1995 updates are good too.

bj upton 07/03/2007 09:01

yes, yes, yes!

These are all great additions.

Sadly, I think my boss would understand none of this. It would fall under the rubric of 'not business oriented' and therefore not valid.

Dan 07/03/2007 09:56

Credentials: Software developer since 1980 where I started writing macro assembler and pascal programs under Tops-20 on the ArpaNet; moved to Unix in 1985 and never looked back; helped build a major Internet site in 1999 which was eventually sold for several hundred million; still work for a living :-)

So, most of the comments are good, with the exception of Project Estimation. The phrase "It's done when it's done." is simply not something a quality programmer should be uttering. The correct answer is one that combines the features (whole product if you will) requested, the quality resources available (lets not add green people just to get things done) and time. Your average software developer needs to be able to start a conversation with the person who posed the question because estimates ARE important. People get paid, time gives your competitors a chance to enter the market and features must be sufficient and of great quality to meet the emotional needs of the buyer.

New, young, older, ancient software developers, please use the quest for schedule estimate as a conversation starter. Use it to Communicate and assure the Conceptual Integrity of the product being built. You, your team and your management will be better when you take the high road.

By the way, the phrase "It's done when it's done!" was spoken by Charlton Heston playing Michelangelo in the 1965 movie "The Agony and the Ecstasy". Are you really as good as Michelangelo? If so, why are you working for someone? Go start something great.

codist 07/03/2007 11:06

It was a facetious comment. I learned the hard way that estimates can't be based on an idealized view of the project and its timeline. "An army of me clones could get it done in 3 months" is not a real estimate.

I actually admire Michelangelo's ability to work in multiple areas and excel in all of them. My favorite quote from the book is "An artist must leave a body of work" i.e. no one-hit wonders.

phillip 07/03/2007 23:54

Hi .. Excellent post. For those who've not earned the credibilty and respect to say "its done when its done" as the author has, you might wanna check out http://planixonline.com. I've not had to pay more than the $12.95/month as I don't need to maintain historical projects, so I just blow away old projects as I need to .. Caveat: you should be comfortable with use cases/pathways to use this app.... cheers.

James Bray 07/05/2007 08:28

I'd like to add one topic to the list:

The Second System Syndrome (or Second System Effect)

http://en.wikipedia.org/wiki/Second-system_effect

I've actually been through this. If only i'd read the book back then, I would never have fell into the trap.

James