The Mythical Man-Month: Essays on Software Engineering
Rate it:
Open Preview
7%
Flag icon
As a rule of thumb, I estimate that a programming product costs at least three times as much as a debugged program with the same function.
7%
Flag icon
A programming system component costs at least three times as much as a stand-alone program of the same function.
7%
Flag icon
In the lower right-hand corner of Fig. 1.1 stands the programming systems product. This differs from the simple program in all of the above ways. It costs nine times as much. But it is the truly useful object, the intended product of most system programming efforts.
7%
Flag icon
Why is programming fun? What delights may its practitioner expect as his reward? First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design.
7%
Flag icon
Second is the pleasure of making things that are useful to other people.
7%
Flag icon
Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning.
7%
Flag icon
Fourth is the joy of always learning, which springs from the nonrepeating nature of the task.
8%
Flag icon
Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff.
8%
Flag icon
Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program.
8%
Flag icon
The dependence upon others has a particular case that is especially painful for the system programmer. He depends upon other people's programs.
8%
Flag icon
The last woe, and sometimes the last straw, is that the product over which one has labored so long appears to be obsolete upon (or before) completion.
8%
Flag icon
The real tiger is never a match for the paper one, unless actual use is wanted.
8%
Flag icon
The challenge and the mission are to find real solutions to real problems on actual schedules with available resources.
9%
Flag icon
First, our techniques of estimating are poorly developed. More seriously, they reflect an unvoiced assumption which is quite untrue, i.e., that all will go well.
9%
Flag icon
All programmers are optimists.
9%
Flag icon
For the human makers of things, the incompletenesses and inconsistencies of our ideas become clear only during implementation. Thus it is that writing, experimentation, "working out" are essential disciplines for the theoretician.
9%
Flag icon
Men and months are interchangeable commodities only when a task can be partitioned among many workers with no communication among them (Fig. 2.1). This is true of reaping wheat or picking cotton; it is not even approximately true of systems programming.
10%
Flag icon
In examining conventionally scheduled projects, I have found that few allowed one-half of the projected schedule for testing, but that most did indeed spend half of the actual schedule for that purpose. Many of these were on schedule until and except in system testing.
10%
Flag icon
Since the delay comes at the end of the schedule, no one is aware of schedule trouble until almost the delivery date. Bad news, late and without warning, is unsettling to customers and to managers.
12%
Flag icon
Oversimplifying outrageously, we state Brooks's Law: Adding manpower to a late software project makes it later.
14%
Flag icon
Second, in the conventional team the partners are equal, and the inevitable differences of judgment must be talked out or compromised.
15%
Flag icon
conceptual integrity is the most important consideration in system design.
16%
Flag icon
Conceptual integrity in turn dictates that the design must proceed from one mind, or from a very small number of agreeing resonant minds.
16%
Flag icon
The architect of a system, like the architect of a building, is the user's agent. It is his job to bring professional and technical knowledge to bear in the unalloyed interest of the user, as opposed to the interests of the salesman, the fabricator, etc.
16%
Flag icon
"Where architecture tells what happens, implementation tells how it is made to happen."[3] He gives as a simple example a clock, whose architecture consists of the face, the hands, and the winding knob.
17%
Flag icon
Good features and ideas that do not integrate with a system's basic concepts are best left out.
18%
Flag icon
Many actors, of course, entered into that mistaken decision; but the overwhelming one was schedule time and the appeal of putting all those 150 implementers to work. It is this siren song whose deadly hazards I would now make visible.
19%
Flag icon
• remember that the builder has the inventive and creative responsibility for the implementation; so the architect suggests, not dictates;
19%
Flag icon
This second is the most dangerous system a man ever designs.
20%
Flag icon
But he can be conscious of the peculiar hazards of that system, and exert extra self-discipline to avoid functional ornamentation and to avoid extrapolation of functions that are obviated by changes in assumptions and purposes.
21%
Flag icon
"Never go to sea with two chronometers; take one or three."
22%
Flag icon
The precise nature of this trash turns out to be part of the de facto definition,
24%
Flag icon
The project manager's best friend is his daily adversary, the independent product-testing organization.
24%
Flag icon
Shortly the clans began to move apart, preferring isolation to wrangling.
27%
Flag icon
Thinkers are rare; doers are rarer; and thinker-doers are rarest.
28%
Flag icon
The linear extrapolation of such sprint figures is meaningless. Extrapolation of times for the hundred-yard dash shows that a man can run a mile in under three minutes.
33%
Flag icon
Who: organization chart. This becomes intertwined with the interface specification, as Conway's Law predicts: "Organizations which design systems are constrained to produce systems which are copies of the communication structures of these organizations."[1] Conway goes on to point out that the organization chart will initially reflect the first system design, which is almost surely not the right one. If the system design is to be free to change, the organization must be prepared to change.
34%
Flag icon
It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something. —FRANKLIN D. ROOSEVELT
34%
Flag icon
In most projects, the first system built is barely usable. It may be too slow, too big, awkward to use, or all three.
34%
Flag icon
The management question, therefore, is not whether to build a pilot system and throw it away. You will do that.
34%
Flag icon
Hence plan to throw one away; you will, anyhow.
34%
Flag icon
the programmer delivers satisfaction of a user need rather than any tangible product.
35%
Flag icon
Nevertheless, some changes in objectives are inevitable, and it is better to be prepared for them than to assume that they won't come.
35%
Flag icon
the common failing of programming groups today is too little management control, not too much.
38%
Flag icon
The simulator will surely fail in some respect to be a faithful and accurate implementation of the new machine's architecture. But it will be the same implementation from one day to the next, and the new hardware will not.
44%
Flag icon
How does a project get to be a year late? . . . . One day at a time.
45%
Flag icon
Milestones must be concrete, specific, measurable events, defined with knife-edge sharpness.
47%
Flag icon
Every user needs a prose description of the program. Most documentation fails in giving too little overview. The trees are described, the bark and leaves are commented, but there is no map of the forest.
48%
Flag icon
The flow chart is a most thoroughly oversold piece of program documentation.
48%
Flag icon
The detailed blow-by-blow flow chart, however, is an obsolete nuisance, suitable only for initiating beginners into algorithmic thinking.
« Prev 1