There are two ways of constructing a software design; one way is to make it so simple that there are obviously... — C. A. R. Hoare
There are two ways of constructing a software design; one way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.
Author: C. A. R. Hoare
Insight: We tend to think complexity is a sign of sophistication. A complicated system feels like it must be handling something important, right? But Hoare's insight cuts against this: simplicity is actually the harder achievement. Anyone can add layers, exceptions, and workarounds until a design becomes so tangled that nobody can quite point to what's wrong with it. Complexity becomes a kind of camouflage for unclear thinking. This plays out everywhere, not just in software. A business process, a relationship dynamic, a health habit—we often make things more complicated when we're stuck, figuring that if we add enough steps or rules, we'll finally solve the problem. But that just pushes the real issue deeper. The genuinely difficult work is stripping things down to their essence, testing whether they actually work when they're bare and visible. The catch is that simplicity requires relentless honesty. You have to keep asking whether each part of your design actually earns its place, and you have to be willing to say "I don't know how to make this simpler yet" instead of papering over the gap with more complexity. That vulnerability is probably why the simple approach stays rare.