← All opinions

Keep It Simple: The Hardest Principle in Software

kissarchitectureprinciples

"Keep it simple" is easy to say and extraordinarily hard to do. Simplicity in software isn't the absence of effort — it's the result of deep understanding and deliberate restraint.

Why we over-engineer

Over-engineering usually comes from good intentions:

  • Future-proofing — "We might need this later"
  • Flexibility — "Let's make it configurable"
  • Best practices — "This is how [Big Tech Company] does it"

The problem is that each of these adds complexity now for benefits that may never materialize. You're paying real costs today for hypothetical value tomorrow.

Simplicity is a skill

Writing simple code requires you to:

  1. Understand the problem deeply — you can't simplify what you don't understand
  2. Resist the urge to generalize — solve the problem you have, not the problem you imagine
  3. Delete code — the simplest code is code that doesn't exist
  4. Name things well — if you can't name it clearly, you probably don't understand it yet

A practical test

Before adding any abstraction, ask yourself:

"If I removed this, would the code still work?"

If the answer is yes, remove it. If the answer is "yes, but we might need it later," still remove it. You can always add it back when "later" actually arrives — and when it does, you'll understand the requirements better than you do now.

The KISS principle in practice

KISS doesn't mean writing naive code. It means choosing the simplest solution that correctly handles your actual requirements. Sometimes that's a plain function. Sometimes that's a carefully designed class hierarchy. The point is to let the problem dictate the complexity, not the other way around.

The best engineers we've worked with share one trait: they make hard problems look easy. That's not because they're cutting corners — it's because they've developed the skill of simplicity.