Empirical studies show that higher complexity makes systems harder to maintain and more likely to accumulate defects over time. When complexity is reduced, maintainability improves, and long lived systems tend to have fewer errors.
So why aren't all systems made "simple"?
First, not all complexity can be avoided. Some complexity is inherent to the problem or domain itself. Even so, intuition often leads us to believe that simple solutions are easy to create. In reality, the opposite is quite true.
Simplicity is difficult to achieve because it requires very careful design. It forces you to:
“I have made this [letter] longer than usual because I have not had time to make it shorter.”
- Blaise Pascal
Unnecessary complexity, on the other hand, is the default state. Systems grow messy if you do nothing to actively prevent it. Features pile up, dependencies spread, shortcuts accumulate, and overall cyclomatic complexity increases.
Chaos does not need much effort. Order does.
Both simplicity and unnecessary complexity impose a cost. The difference lies in when it is paid and how much it compounds.
Simplicity increases initial effort while minimizing cumulative effort over time. It is about doing the work that prevents future work. In long-lived systems it is often better to pay the price once upfront than to keep paying for unnecessary or unintended complexity every day over the entire lifetime of the project.