Neha Patil (Editor)

Brooks's law

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit

Brooks's law is a claim about software project management according to which "adding manpower to a late software project makes it later". It was coined by Fred Brooks in his 1975 book The Mythical Man-Month. According to Brooks, there is an incremental person who, when added to a project, makes it take more, not less time.

Contents

Explanations

According to Brooks himself, the law is an "outrageous oversimplification", but it captures the general rule. Brooks points to the main factors that explain why it works this way:

  1. It takes some time for the people added to a project to become productive. Brooks calls this the "ramp up" time. Software projects are complex engineering endeavors, and new workers on the project must first become educated about the work that has preceded them; this education requires diverting resources already working on the project, temporarily diminishing their productivity while the new workers are not yet contributing meaningfully. Each new worker also needs to integrate with a team composed of several engineers who must educate the new worker in their area of expertise in the code base, day by day. In addition to reducing the contribution of experienced workers (because of the need to train), new workers may even make negative contributions, for example, if they introduce bugs that move the project further from completion.
  2. Communication overheads increase as the number of people increases. Due to combinatorial explosion, the number of different communication channels increases rapidly with the number of people. Everyone working on the same task needs to keep in sync, so as more people are added they spend more time trying to find out what everyone else is doing.
  3. Limited divisibility of tasks. Adding more people to a highly divisible task such as reaping a field by hand decreases the overall task duration (up to the point where additional workers get in each other's way). Some tasks are less divisible; Brooks points out that while it takes one woman nine months to make one baby, "nine women can't make a baby in one month".

Exceptions and possible solutions

Brooks's law is often cited to justify why projects keep being late, despite management efforts. However, there are some key points in Brooks's law that allow exceptions and open the door for possible solutions.

The first point is to note that Brooks's law often applies to projects that are already late. Projects can be brought back into (or kept in) control if people are added earlier in the process. It is also important to determine if the project is really late, or if the schedule was originally overly optimistic. Scheduling mistakes account for a large number of late projects. Correcting the schedule is the best way to have a meaningful and reliable time frame for the project's completion.

The quantity, quality and role of the people added to the project also must be taken into consideration. One simple way to circumvent the law on an overrun project is to add more people than needed, in such a way that the extra capacity compensates the training and communication overhead. Good programmers or specialists can be added with less overhead for training. People can be added to do other tasks related with the project, for example, quality assurance or documentation; given that the task is clear, ramp up time is minimized.

Good management and development practices also help to minimize the impact of Brooks's law. The modern practices of continuous integration, test-driven development, and iterative development significantly reduce the inter-developer communication overhead, and thus allow for better scalability. New tools for software development and documentation also help to minimize the ramp up time, making it simpler for new programmers to get involved in the work. Design patterns simplify the distribution of work, because the entire team can do its part within the framework provided by that pattern. The design pattern defines the rules that the programmers follow, simplifies communication through the use of a standard language, and provides consistency and scalability. Finally, good segmentation helps by minimizing the communication overhead between team members. Smaller sub-problems are solved by a smaller team, and a top-level team is responsible for systems integration. For this method to work, the segmentation of the problem must be done correctly in the first place; if done incorrectly, this can make the problem worse, not better, by impeding communication between programmers working on parts of the problem which are actually closely coupled, even when the project plan has decreed that they are not.

Some authors – see, for example, Creating a Software Engineering Culture by Karl E. Wiegers – have stressed the importance of the social and political aspects of the work climate as determinants of the effectiveness of individual programmers and the project team as a whole. Rather than depending on heroes to carry the day with extraordinary efforts, Wiegers argues that a team of ordinarily-skilled individuals can repeatedly deliver timely results in the right work environment. Efforts to improve the effectiveness of teams can ameliorate, if not eliminate, the consequences of Brooks's law.

Eric S. Raymond mentions this in The Cathedral and the Bazaar. He notes that the number of one-to-one communications channels between N developers scales with N^2. Ergo, adding a new developer, assuming zero time spent "ramping up" (getting familiar with the project and its existing participants), can easily result in productivity diminishing with increased numbers of developers. He posits that part of why the Open Source development model has been able to scale so well is that the "release early, release often" principle is effectively a form of broadcast communications: lots of small, incremental releases provide a one-to-many communications channel that eliminates the need for many of the one-to-one channels that form the slowdown in Brooks's Law. Instead of having a discussion with multiple other programmers about the correct mechanism to resolve a particular problem, code it and throw it out there for all to see. If someone else has a better way of solving the problem, they are welcome to improve the code. In the meantime, as various features are added and function in a satisfactory manner, other programmers will see these as "solved problems" and focus their attention elsewhere.

A way to finish a project is a consequence of Brooks's Law. This is a Bermuda plan, when 90% of the developers are removed ("send them to Bermuda") and the remaining 10% complete the software.

References

Brooks's law Wikipedia