This post is part of a series of posts with my personal notes about the chapters in the book “The mythical man-month” by Frederick P. Brooks. I write these posts as I read through the book, and take notes on the concepts I find more relevant. I do, however, advise reading the book to get the full benefit out of it.
I guess most of us feel that small experienced teams are far more productive per developer than large teams with dozens or even hundreds of developers…
But how can we build a huge project with just a small team…?! No matter how good the developers would be, it would take forever…
The dilemma is a cruel one. For efficiency and conceptual integrity, one prefers a few good minds doing design and construction. Yet for large systems one wants a way to bring considerable manpower to bear, so that the product can make a timely appearance. How can these two needs be reconciled?
The mythical man-month pg. 31
The proposed solution is as follows, and I quote it directly from the book because I cant rephrase it any better:
A proposal by Harlan Mills offers a fresh and creative solution. Mills proposes that each segment of a large job be tackled by a team, but that the team be organized like a surgical team rather than a hog-butchering team. That is, instead of each member cutting away on the problem, one does the cutting and the others give him every support that will enhance his effectiveness and productivity.
The mythical man-month pg. 32
So the idea is that we should create small teams composed of highly performant developers, because:
- A 20.000$ developer may be 10 times more productive than a 10.000$ developer;
- The less workers, the less effort in communication is needed.
A small, sharp team should not exceed 10 people:
- A chief programmer, the surgeon. He defines functional and performance specs, designs, codes, tests and writes documentation. He is talented, knowledgeable and experienced;
- The co-pilot, able to fill in for the surgeon in every way, but less experienced;
- The administrator, to handle the bureaucratic work;
- The editor, to write the documentation, based on the surgeon draft;
- The clerk, responsible for maintaining both machine and human readable files;
- The toolsmith, responsible for ensuring the adequacy of the tools needed to do the surgeons’ job;
- The tester, responsible for devising and building the test cases;
- The language lawyer, who masters the intricacies of a programing language;
These are the roles that might compose a 10 people surgical team.
The key is making this team act uno-animo, with two main differences from a traditional team:
1. Lack of division of the problem
In a traditional team, the work is divided, while in a surgical team both surgeon and co-pilot work together in the same task, guaranteeing the integrity of work and minimal communication;
2. Superior-subordinate relationship
In a traditional team, the partners are equal, requiring high communication and compromises, while in the surgical team there is no need for compromise as the surgeon assumes the burden of decision making.