Simple, Complicated, Complex, and Chaotic Systems
Learn about simple, complicated, and complex systems and how to manage them so you can make more effective software development decisions.
The Cynefin framework is a conceptual framework that draws on research on systems theory, like complexity theory and chaos theory. The framework is used to help individuals make impressive predictions, address difficult problems, provide accurate answers, and reach effective decisions. Simple, complicated, and complex systems are different complexity classes that exist in systems; these different classes describe what is known and what is unknown in a particular system. A system can only be assigned to one of these classes of complexity, which will define the way you address problems and make decisions. These classes of systems are important for individuals who are working to learn or understand a system.
This article will cover the different classes of systems and how to best manage chaos and complex systems so you can be as effective as possible in your position.
- What are simple systems?
- What are complicated systems?
- What are complex systems?
- What are chaotic systems?
- How to manage chaos and complex systems
- Predictability vs. repeatability in complex systems
What are simple systems?
Simple systems are the easiest systems to understand. In simple systems, you tend to know anything that needs to be known quite obviously. Everything in a simple system is predictable, meaning when you do something in the system, you know what the result or output will be.
For example, imagine there is a blue button in the bathroom. Every time you push the blue button, water comes out of the tap for you to wash your hands. There is nothing unknown here: every time you push the blue button, water is dispensed. The system is simple because there is no other output possible.
Build a culture of effective meetings with your engineering team
Level up your engineering meeting habits to boost engagement and productivity with a collaborative meeting agenda. Try a tool like Fellow!
What are complicated systems?
Complicated systems are measurable and can be planned in advance. With complicated systems, you know both the knowns and the unknowns. That said, the unknowns require analysis. When you do something in the system, you can still predict the outcome, but there is more of a causal chain of events. Complicated systems, while somewhat more complex than simple ones, can be replicated and are scalable since they are measurable and can be planned.
Here is an example, using the same blue button instance: You need to press the blue button four times fast if you want the water to dispense. Someone who has never used this bathroom may not know that you need to push the button four times fast and, therefore, may not succeed in washing their hands. This knowledge of pushing the blue button four times fast is based on experience and analysis. This represents the known and unknown of a complicated system.
What are complex systems?
Complex systems become somewhat more challenging to work with because the knowns are unknown with this kind of system. Basically, we know that we don’t know certain things and that there is a higher degree of uncertainty with regards to the output. You can make suggestions or hypothetical plans for certain situations, but you can’t necessarily make a plan for the actual system. The only way that we know anything for certain with a complex system is when it actually happens. In a way, a complex system is a retrospective view of the complex system that supports you to be more aware that there are unknown outcomes that are possible.
Using our blue button example, a complex system would be one in which there is a blue button but also a red button in another bathroom down the hall. For the water to turn on, both buttons need to be pressed at the same time, by two different people. So, we know the water will turn on when two people press the buttons at the same time, but we don’t know when this will actually happen, making it a complex system.
What are chaotic systems?
Chaotic systems are those with nonlinear dynamics, which often seem chaotic, unpredictable, or counterintuitive when looking at changes in variables or outcomes over time. A chaotic system is one of the unknown unknowns, meaning you can never be sure if your knowledge, experience, and analysis will be beneficial or applicable to a future event due to the nature of continuous change. The only way to actually work with a chaotic system is to react as outcomes take place.
Building on the previous example for complex systems, now, the water turns on and off completely randomly, and you can only stop the water by pressing the blue button. The goal here is to get the water off. When the blue and red buttons are pressed at the same time, it keeps the water going. This means the water can only be turned off if no one is pressing the red button in the other bathroom. You never know when the water will turn back on, and you have to react to turn the water off by pressing the blue button—but the person in the other bathroom may have already reacted, which would keep the water going. This is a chaotic system.
How to manage chaos and complex systems
- Avoid making assumptions
- Be aware of dependent components
- Manage work in progress (WIP)
- Predict the future
1Avoid making assumptions
First, if you want to effectively manage chaos and complex systems, avoid making any kinds of assumptions. Identify the system’s correct level and consider it within that context. Choose to be vigilant in your approach of analyzing and interpreting a system—this means considering all possible means to an outcome, rather than one option that may seem the most plausible. Which operations exist within the system, and what is the process that enables these operations to generate an outcome? The answer is not always the most obvious one. A common error is identifying individual agents as the agents of a system, which is simply wrong.
2Be aware of dependent components
Within systems, depending on the system’s complexity, there are sometimes dependent components. When multiple components are dependent on one another, the result is tightly coupled systems. Often, processes only have one way of progressing to their next point, meaning that if you’re missing a key process needed to get to the next step, you may fail in getting there altogether. A car cannot drive without any gas. There is no other way to deviate from this process, making gas a dependent component. The goal is to design more loosely coupled systems so removing or repositioning a few components won’t have a huge impact on the overall functioning of the system.
3Manage work in progress (WIP)
Make sure that you’re managing the work in progress (WIP). When there is more WIP than there should be, this creates a system that is overloaded and one in which delays in workflow are more common, as are delays in getting feedback and using information. This overload causes problems and creates challenges that will result from this chaotic, highly complex issue. Projects and tasks need to be managed on an ongoing and frequent basis to ensure that they’re on track and that there are no delays. It’s important to be careful with managing WIP because chaos and complexity can result even from simple and complicated systems.
4Predict the future
Another way to manage chaos and complex systems is to use the technologies that are now available to predict the future and important outcomes. We can now predict the evolutions of complex systems with relatively strong precision. Looking at trends and forecasting models is a way to predict changes that are likely to occur. Business leaders should truly begin to consider simulation tools to gain highly insightful system-level feedback from these types of models that now exist. Making predictions for the future will not always be right, but these predictions are always a means to continue to learn and for our skills to evolve.
Predictability vs. repeatability in complex systems
Predictability tends to refer to how accurately a team can estimate project timelines as well as particular outcomes. We can break predictability down into two types: micro-predictability and macro-predictability. Mico-predictability is an actual event. On the other hand, macro-predictability is the results that occur over time. When you roll a dice, you can’t accurately predict your result on one roll. That said, over time, you may observe that there is a ⅙ chance of rolling a 6 with one dice, which is equal to 16.7%. We can therefore predict that in 6 rolls, we will obtain a 6 once.
If you’re looking to obtain repeatable results in a system, you may consider constraining a complex system—for example, to increase predictability of a given aspect of the system. This is why automation in testing can be so effective.
Repeatability, on the other hand, refers to the ability of your tests to yield the same or a very compatible result every time. Whether your tests execute with the click of a button or by entering a command in the command prompt, they shouldn’t need any kind of manual intervention during or between test runs. That said, because people are in charge of process implementation, repeatability is actually only possible through the same people doing the same job, or those people teaching others how to execute tasks in the precise manner they need to be.
Parting advice
Many models of complexity exist in the world of software development and software engineering, including various interpretations of what each system class refers to. Simple, complicated, and complex systems need to be treated independently, but there can be meaningful interactions between them since learnings from each type of class system tends to be helpful in handling challenges in another. In this way, the relationships between simple, complicated, and complex systems are separate but related. Understanding these different classes of systems will enable individuals to be better problem solvers and make more effective decisions that will benefit the team and the organization as a whole.