← Back to blog
Software Craftsmanship

The KISS principle in software engineering: simplicity as discipline

Keep It Simple, Stupid. Four words that sum up one of the hardest virtues to practise in software development: don't over-engineer, don't anticipate, don't complicate what can stay simple.

The KISS principle β€” Keep It Simple, Stupid β€” originates from the US Navy in the 1960s. In software engineering, it expresses a fundamental idea: a system works better when it stays simple rather than complicated. Simple doesn't mean simplistic or naive β€” it means complexity is only introduced when it is genuinely necessary.

Simple β‰  simplistic

Simplicity is work. It is often easier to write complex code than simple code. Simple code is readable, testable, and modifiable. Complex code often reflects insufficiently clarified thinking, or anticipation of needs that may never materialise.

The traps of over-engineering

  • Premature abstractions: creating interfaces and abstract classes before having two concrete implementations
  • Unnecessary design patterns: applying a pattern because it's elegant, not because it solves a real problem
  • Excessive genericity: designing a system capable of handling all possible cases, including those that will never occur
  • Unnecessary indirection: multiplying layers, wrappers, and adapters for "future flexibility"

KISS + YAGNI + DRY

KISS works alongside two other principles:

  • YAGNI (You Aren't Gonna Need It β€” don't implement what you don't yet need)
  • DRY (Don't Repeat Yourself β€” avoid duplication). Together, they guard against accidental complexity, which Fred Brooks distinguishes from essential complexity β€” that inherent to the problem being solved.

When simplicity is counterproductive

KISS has its limits. Some domains are intrinsically complex: finance, healthcare, high-availability distributed systems. Over-simplifying a rich domain means ignoring its reality. In these cases, Domain-Driven Design and careful modelling are more appropriate than parsimony.

The goal is not to write as little code as possible β€” it's to write only the necessary code.

Have a project in mind?

Let's talk about your challenges and see how Gotan can help.

Contact us