Wednesday, May 17, 2006

Brooks' law

[An interesting business processes theory....]
Brooks' law
was stated by Fred Brooks in his 1975 book The Mythical Man-Month as "Adding manpower to a late software project makes it later." Likewise, Brooks memorably stated "The bearing of a child takes nine months, no matter how many women are assigned." While Brooks' law is often quoted, the line before it in The Mythical Man-Month is almost never quoted: "Oversimplifying outrageously, we state Brooks' Law."

A commonly understood implication of Brooks' law is that it will be more productive to employ a smaller number of very talented (and highly paid) programmers on a project than to employ a larger number of less talented programmers, since individual programmer productivity can vary greatly between highly talented and efficient programmers and less talented programmers. However, Brooks' law does not mean that starving a project of resources by employing fewer programmers beyond a certain point will get it done faster.

The common way around the constraints of Brooks' law is to segment the problem into smaller sub-problems, each of which can then be solved by a smaller team, and to have a top-level team that is responsible for systems integration. However, this method relies on the segmentation of the problem being correct 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 would claim the programming practices associated with open source software development allow open source projects to defy the predictions of Brooks' law, but this is not true. A late OSS project will become even later if additional developers are added for the reasons addressed above. Also, most OSS projects (e.g., Linux) have no schedule, so "late" and "later" have no meaning.

Brooks' law's applicability to other disciplines varies depending upon the nature of the work. In any area where the work products are commodities, the law does not apply. For example, on a late construction project, one can employ additional dump trucks to haul refuse faster, without suffering the time penalty. The function of hauling refuse can be performed by anyone who possesses a minimal level of skill and a truck. Nothing differentiates one truck from the next, and no additional communication or training is required to commence the additional hauling. The requirement to get the new truck drivers up to speed is minimized and the resultant additional communications channels do not exist; truck drivers do not need to talk to other truck drivers in order to haul the refuse.

This is in sharp contrast to the typical work of software engineers (or most other design disciplines). New workers on the project must first become educated in the work that has preceded them; this education requires diverting the resources already working on the project, temporarily diminishing their productivity while the new workers are not yet contributing.


No comments: