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.
This blog is written by Marcel Krcah, an independent consultant for product-oriented software engineering. If you like what you read, sign up for my newsletter