InnocentZero's Treasure Chest

HomeFeedAbout MeList of interesting people

18 Oct 2025

Simplicity in software

Simplicity in Software

Rich Hickey

  • "Simplicity is a prereq for reliability" ~ Dijkstra.
  • Cardinaility is not simplicity. A simple thing may be large, in fact it is. What matters is how 'tangled' it is.
  • Simple is actually an objective notion. As in, it can be quantified based on how entangled the thing is.
  • Easy comes from the "ease of use" or the "familiarity" of the <insert x> that you're trying to use.
  • It's relative!
  • If you want everything to be familiar, you will never learn anything new because it can't be significantly different from what you already know and not drift away from the familiarity.
  • Separate the construct (code) from the artifact.
  • We have small context memories. Keeping large things in our heads is not our strong suit.
  • If you can't reason about your program, you can't make these decisions.
  • List of complex things:
    • State
    • Methods
    • Inheritance
    • switch statements
    • pattern matching
    • loops/fold
  • List of simple things:
    • Values
    • Functions
    • Namespaces
    • Polymorphism
    • set functions
  • If something depends on the private behavior of something else, things are complex.

Peter's Ink and Switch talk

  • Complexity isn't difficulty.
  • Complexity occurs when your systems interact with each other and become 'unreasonable'.
  • You literally lose the ability to reason about them. You cannnot predict what's going to happen next.
  • However, a complex system can also be generative and surprising if you harness that complexity in positive ways.
  • The most basic reason code gets complex fast is because we start off naively and then have to keep adding defensive measures to it.
  • This leads to shotgun parsing, which creates a big giant mess of a codebase.
  • You have validation checks and stuff littered everywhere.
  • The actual logic of the code begins to turn into dust.
  • The value of well written libraries and languages and type systems is immense. They can greatly simplify your code and make expressiveness their prime goal.

Other posts
Creative Commons License
This website by innocentzer0 is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.