"Simplicity is prerequisite for reliability"

Note: this is a snapshot of an older wiki topic, see https://devsimplicity.com for the new "Simplicity as a Prerequisite for Reliability in Modern Software Development" series.

Simple is not easy, easy is not simple

Let's first get that out of the way. People are often equating easiness with simplicity, but they are very different words.

  • Simple (vs complex) - from "sim plex", literally: one-fold (i.e. not braided)

  • Easy (vs hard) - from "lying at, lie near"; familiar, near to our understanding

Rich Hickey goes more into details about this in his presentation. If you haven't already, check it out (I don't agree with everything he said, but it's a good presentation, definitely worth watching).

Most often, achieving simplicity is the hardest thing to do in software development and usually it requires an enormous experience.

Simplicity is probably the most important aspect of software development. As Edsger Dijkstra put it, "Simplicity is prerequisite for reliability".

If your design is not simple, the whole thing will eventually become fragile, unreliable and starting to fall apart.

Unfortunately, complexity sells much better and when you combine that with cargo-cult programming and resume driven development, you get the modern web development mess.

The same goes for modern system administration (or devops, if you will) - if you've been working with UNIX long enough, all you need to do is take a look at Kubernetes mess.

I created devsimplicity.com as a simple, wiki-like place, focused mostly on addressing those issues, avoiding complexity traps and as a quick way to find&explore the better/saner alternatives. There's still lot of work to do, but it's getting better. If you like the idea, follow me on twitter.com/devsimplicity or here for the updates.