I remember an algorithmic problem while studying at MASDAR; I naïvely came up with a simple solution that ‘felt’ right. My basking in euphoria was shortlived though – a more experienced course-mate needed only one look to declare my approach wrong.
Funnily, he didn’t know how to solve the problem too! He just knew my simplistic approach was wrong. I have to admit that he was right.
My mistake? I assumed a complicated problem had a simple solution.
Complicated is sometimes used as a synonym for complex, however, both terms differ. To clarify, are the following tasks complicated or complex?
- Landing SpaceX boosters on floating platforms
- Managing a group of people
- Doing a laparoscopic surgery
- Successfully shipping a huge software project
|Landing SpaceX boosters on floating platforms||Managing a group of people|
|Doing a laparoscopic surgery||Successfully shipping a huge software project|
Simple, Complicated and Complex
Hammers are Simple
They are versatile tools with simple applications. For example, driving nails into walls.
Buildings are Complicated
Buildings contain multiple interlinked subsystems based off of a well-specified blueprint. It is possible to understand and predict how these subsystems are interwoven by carefully studying the blueprint.
Cities are Complex
Cities are made up of multiple buildings, right? However, urban planning is a wicked problem. It is almost impossible to accurately predict crime rates, clustering patterns or traffic flow.
While it is possible to leverage policies during the planning and execution of city-wide projects; there are always some unknowns involved. No matter how long you study the city; it is impossible to fully predict the outcome of an intervention. This is how complex systems differ from simple and complicated systems.
A simple system is simple – it has a minimal set of subsystems and is understood easily.
These consist of subsystems, usually tightly coupled, interacting in a definite pattern. Despite the surface similarity to complex systems; complicated systems exhibit predictable behaviours.
The challenge lies in understanding the intricate links between the multiple subsystems;. Examples of complicated processes and systems include timepieces, food recipes and algorithms.
Complex systems are also made up of multiple interacting subsystems. However, they differ because it is impossible to fully understand the system by studying its components. No algorithm or recipe can tell you how to solve a complex problem – it is the realm of unknown unknowns.
The unpredictable emergent behaviour of complex systems arises from the self-directed actions of self-interested components. These components’ actions, in turn, can be independent or in reaction to stimuli from other components. Consequently, predicting the behaviour of the system as a whole becomes impossible – there is a combinatorial explosion of possible states and actions.
Why does this matter?
A simple system can be understood by studying each of its components; similarly, complicated systems can be understood by studying the intricate details of components. It becomes possible to model complicated systems by reducing them to fundamental principles. Complex systems cannot be reduced down to a basic set of rules as the whole is larger than the sum of parts. Inference is only by observing the entire system as a whole.
The real problem lies in solving problems. We are used to breaking down complicated problems to their bare fundamentals to analyze the root causes of issues. Such reductionist approaches work great with simple/complicated problems but fall short when applied to complex problems.
This happens because the sum of parts is greater than the whole in complex systems; consequently, attempts to isolate a problem to a single isolated component will inadvertently remove the myriads of implicit inter-dependencies. This rounding error, in turn, skews the abstraction model and makes it veer off course. To deal with complexity, you have to take the entire system as a whole into consideration.
Attempts to solve complex problems via simple approaches are bound to fail. For example, simple attempts at motivating a disgruntled employee can fail spectacularly; disgruntlement is a complex problem.
Complexity & Software Development
Most software projects fail because leads find complicated solutions to complex problems. You can’t just reduce a project down to a simple set of algorithms and think a complex problem will be solved via mechanical approaches. There are multiple factors: human interactions, multiple coordinated teams, pressures and ever-changing designs. That is a complex effort.
- Simple: Fully knowable and predictable.
- Complicated: Not easy to know (not simple) but once known, fully predictable
- Complex: Not knowable; models provide tools for reasonable predictions within boundaries.
- Complex/Wicked systems have no simple solutions