DEV Community

Nick | OneThingWell.dev
Nick | OneThingWell.dev

Posted on • Edited on • Originally published at onethingwell.dev

Simplicity as a prerequisite for reliability

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 detail 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 an extremely important, 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 start to fall apart.

Unfortunately, complexity sells much better, and together with cargo-cult programming and resume driven development, this is one of the roots of the modern software development mess.




Note: This is a snapshot of the wiki page from OneThingWell.dev Wiki, you can find the latest, fully formatted version here: onethingwell.dev/simplicity-as-a-prerequisite-for-reliability.

Top comments (2)

Collapse
 
sirseanofloxley profile image
Sean Allin Newell

Would be interested in more of your thoughts on "kubernetes mess".

Collapse
 
onethingwell profile image
Nick | OneThingWell.dev • Edited

Sure, I need to create a page about it, but I'll add just a few quick thoughts here.

I've been using linux/bsd on all my desktops and servers since early 00's. I like being "close to the metal" and having the full control over things; I get that I'm not the target audience for k8s.

What I don't like is all this propaganda about k8s being a "magic bullet". I wish younger people would, instead of spending enormous amount of time on k8s (which may tomorrow collapse under its complexity), rather spend some of that time on learning more about the OS itself and UNIX way of doing things. There's a good chance that they'll realize that they already have everything they need, rock-solid and battle-tested for a very long time. Even if, after that, still decide on k8s, they'll have much better understanding how things work underneath and what are the trade-offs.

I'll write more about this soon.