Contents

Reducing Complexity Without Reducing Ambition: Practical Principles for Simpler Systems

Reducing Complexity Without Reducing Ambition: Practical Principles for Simpler Systems

Because complexity is not an achievement it’s a warning sign.

/en/simple-systems/img.png

Complexity Is Not Competence: It’s a Warning

In our industry, there’s a strange fascination with complexity.

We worship it, justify it, and use it as a business card.

As if creating something hard to understand were a sign of genius.

Spoiler: it isn’t.

A complex system is not a masterpiece. It’s an early warning often ignored that foreshadows slowdowns, bugs, rising costs, and increasingly sluggish decision-making. Complexity doesn’t make a team great: it paralyzes it.

The truth is simple and it will sting for some:

Writing complicated code is easy. Writing simple code is an act of courage.


KISS Is Not a Slogan. It’s a Technical Maturity Test

The “Keep It Simple, Stupid” principle is probably the most cited and least applied concept in software engineering.

Many say it, very few live it.

The uncomfortable reason: simplicity exposes you. You can’t hide behind layered patterns, fragile abstractions, or over-engineered architectures created for scenarios that will never happen. Simplicity requires clarity of purpose, real competence, and the discipline to cut what isn’t needed.

That’s why complicated solutions are often preferred: they look more impressive, more “senior,” more LinkedIn-ready.

If you can explain it in 30 seconds, it’s good. If it takes you 15 minutes, it’s probably smoke.


Readability vs. Wizard Tricks: A Pointless Conflict

There’s a destructive trend in our industry: confusing syntactic compression with elegance.

One-liners, functions that hide three different behaviors, ultra-contracted syntax that “only we understand” as if being indecipherable were a professional virtue.

It isn’t.

Code that doesn’t communicate is dead code. Code that requires mental decoding is an act of hostility toward the team.

If a junior can’t read it, it’s not elegant: it’s stupid.

Readability is not a luxury: it’s one of the most powerful tools we have to reduce accidental complexity the kind that comes not from the problem itself, but from how we decide to solve it.


Essential Complexity vs. Accidental Complexity

Yes, some problems are genuinely complex. The domain the “essential” part can be rich, intricate, difficult.

But let’s be honest: most of the complexity found in modern systems does not come from the domain. It’s accidental, self-inflicted, created by poor or rushed technical decisions.

And the worst part is that this complexity adds no value. It actually takes value away.

If the problem is hard and the solution is hard, you haven’t solved anything. You’ve just created another problem.


YAGNI, Anti-Patterns, and the Fetish for Abstraction

We live in an era where designing architectures for future traffic that will never come seems more exciting than solving today’s needs.

It’s the “build for safety” disease, often hiding professional insecurity. Or worse, the fear of being replaced.

Sometimes we introduce abstractions not because they’re useful, but because “they look more enterprise.”

You can’t scale what you haven’t built yet.

The discipline of “not doing unnecessary things” is the first defense against technical debt. And yet, it’s one of the least respected.


Simplicity as a Scaling Accelerator

There’s a counterintuitive truth that people building highly complex systems struggle to accept:

A simple system scales better than a complex one.

It scales better technically, because it’s easier to modify, observe, and reinforce. But it scales especially on the human side: a team that understands the whole system can move at a speed impossible for those lost in diagrams.

Simple systems create fast teams. Fast teams build better products. Better products attract customers. Customers bring traffic. Traffic finally requires real scaling.

Simplicity is an investment, not a limitation.


Complexity as a Cultural Killer

A complex architecture doesn’t only affect the codebase it affects people.

  • It slows down decisions.
  • It increases inter-team dependencies.
  • It destroys ownership.
  • It makes onboarding an obstacle course.
  • It turns debugging into an act of faith.

If you need a 12-page diagram just to figure out who to call, the problem isn’t the organization it’s the system.


Over-Engineering as a Form of Professional Insecurity

Let’s say it clearly: a lot of complexity comes from ego.

Some engineers build unnecessary structures to prove how “smart” they are. Others use complexity as a defensive wall, a way to make themselves indispensable. Others use it as an excuse to delay delivery (“it’s not mature enough yet”).

Simplicity, on the other hand, puts pressure on you: when everything is clear and linear, the result is judged immediately.

Working simply is scary: anyone can judge you.

But it’s precisely this transparency that creates truly healthy systems.


Simplicity Can Be Measured

Complexity hides well. Simplicity does not it’s visible.

This is why it’s useful to introduce metrics (even basic ones) that indicate how understandable, maintainable, and modifiable a system is. Not because you need perfect numbers, but because what you measure can improve.

And what you refuse to measure is often already harming you.


Conclusion: Simplicity Is Not Minimalism It’s Responsibility

Making a system simple is not an aesthetic act, nor a philosophical exercise. It’s an act of leadership.

It requires vision, discipline, the ability to say no, and above all the awareness that what we build must survive over time, in the hands of others, under future pressures we cannot yet foresee.

Simplicity doesn’t reduce ambition it makes ambition achievable.

Complexity is a debt.
Simplicity is an investment.