The difference between complex and complicated systems

Not too long ago, I was reading Brave New Work by Aaron Dignan and had a great revelation. In the opening chapters, Aaron emphasizes the difference between complication and complexity. Despite seeming like two ordinary words, I found the nuance between them as a delightful epiphany—especially in how they relate to all facets of life.So, what is the difference between complicated and complex?

To put it as briefly as possible, a complicated system is one where cause and effect are directly related and known. You push this button and that light turns on. A complex system on the other hand is when the inputs and outcomes are variable and unpredictable. Aaron compares this to driving a car down a busy highway, never knowing when someone could cut into your lane or pump their brakes.

Recently I’ve been thinking about the process of building products in these system types and realized that the difference is quite clear between design and development.

Development as a process is that is complicated. While bugs occur when working with code, the code is always executed in a defined and predictable way. (I know many developers are going to contest this, but it’s true. Computers can only execute exactly as they’re instructed—but sometimes the rules they operate by are nonsensical or poorly described.)

Design on the other hand is complex. The inputs and outputs aren’t predictable as every person interfacing with your experience will be unique—they will all think differently from each other and have different backgrounds of which they’re acting on. This inevitable state of flux is what lead us as designers to not make the right solution, but the best one we can.

What else can we look at in this dichotomy of complex and complicated?