View: Conflict

What happens when Forces pull us in conflicting directions?

Multiple forces may propel a center in the same "direction"—that is, they may all push it toward the same shape or structure. This is delightful when it happens, because it means that the center, so shaped, can accommodate all of those forces well.

More often, though, we see that forces conflict. One force pushes a center toward one structure, and another pushes it toward a different structure. When conflict happens, we are forced to make tradeoffs. It is not possible to satisfy both forces at once, so we have to choose one, or make some compromise between them.

We often find situations in software development where one force is pulling the system to develop in one direction, and another force is pulling it in the opposite direction. A common metaphor among software developers is to say that the competing needs or forces are in tension. I think that's a good metaphor, but in this book we'll use the more general and evocative term conflict to refer to this situation.

If the opposing forces cancel out perfectly, then the net effect on the system's development may be zero—no change. Even so, to someone inside the software system, the presence of equal opposing forces feels quite different from the absence of forces. Conflict is stressful.

One way to view software design is that it gives us a way of breaking the gridlock between conflicting forces. Imagine busting the rust off a crank so it can turn freely. That's what good design feels like. A well-designed system arranges things so the forces that were previously butting heads can now slide easily past each other.

Further Reading