"Notes on 'The Mythical Man-Month'"

The book "The Mythical Man-Month" explores the difficulties of achieving consensus and solutions, and discusses other aspects of software engineering management, offering many thought-provoking insights as well as a wealth of software engineering practices, providing valuable insights for managers of complex projects. Although the context in which this book was written is very different from today, many of the ideas it expresses about software engineering management are still applicable in today's software development.

Key Points

  1. Team Organization: Advocating for surgical teams, excessive democracy in software development organizations often leads to inefficiency and lack of accountability.
  2. Concept Integrity: The core concepts of a software project can only be completed by a very small number of people to ensure the integrity of the concept.
  3. Communication Means: The greatest risk in software development is often not technical defects, but a lack of communication.
  4. Schedule Control: The myth of man-month is deceptive; adding manpower to a delayed project will only make the schedule more delayed.
  5. Process Management: Documentation includes management aspects, avoiding endless chaos.
  6. No Silver Bullet: In the software development process, there are only moderate improvements, and no universal silver bullet.

Excerpts

Chapter 1: Tar Pit

  1. The cost of programming system products is up to nine times that of the program, but programming system products are the truly useful products and the goal of most system development.

Chapter 2: The Mythical Man-Month

  1. The lack of a reasonable schedule is the main reason for project delays. The causes of this widespread disaster include:
    • Lack of effective research on estimation techniques
    • The estimation techniques used implicitly assume that man and month are interchangeable, incorrectly confusing schedule with workload
    • Lack of confidence in estimates, leading to no continuous estimation
    • Lack of tracking and supervision of progress
    • When realizing a deviation in progress, the instinctive reaction is to add manpower
  2. The ease of handling the medium has led to a spread of optimism, but the conception is flawed, and there will always be bugs. In large programming tasks, the probability of everything going smoothly is very low.
  3. Using man-month as a measure of the size of a task is a dangerous and deceptive myth. It implies that the number of people and time are interchangeable.
  4. The author's rule of thumb for scheduling software tasks: 1/3 planning; 1/6 coding; 1/4 component testing and early system testing; 1/4 system testing, with all components completed.
  5. Brooks' Law: Adding manpower to a late project makes it later.

Chapter 3: Surgical Teams

  1. The number of people needing collaborative communication affects development costs, as the main components of cost are mutual communication and interaction, as well as correcting poor communication outcomes. This also implies that systems should be developed by as few people as possible.
  2. Surgical teams: ten people, seven of whom are professionals solving problems, while the system is the product of one person or at most two thinking, thus achieving conceptual consistency objectively.
  3. The success of team expansion relies on the fact that the conceptual integrity of each part has been thoroughly enhanced—the people deciding the design are one-seventh or fewer of the original.

Chapter 4: Aristocratic Despotism, Democratic Politics, and System Design

  1. The integrity of the concept requires that the design must be accomplished by one person or a very small number of mutually understanding individuals.
  2. Architecture must be carefully distinguished from implementation.
  3. The entire creative activity includes three independent phases: architecture, design implementation, and physical implementation. In practice, they often can start simultaneously and proceed concurrently.

Chapter 5: Adding Feet to a Snake

  1. Interaction guidelines for architects:
    • Always remember that developers bear the responsibility for creative and inventive implementation, so architects can only suggest, not dictate
    • Always be ready to suggest a method of implementation for specified instructions, and equally ready to accept any other method that can achieve the goal
    • Maintain a low-key and calm attitude towards the above suggestions
    • Be prepared to abandon insistence on proposed improvements
  2. The second system is the most dangerous system designed by designers. A common tendency is to over-design the second system, adding many embellishments and ideas to it.

Chapter 6: Implementation

  1. Use formal definitions and narrative text simultaneously, one as a standard, the other as a supplement.
  2. If there are at least two implementations at the outset, the definitions will be cleaner and more standardized.

Chapter 7: Why the Tower of Babel Failed

  1. Team communication channels: informal channels; meetings; work manuals.
  2. The purpose of team organization is to reduce unnecessary communication and collaboration, so good team organization is a key measure to address the aforementioned communication issues.
  3. Reducing communication can be achieved through human resource division and defining responsibilities.

Chapter 8: Having a Clear Vision

  1. Data for constructing independent small programs is not applicable to programming system products.
  2. Productivity shows significant variation based on the complexity and difficulty of the task itself.
  3. For commonly used programming statements, productivity seems fixed; using appropriate high-level languages can increase programming productivity by five times.

Chapter 9: Cutting Feet to Fit Shoes

  1. Scale Control
    • Just as a budget for residency space should be established, an overall scale budget should be formulated; just as a scale budget should be established, a budget for backend storage access should be created
    • While specifying how large a module is, precisely define the module's functionality
    • Cultivating developers' attitudes to approach the system as a whole and focus on users is the most important function of software programming managers
  2. Spatial Skills
    • Exchange functionality for size
    • Consider the space-time trade-off
  3. The representation of data is fundamental to programming.

Chapter 10: Outlining the Essentials

  1. Only a small portion of managers' time is spent obtaining information from outside their own minds. The rest of the work is communication: listening, reporting, teaching, advising, discussing, encouraging. However, for the data-based part, a few key documents are crucial.

Chapter 11: Preparing for Rain

  1. Releasing prototypes to users can gain time, but it comes at a high cost. Plan for abandonment.
  2. The only constant is change itself.
  3. Plan for changes in the system: high-level languages, self-documenting techniques, call queues, table-driven methods, etc.
  4. For a widely used program, its maintenance cost is usually 40% or more of the development cost. This cost is severely affected by the number of users. The more users there are, the more bugs are discovered.
  5. A fundamental issue in program maintenance: defect fixes always introduce new bugs with a probability of (20-50)%.

Chapter 12: The Sword and the Shield

  1. The efficiency of developing and maintaining common general programming tools is higher. Each team should be equipped with a tool manager.

Chapter 13: The Whole and the Parts

  1. Good top-down design avoids bugs from multiple aspects.
  2. System debugging should only begin after all components are functioning properly.
  3. During system testing, add only one component at a time.

Chapter 14: Trouble from Within

  1. Milestones must be specific, particular, and measurable events that can be clearly defined.
  2. The PERT technique is a refinement of critical path planning. The PERT chart shows how much ahead someone needs to be to keep their work away from the critical path and suggests ways to compensate for lost time in other parts.
  3. Reduce role conflicts and encourage status sharing.
  4. Having a review mechanism that can understand the truth of the status is necessary; PERT charts and frequent milestones are the basis for this review.

Chapter 15: The Other Side

  1. Self-documenting, that is, integrating documentation into source code, is a direct and powerful push for correct maintenance, ensuring programming users can conveniently and promptly access documentation.

Chapter 16: No Silver Bullet—Essence and Accidents in Software Engineering

  1. All software activities include the fundamental task—building complex conceptual structures composed of abstract software entities, and the secondary task—expressing these abstract entities using programming languages and mapping them into machine language within spatial and temporal constraints.
  2. The difficult part of software development is the specification, design, and testing of these conceptual structures, rather than expressing the concepts and verifying the realism of the implementation.
  3. The unavoidable inherent characteristics of modern software systems: complexity, consistency, variability, and invisibility.
  4. Some breakthroughs in solving secondary difficulties: high-level languages, time-sharing, unified programming environments.
  5. The hope for a silver bullet: high-level languages, object-oriented programming, artificial intelligence, etc.
  6. The most likely radical solution to building software is not to develop any software.

Reconsidering "No Silver Bullet"

  1. "Focus on quality, and productivity will naturally improve." "The development of systematic software development methods is aimed at solving quality issues (especially avoiding large disasters), rather than considerations of productivity."

20 Years Later: The Mythical Man-Month

  1. Concept integrity is the core of product quality, and having an architect is the most important step towards achieving concept integrity.
  2. There is no building of throwaway prototypes—the waterfall model is wrong.
  3. Code modules should encapsulate using well-defined interfaces, and the internal structure of these modules should be the programmer's private property, invisible externally.
  4. The only way to thoroughly improve software robustness and productivity is to elevate a level, using modules or object composition for program development.

Author Biography

Frederick P. Brooks, Jr. is a professor of computer science at the Kenan-Flagler Business School at the University of North Carolina. He has received the Turing Award, and the Association for Computing Machinery (ACM) praised him for his "milestone contributions to computer architecture, operating systems, and software engineering."

Comments

Pleaseto continueComments require admin approval before being visible

No comments yet. Be the first to comment!