The Four Heads of Complexity
Kent Beck has recently written about the four distinct aspects of complexity: states, interdependencies, uncertainty, and irreversibility. To tame complexity, you need to cut off one of these heads, and keep the others under control. What are they?
If there is too many states and their combinations in the system, it becomes hard to understand.
If there are many interdependencies then any action can have unforeseen consequences. And again, the system becomes harder to understand.
Uncertainty - unpredictable outside stresses constantly keep the system in motion, never allowing it to settle down. I assume that uncertainty will lead to more states and interdependencies, as the system tries to deal with it.
Irreversibility - in Kent’s words, “When the effects of decisions can’t be predicted and they can’t be easily undone, decisions grow prohibitively expensive.” When you make decisions under uncertainty and you cannot reverse them then you are in a much tougher situation.
Kent describes how Henry Ford extremely limited the number of possible states in the manufacturing process by designing a rigid assembly line where a single action happens at a time. Then he writes about everything Facebook did to conquer the irreversibility head, i.e. to make it easy and quick to discover defects in code and to fix them.
In my opinion, the first two heads comprise what I typically understood as uncertainty, i.e. "too many things & connections". The two final heads then relate in my view primarily to decision making. And the first two do as well - the more complex your system is, the less you understand it and thus the harder it is to make good decisions.
This is certainly highly relevant for software, especially its design. But, as we have seen from the example of Facebook, also its deployment and operation.