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.

Simplicity is the harder choice

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.

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.

AI generated

Comments

Sign in to leave a comment or reply to one.

Sign in

C. A. R. Hoare

C. A. R. Hoare, born in 1934, is a British computer scientist recognized for his significant contributions to programming language design and software engineering. He is best known for developing the Quicksort algorithm and for his work on formal verification and the concept of Hoare logic, which laid foundational principles in the field of computer science. Hoare has received numerous accolades, including the Turing Award in 1980 for his pioneering work.

Graph