Yesterday I finished reading a classic book about software and project management, The Mythical Man-Month. Initially I thought, how applicable can a book written in the 1970s about working on software in the 1960s be to my experience as a developer in 2015? While there are some parts of the book that feel outdated or at least less relevant today, the core arguments of the book are enlightening.
Unlike tasks where output responds linearly to the addition of more labor, writing software doesn’t necessarily become faster when you add more developers. Because the addition of more developers means more time spent on onboarding, communication, etc. there are usually diminishing marginal returns to additional labor, Brooks argues. Sometimes these additions are even negative.
Of course, it’s possible the downsides of additional contributors are lower today than ever before. The ability to rapidly view and search entire codebases and to look at documentation for your project as well as its dependencies makes it easier to get started on a project than ever before. And automated tools that lint code and enforce style across an application make it easier for developers to collaborate and review code.
There are many other insights in this book besides Brooks’s insight about the man-month. The idea that permeates almost every chapter of the book is that writing software depends far less on the choice of tools teams use and much more on the people and how they work together. How they communicate, how they distribute work, and the roles they choose all matter a great deal.
Although I can’t claim to have managed large software projects, the book has certainly made me think about how I can be a more effective developer and teammate. I certainly could write more documentation, spend more time pairing with my teammates when they are starting work on code that I’m familiar with, and invest more in writing additional tests and setting up continuous integration tools.
The Mythical Man-Month is a superb read and well worth the time of anyone who works on software projects.