When a task cannot be partitioned because of sequential constraints, the application of more effort has no effect on the schedule. The bearing of a child takes nine months, no matter how many women are assigned.
Fred BrooksBut I will argue that knowing complete product requirements up front is a quite rare exception, not the norm.
Fred BrooksMen and months are interchangeable commodities only when a task can be partitioned among many workers with no communication among them.
Fred Brooks...when fits of creativity run strong, more than one programmer or writer has been known to abandon the desktop for the more spacious floor.
Fred BrooksWell over half of the time you spend working on a project (on the order of 70 percent) is spent thinking, and no tool, no matter how advanced, can think for you. Consequently, even if a tool did everything except the thinking for you - if it wrote 100 percent of the code, wrote 100 percent of the documentation, did 100 percent of the testing, burned the CD-ROMs, put them in boxes, and mailed them to your customers - the best you could hope for would be a 30 percent improvement in productivity. In order to do better than that, you have to change the way you think.
Fred BrooksMediocre design provably wastes the world's resources, corrupts the environment, affects international competitiveness. Design is important.
Fred BrooksA design style is defined by a set of microdecisions. A clear style reflects a consistent set. A clear style may not be a good style; a muddled one never is.
Fred BrooksAdjusting to the requirement for perfection is, I think, the most difficult part of learning to program.
Fred BrooksThe programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures.
Fred BrooksThe critical thing about the design process is to identify your scarcest resource. Despite what you may think, that very often is not money. For example, in a NASA moon shot, money is abundant but lightness is scarce; every ounce of weight requires tons of material below. On the design of a beach vacation home, the limitation may be your ocean-front footage. You have to make sure your whole team understands what scarce resource you're optimizing.
Fred BrooksThere is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.
Fred BrooksA basic principle of data processing teaches the folly of trying to maintain independent files in synchonism.
Fred BrooksThe magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.... The computer resembles the magic of legend in this respect, too. If one character, one pause, of the incantation is not strictly in proper form, the magic doesn't work. Human beings are not accustomed to being perfect, and few areas of human activity demand it. Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program.
Fred BrooksShow me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowcharts; they'll be obvious.
Fred BrooksThe hardest single part of building a software system is deciding precisely what to build the most important function that software builders do for their clients is the iterative extraction and refinement of the product requirements. For the truth is, the clients do not know what they want. They usually do not know what questions must be answered, and they have almost never thought of the problem in the detail that must be specified.
Fred BrooksAll programmers are optimists. Perhaps this modern sorcery especially attracts those who believe in happy endings and fairy godmothers. Perhaps the hundreds of nitty frustrations drive away all but those who habitually focus on the end goal. Perhaps it is merely that computers are young, programmers are younger, and the young are always optimists.
Fred BrooksThe hardest single part of building a software system is deciding precisely what to build.
Fred BrooksThe hardest part of the software task is arriving at a complete and consistent specification, and much of the essence of building a program is in fact the debugging of the specification.
Fred BrooksThe fundamental problem with program maintenance is that fixing a defect has a substantial (20-50 percent) chance of introducing another. So the whole process is two steps forward and one step back.
Fred BrooksThe brain alone is intricate beyond mapping, powerful beyond imitation, rich in diversity, self-protecting, and self-renewing. The secret is that it is grown, not built.
Fred BrooksMore software projects have gone awry for lack of calendar time than for all other causes combined.
Fred BrooksSystems program building is an entropy-decreasing process, hence inherently metastable. Program maintenance is an entropy-increasing process, and even its most skillful execution only delays the subsidence of the system into unfixable obsolescence.
Fred BrooksA little retrospection shows that although many fine, useful software systems have been designed by committees and built as part of multipart projects, those software systems that have excited passionate fans are those that are the products of one or a few designing minds, great designers.
Fred BrooksTo only a fraction of the human race does God give the privilege of earning one's bread doing what one would have gladly pursued free, for passion.
Fred BrooksWe tend to blame the physical media for most of our implementation difficulties; for the media are not "ours" in the way the ideas are, and our pride colors our judgement.
Fred BrooksThe boss must first distinguish between action information and status information. He must discipline himself not to act on problems his managers can solve, and never to act on problems when he is explicitly reviewing status.
Fred BrooksI have never seen an experienced programmer who routinely made detailed flow charts before beginning to write programs.
Fred Brooks