Humans are not good with complexity.
We can’t hold much information in our working memory which makes us more likely to fail when working with complex systems. That’s also one of the reasons why complex systems are, in the long term, bound to fail.
Simplicity is a prerequisite for reliability.
by Edsger W. Dijkstra
But why is it that systems get complex? Well, it’s usually by accident.
Complexity creeps in on its own when you’re not paying attention. It happens when you introduce a new tool that solves your problem, but that same tool introduces 10 new problems. It happens when a new feature is implemented that is used by 1% of the users, but makes your system 2x more difficult to maintain.
It happens for thousands of reasons. The point is that keeping things simple doesn’t happen on its own - it’s a deliberate choice that you make and then you keep fighting for it.
I rewatched the talk Simple Made Easy by Rich Hickey that he made 13 years ago and I must say that the points he made back then are still very much valid today.
Interestingly enough, many of these points apply not just to software development, but to most areas of our lives - whether it is our habits, lifestyle, or our laws.
- We need to build simple systems in order to build reliable systems.
- Your ability to reason about your program is critical to changing it without fear.
- Easy ≠ Simple
- Ignoring complexity will slow you down over the long haul. It may eventually destroy you.
- Composing simple components is the key to robust software.
- The first step in getting a simpler life is to choose simpler stuff.
- Benefits of simplicity - ease of understanding, ease of change, ease of debugging, flexibility.
- Incidental complexity happens when you choose a tool that is easy to use (which is subjective), yet produces complicated output.
- Inconsistency is extremely complex. You need to keep in mind the in-consistent variants at all times.
- Simplicity is not about having fewer things, it’s about having simple straight lines instead of tangled spaghetti.