How Adding Manpower to a Software Project Does More Harm Than Good
I started a new book called The Mythical Man Month this weekend. The book is about software projects and the productivity of software developers and the enigmatic task of estimating and scheduling large projects.
I had so many “AHA! moments” but the one that stuck out most was the idea that by adding more manpower to a software project, you can actually reduce the productivity of the team and slow the whole effort.
The author, Frederick P. Brooks Jr., compared software system design to the ancient work of building a cathedral. Take for example, Reims Cathedral. Compared to other cathedrals like it, Reims was different in a very special way. Reims was designed by one man with one vision. As a result it achieves a level of design “coherence and unity” that other cathedrals lack.
Other cathedrals, which by contrast were designed over multiple generations and inherited by builders who were tempted to “improve” the architecture to reflect their tastes. As a result these structures “proclaim the pridefulness of the builders as much as the glory of God.”
The premise of the book explains that due to the sequential (e.g. You cannot complete module B until module A is in place) and non-distributable nature of building software, you cannot accelerate a delayed software project by simply adding manpower.
Brooks argues that as you add developers to the project, the “conceptual integrity” of the whole system, like the design consistency of our metaphorical cathedral, is violated.
Due to the interconnectedness of a software system, this results in technical debt and a higher incidence of bugs. More than anything though, adding more devs to the effort compounds the amount of communicating the team must do to make their sub-tasks handshake. More communicating means less coding and increased risk of miscommunication. The counter intuitive result is that by adding manpower to a project, you infact increase the amount of calendar time (and cost) that project will require.