What is complexity?

When building software, we introduce changes to the system. To change the system, we first need to understand the system. Each system consists of components. So to change the system, we need to understand its components. What makes components hard to understand?

Imagine component A intertwines with component B. And B intertwines with C. And C intertwines with D. To change component A, we need to dive into B and C and D. But we are limited in our cognitive capacity; in our heads we can consider at most a few things at a time. So to change a component, we need to understand the whole braid of intertwined components. That takes time.

Everytime you combine two things, you twist two more things. So every intertwining adds this burden, and the burden is combinatorial. Fundamentally, this complexity, this twisting, limits our capability to understand our systems.

— Rich Hickey, Simple Made Easy

To gain speed, we decomplect the complex braid and turn it into a set of simple components. A simple component consists of one fold, of one braid, of one ingredient. A simple component doesn't intertwine with other components. To change a simple component, we don't spend time understanding the whole braid. And so we are faster.


Would you like to connect? Subscribe via email or RSS , or follow me on Twitter!

Post changelog

2021-04-02improved header
2021-01-15post first published