QSM Vol 1

QSM: Volume 1.1: How Software is Built

Part 1. Patterns of Quality

Chapter 1: What Is Quality? Why Is It Important?

Summary

  1. Quality is relative. What is quality to one person may even be lack of quality to another.
  2. Finding the relativity involves detecting the implicit person or persons in the statement about quality, by asking,  "Who is the person behind that statement about quality."
  3. Quality is neither more nor less than value to some person or persons. This view allows us to reconcile such statements as,"Zero defects is high quality." , "Lots of features is high quality." , "Elegant coding is high quality." , "High performance is high quality." , "Low development cost is high quality." , "Rapid development is high quality." , "User-friendliness is high quality." All of the statements can be true at the same time.
  4. Quality is almost always a political/emotional issue, though we like to pretend it can be settled rationally.
  5. Quality is not identical with freedom from errors. A software product that does not even conform to its formal requirements could be considered of high quality by some of its users.
  6. Improving quality is so difficult because organizations tend to lock on to a specific pattern of doing things. They adapt to the present level of quality, they don't know what is needed to change to new level, and they don't really try to find out.
  7. The patterns adopted by software organizations tend to fall into a few clusters, or subcultures, each of which produces characteristic results.
  8. Cultures are inherently conservative. This conservatism is manifested primarily in
    1. the satisfaction with a particular level of quality
    2. the fear of losing that level in an attempt to do even better
    3. the lack of understanding of other cultures
    4. the invisibility of their own culture

Chapter 2. Software Subcultures

Summary

  1. Philip Crosby's "Quality is Free" ideas can be applied to software, though perhaps with several modifications.
  2. In software, conformance to requirements is not enough to define quality, because requirements cannot be as certain as in a manufacturing operation.
  3. Our experience with software tells us that "zero defects" is not realistic in most projects, because there is diminishing value for the last few defects. Moreover, there are requirements defects that tend to dominate once the other defects are diminished.
  4. Contrary to Crosby's claim, there is an "economics of quality" for software. We are not searching for perfection, but for value, unless we have a psychological need for perfection not justified by value.
  5. Any software cultural pattern can be a success, given the right customer.
  6. "Maturity" is not the right word for sub-cultural patterns, because it implies superiority where none can be inferred.
  7. We can identify at least six software sub-cultural patterns:
    • Pattern 0: oblivious
    • Pattern 1: variable
    • Pattern 2: routine (but unstable)
    • Pattern 3: steering
    • Pattern 4: anticipating
    • Pattern 5: congruent
  8. Hardly any observations exist on Patterns 4 and 5, as almost all software organizations are found in other patterns.
  9. In this book, we shall be concerned primarily with Patterns 1-3—how to hold onto a satisfactory pattern or move to a more satisfactory one.

Chapter 3. What Is Needed To Change Patterns?

Summary

  1. Each pattern has its characteristic way of thinking and communicating.
  2. The first essential to changing a pattern is changing thought patterns that are characteristic of that pattern.
  3. Thinking patterns consist of models, and new models can be used to change thinking patterns
  4. In the less stable patterns, models need not be precise, but merely convincing. Indeed, precise models wouldn't make any sense without first establishing stability.
  5. Models help us to:
    • discover differences in thinking, before they have big consequences
    • work on ideas together, to facilitate team-building
    • understand the reasons for various project practices
    • record communication so newcomers can get productive much faster
    • maintain a record we can use to improve our processes for the next time
    • be creative, because projects will never be routine.
  6. Before you set about choosing a better pattern, you should always ask, "Is our present pattern good enough?"
  7. The pattern you choose depends on a tradeoff among organizational demands, customer demands, and problem demands. These tradeoffs can be represented by choosing a point in "pattern space."
  8. There is always a temptation for a software organization to stagnate by not choosing a new pattern, but instead reducing customer demands or problem demands.
  9. The process of recognizing that a new pattern is needed is hindered by circular arguments that close the organization to the information it needs.
  10. The key to opening closed circles is the question, "Is your rate of success okay?" Closed circles, however, tend to prevent this question from being asked.
  11. Lack of trust tends to keep this key question from being answered truthfully, so organizational change often begins with actions for developing trust.

Part II. Patterns Of Managing

Chapter 4: Control Patterns for Management

Summary

  1. The Aggregate Control Model tells us that if we're willing to spend enough on redundant solutions, we'll eventually get the system we want. Sometimes this is the most practical way, or the only way we can think of.
  2. The Feedback Control Model tries for a more efficient way of getting what we want. A controller controls a system based on information about what the system is currently doing. Comparing this information with what is planned for the system, the controller takes actions designed to bring the system's behavior closer to plan.
  3. The job of Engineering Management is to act as controller in engineering projects. Failures of engineering management can be understood in terms of the Feedback Control Model. Pattern 2 managers often lack this understanding, which often explains why they experience so many low quality, or failed, projects.
  4. Projects can fail when there is no plan for what should happen.
  5. Projects can fail when the controller fails to observe what significant things are really happening.
  6. Projects can fail when the controller fails to compare the observed with the planned.
  7. Projects can fail when the controller cannot or will not take action to bring actual closer to planned.

Chapter 5 Making Explicit Management Models

Summary

  1. Every manager and programmer has models of how things work in their software pattern, though many models are implicit in their behavior, rather than stated explicitly. Things go awry in software projects because people are unable to face reality and because they use incorrect system models.
  2. Linear models are attractive because of additivity. Linear systems are easier to model, easier to predict, and easier to control. Managers often commit scaling fallacies because linear models are so attractive.
  3. The diagram of effects is a tool for helping model system dynamics to reveal non-linearities. Being a two-dimensional picture, it is more suited than verbal descriptions to the job of describing non-linear systems.
  4. One way of developing a diagram of effects is to start with the output—the variable whose behavior you wish to control. You then brainstorm and chart backwards effects from that variable—other variables that could affect it. From these, you chart backwards again, unveiling secondary effects, which you can trace through the primary effects to the variable of interest. You may want to explicitly indicate multiplicative effects because of their importance.
  5. Non-linearity is the reason things go awry, so searching for non-linearity is a major task of system modeling.

Chapter 6: Feedback Effects

Summary

  1. The Humpty Dumpty Syndrome explains one reason why project managers are unable to be courteously stubborn to their mangers, and what happens as a result.
  2. Projects run away—explode or collapse—because managers believe two fallacies: The Reversible Fallacy (that actions can always be undone) and The Causation Fallacy (that every cause has one effect, and you can tell which is cause and which is effect.)
  3. One reason management action contributes to runaway is the tendency to respond too late to deviations, which then forces management to big actions which themselves have non-linear consequences. That's why it's necessary to "act early; act small."
  4. The effect of Brooks's Law can be made worse by management action. Moreover, the same pattern of management action can lead to a Generalized Brooks's Law, which shows how management action is often the leading cause of project collapse.
  5. One reason management action contributes to runaway is the tendency to respond too late to deviations, which then forces management to big actions which themselves have non-linear consequences. That's why it's necessary to "act early; act small."
  6. Negative feedback is the only mechanism that has the speed and power to prevent runaway due to positive feedback loops in a system. The Pattern 3 controller has two major negative feedback loops with which to exercise control—one involving resources and one involving requirements.


주요 쳅터

Acknowledgments
Preface

I Patterns of Quality

1. What Is Quality? Why Is It Important?

1.1 A Tale of Software Quality
1.2 The Relativity of Quality
1.3 Quality Is Value to Some Person
1.4 Precision Cribbage
1.5 Why Improving Is So Difficult
1.6 Software Culture and Subculture
1.7 Helpful Hints and Suggestions
1.8 Summary
1.9 Practice

2. Software Subcultures

2.1 Applying Idea to Software
2.2 Six Software Subcultural Patterns
2.3 Pattern 0: Oblivious
2.4 Pattern 1: Variable
2.5 Pattern 2: Routine
2.6 Pattern 3: Steering
2.7 Pattern 4: Anticipating
2.8 Pattern 5: Congruent
2.9 Helpful Hints and Suggestions
2.10 Summary
2.11 Practice

3. What Is Needed to Change Patterns?

3.1 Changing Thought Patterns
3.2 Using Models to Choose A Better Pattern
3.3 Opening Patterns to Information
3.4 Helpful Hints and Suggestions
3.5 Summary 
3.6 Practice

II Patterns of Managing

4. Control Patterns for Management

4.1 Shooting at Moving Target
4.2 Aggregate Control Model
4.3 Patterns and Their Cybernetic Control Models
4.4 Engineering Models
4.5 From Computer Science to Software Engineering
4.6 Helpful Hints and Suggestions
4.7 Summary
4.8 Practice

5. Making Explicit Management Models

5.1 Why Things Go Awry 
5.2 Linear Models and Their Fallacies
5.3 Diagram of Effects
5.4 Developing a Diagram
5.5 Nonlinearity Is The Reason Things Go Awry
5.6 Helpful Hints and Suggestions
5.7 Summary
5.8 Practice

6. Feedback Effects

6.1 The Humpty Dumpty Syndrome
6.2 Runaway, Explosion, and Collapse
6.3 Act Early, Act Small
6.4 Negative Feedback - Why Everything Doesn't Collapse
6.5 Helpful Hints and Suggestions
6.6 Summary
6.7 Practice

7. Steering Software

7.1 Methodologies and Feedback Control
7.2 The Human Decision Point
7.3 It's Not the Event That Counts, It's Your Reaction to the Event
7.4 Helpful Hints and Suggestions
7.5 Summary
7.6 Practice

8. Failing to Steer

8.1 I'm Just a Victim
8.2 I Don't Want to Hear Any of That Negative Talk
8.3 I Thought I Was Doing the Right Thing
8.4 Helpful Hints and Suggestions
8.5 Summary
8.6 Practice

III Demands That Stress Patterns

9. Why It's Always Hard to Steer

9.1 Game of Control
9.2 Size / Complexity Dynamic in Software Engineering
9.3 Helpful Hints and Suggestions
9.4 Summary
9.5 Practice

10. What Helps to Stay in Control

10.1 Reasoning Graphically About the Size / Complexity Dynamic
10.2 Comparing Patterns and Technologies
10.3 Helpful Interactions
10.4 Helpful Hints and Suggestions
10.5 Summary
10.6 Practice

11. Responses to Customer Demands

11.1 Customers Can Be Dangerous to Your Health
11.2 The Cast of Outsiders
11.3 Interactions with Customers
11.4 Configuration Support
11.5 Releases
11.6 Helpful Hints and Suggestions
11.7 Summary
11.8 Practice

IV Fault Patterns

12. Observing and Reasoning About Errors

12.1 Conceptual Errors About Errors
12.2 Misclassification of Error Handling Process
12.3 Observational Errors About Errors
12.4 Helpful Hints and Suggestions
12.5 Summary
12.6 Practice

13. The Failure Detection Curve

13.1 The Difference Detection Dynamic
13.2 Living with the Failure Detection Curve
13.3 Helpful Hints and Suggestions
13.4 Summary
13.5 Practice
13.6 Chapter Appendix: Official Differences Between the Pair Pictures in Figure 13-1

14. Locating the Faults Behind the Failures

14.1 Dynamics of Fault Location
14.2 Circulation of STI's Before Resolution
14.3 Process Faults: Losing STI's 
14.4 Political Time: Status Walls
14.5 Labor Lost: Administrative Burden
14.6 Helpful Hints and Suggestions
14.7 Summary
14.8 Practice

15. Fault Resolution Dynamics

15.1 Basic Fault Resolution Dynamics
15.2 fault Feedback Dynamics
15.3 Deterioration Dynamics
15.4 Helpful Hints and Suggestions
15.5 Summary
15.6 Practice

V Pressure Patterns

16. Power, Pressure, and Performance

16.1 The Pressure / Performance Relationship
16.2 Pressure to Find the Last Fault
16.3 Stress / Control Dynamic
16.4 Forms of Breakdown Under Pressure
16.5 Management of Pressure
16.6 Helpful Hints and Suggestions
16.7 Summary
16.8 Practice

17. Handling Breakdown Pressures

17.1 Shuffling Work
17.2 Ways of Doing Nothing 
17.3 The Boomerang Effect of Short-Circuiting Procedures
17.4 How Customers Affect Boomerang
17.5 Helpful Hints and Suggestions
17.6 Summary
17.7 Practice

18. What We've Managed to Accomplish

18.1 Why Systems Thinking?
18.2 Why Manage?
18.3 Estimating Our Accomplishments
18.4 What Each Pattern Has Contributed
18.5 Meta-Patterns
18.6 Helpful Hints and Suggestions
18.7 Summary
18.8 Practice


1장: 품질이란 무엇인가? 왜 중요한가?

품질은 상대적이다. 품질은 사람에 연관되어 있기 때문이다.

따라서 품질에 대한 정의는 정치적이고 감정적 측면을 포함한다. 품질은 어떤 사람의 의견이 중요한지에 대한 일련의 결정을 항상 포함하고 있기 때문이다. 그러나 품질에 사람이 연관되어 있다는 사실은 간과되기 쉽다. 정치적, 감정적인 요소는 소프트웨어 세상에서는 잘 다뤄지지 않기 때문이다. 반대로 사람이 연관되어 있기 때문에 품질이 상대적이라는 사실을 이해하면 품질에 대해 사람들이 서로 모순되는 생각을 가지고 있는 상황이 설명된다.

품질을 높이는 것은 쉽지 않다. 왜 그럴까?

소프트웨어 조직이 어느 특정 품질 수준에 속박되어서, 조직의 변화가 '문화의 보수적인 속성'으로 인해 방해받을 수 있다.

위와 같은 요인 때문에 변화가 어렵다. 고품질 소프트웨어의 새로운 문화를 달성하기 위해서는 개발자나 관리자가 이러한 요인을 효과적으로 처리하는 능력을 배워야 한다.

그러기 위해서는,

를 해야 한다.

연습문제

제품의 초기 버전이나 경쟁 제품을 사용해 본 다음, 특정 소프트웨어가 시간의 흐름에 따라 그 가치와 품질에 대한 정의가 어떻게 변화했는지를 논의하라.

  1. 개발 초기: 배경화면이 예뻐야 한다. 빠른 속도로 열람할 수 있어야 한다.
  2. 사용자들의 요구: 배경화면의 종류가 다양해야 한다.
  3. 사용자들의 요구: Crop 기능이 올바로 동작해야 한다. 내 폰의 크기에 맞는 배경을 제공해야 한다.

당신의 조직의 하드웨어 아키텍처를 표준화 할 경우에, 조직이 속박될지도 모르는 일련의 특성들의 리스트를 작성하라.

여러분이 속해 있는 조직의 사람들이 제품의 품질 수준에 정말 만족하는지를 나타내는 증거는 무엇인가? 그 수준에 불만을 표시하는 사람들을 조직은 어떻게 다루고 있는가?

만족에 대한 증거

불만 표시자 다루는 방법