I’m a compulsive note-taker (using OneNote, which I think tops all other products in the category). I like to condense information, in plain english, and codify insights so I can refer to them later when I need a refresher.
Here’s my notes from Rich Hickey’s 2011 talk “Simple Made Easy” (augmented with bits from his 2012 RailsConf talk). This is extraordinary! It’s near the top of my list of software engineering resources (across all formats - talks, books, etc.). If you haven’t seen the talk, go watch it and I promise you will be so much wiser for it.
It was a small bit of effort to find the deck, so I’m hosting it for your convenience. My notes are a synthesis of the talk, the deck, and some of my own material where I felt it aided in understanding.
- A simple piece of software means that there is no interleaving. It doesn’t combine things. It has focus. Something is simple when it addresses: one role, one task, one concept, one dimension
- Simple doesn’t mean there is only one of them. Its not about an interface with one operation or a class with one instance. It’s not about cardinality.
- By contrast, a complex system is braided or folded together. There are interleaving roles, tasks, concepts, or dimensions.
- Identifying a system as simple or complex is thus objective. If there are twists, its complex. If there is no interleaving, it’s simple.