After years of trying out different development methodologies — TDD, layers of abstractions, clever patterns — one principle has consistently delivered the best results for me:
KISS: Keep It Simple, Stupid.
Complexity is a temptation
As developers, we often fall into the trap of overengineering.
We create layers of abstractions before we need them. We write general-purpose tools for very specific problems. We try to be clever instead of being clear.
Sometimes it comes from a good place. We want to future-proof our code, be “smart” engineers, or follow best practices to the letter.
But more often than not, complexity makes everything harder: harder to read, harder to maintain, and harder to change.
Simplicity wins — in code and in life
The best solutions I’ve built (and the ones that were easiest to ship, maintain, and scale) were always the simplest ones.
Let’s take a few examples:
- In code: A few well-named functions and clear conditionals will beat a generic “engine” 9 out of 10 times.
- In architecture: A monolith is often better than a microservice jungle when you’re early-stage.
- In design: A single CTA (Call To Action) on a landing page will outperform three clever alternatives fighting for attention.
- In communication: Saying “This feature is broken” is far more effective than “There appears to be an issue in our core logic related to feature X which might be causing unexpected behavior.”
Simplicity communicates. Complexity hides.
Make it so simple even your grandma could understand it
There’s a well-known phrase that says:
“Write code as if the person who ends up maintaining it is a violent psychopath who knows where you live.”
I get the point, and I agree with the spirit of it. But we don’t need to go that far 😄
Personally, I like to think:
I want my code to be so clear, that even my grandma — if she could — would understand what I’m trying to do.
It’s not about dumbing things down. It’s about writing code that’s human.
Readable. Obvious. Guessable.
If someone reads your code and immediately understands what’s going on — how to change it, extend it, or even refactor it — you’ve already won.
And that “someone” doesn’t always have to be a developer. Sometimes it’s your future self at 2 AM, wondering “what the hell was I thinking?”
When popular principles don’t always help
There are a lot of coding mantras that float around like universal truths. But sometimes, following them too strictly can become counterproductive.
“Everything must be DRY.”
Yes, Don’t Repeat Yourself is useful — up to a point. But I’ve learned something that’s really stuck with me lately:
Do the thing first. Then iterate.
You don’t always need to extract reusable logic immediately.
Sometimes, repeating yourself once or twice helps you understand the problem better, and you can refactor with clarity later.
Trying to abstract too early can make your code harder to follow, not easier.
We’ve all been there: stuck, overthinking, reworking the same piece of logic for hours.
In the end, you just needed to build the damn thing and clean it up afterward.
Break the problem into small, achievable steps. Move forward.
You’ll know when it’s time to improve it.
“Code comments are bad.”
For a while, I avoided writing comments. I believed the code should speak for itself.
And in a perfect world, that would be true.
But here’s the reality: sometimes code doesn’t explain itself.
There are edge cases, tricky business logic, or decisions that don’t come across clearly in the code alone.
Adding a quick comment to explain “why” something is done a certain way can save your teammate (or future you) hours of guesswork.
Not every comment is a code smell. Sometimes it’s just good documentation.
And no, it doesn’t mean your code is bad. It means you care about clarity.
KISS isn’t laziness. It’s strategy
Of course, not everything can be simple all the time.
Sometimes requirements are messy. Sometimes you work in a legacy codebase. Sometimes performance or security require extra layers.
KISS doesn’t mean “avoid all complexity.” It means: don’t add it unless you must.
Start with the simplest possible approach that solves the problem — and only add more when there’s a clear, proven need.
A philosophy beyond code
KISS isn’t just a coding principle. It’s a mindset. I’ve applied it to:
- Planning: What’s the simplest version of this feature we can ship first?
- Debugging: Can I reproduce the problem in a minimal example?
- Collaboration: How can I explain this idea to a teammate in one sentence?
And honestly? It works in life too.
The simplest diets are the ones people follow.
The simplest goals are the ones people reach.
The simplest habits are the ones that stick.
If you find yourself stuck or lost in complexity, try this:
Take a step back and ask: “What would this look like if it were simple?”
Nine times out of ten, that version is better. And it’s what you’ll wish you’d done in the first place.
Keep it simple, stupid.
It works.