Even something as seemingly simple as making a sandwich is, in fact, a complex web of things coming together in just the right way.
There’s the sunshine that ripened the grain that goes into the bread and the clever person who organized the logistics of getting that bread to the store. Then, there’s you earning money to buy that bread. If any one of these things disappeared, you wouldn’t get your sandwich.
Software development is an equally rich cocktail of inputs, outputs, feedback loops, and cause-and-effect actions. And the more a team can understand how these all work as a whole, the better.
Diagrams help us understand complex things and predict their behavior. Unfortunately, most diagrams tend to be a bit linear and hide key information. Systems thinking gets you to look at everything in its entirety — from the smallest detail, to the way one system operates in a larger one. It’s an approach that takes a little getting used to but an invaluable skill to have once you’ve got it. Ready to get learn more? Read on!
What is systems thinking?
Systems thinking is about seeing something in its entirety. It’s an approach that focuses on a system’s constituent parts, the way they work together, and how the system works as a whole over time. It also takes into account how one system works within the context of larger systems.
Systems thinking examples could include ecosystems, in which animals, plants, water, air, and so on work together to thrive or perish. In society, systems include people, jobs, resources, and so on. Similarly, in organizations, systems could consist of processes, structures, and people that work together. In short, everything is a system — from your body to the sandwich you make for lunch: All alive and dynamic.
The fundamental principles of systems thinking:
- A system refers to a whole thing that contains two or more parts
- All parts are interconnected, with each influencing the behavior of the whole
- You can split each part into subgroups that act as a part of the whole
- Improving the performance of one part will not necessarily improve performance as a whole
- The system has emergent behavior, meaning it functions as a system only when everything is working together. When it’s taken apart, it loses its emergent behavior.
What is systems thinking in software development?
Systems thinking helps you understand the bigger picture and how each individual part interacts. When you know this, it becomes easier to work out how to make impactful changes and solve problems — something that’s highly useful in software development.
Systems thinking and DevOps
Systems in DevOps are crucial for automation and the successful development of a product.
To properly work, the system needs inputs, which it processes and turns into an output. Feedback propels the system forward toward this goal. Without this, the system stops working.
The flow of work moves through each stage, beginning with code creation, through checks and integration, and ending in deployment. Having a correct output at each stage is essential for work to move onto the next stage in the process.
The more complex the process, the more handoffs and integrations there are. This means bottlenecks are more common — which is where systems thinking comes in useful. If you can see the flow of work as a whole, you can spot potential issues and take steps to fix the problem.
DevOps is a form of systems thinking. Rather than departments working in silos (Developers + IT Operations), they’re brought together where they’re considered as a whole. This streamlines the flow of work, makes automation possible, and reduces duplicated work and other efficiencies that are common when systems thinking is not employed. Ultimately, this reduces time-to-market, which means better value for the client. And happy clients mean a healthy business.
- Check out our guide to DevOps for a more in-depth explanation
Key concepts in systems thinking
Systems thinking is a relatively easy concept to grasp, but there are some keywords worth learning if you really want to get to grips with it. Here they are:
- Feedback loops
- Systems mapping
Let’s take a closer look at each of these in turn.
Think of a butterfly: a caterpillar, a cocoon, and time work together, and eventually, an entirely different creature emerges. None of those parts seems in any way related to a butterfly, and yet when they’re united, something new and unique appears.
This is essentially what emergence refers to: how individual elements come together in new and diverse ways. It’s about the outcome of things working together.
A key part of systems thinking is shifting from linear thinking to a more 3D, circular perspective that involves a dynamic and complex web of feedback loops. This can take a little getting used to. Just think about how we’re taught to think in school: we learn art, history, math, and science separately, by different teachers in different classes. What we don’t learn is how all of these elements link up and interact — which they do.
Maths, art, history, science…all interlinked, as you can see in the work of Leonardo da Vinci (Image Source).
Essentially, interconnectedness means everything is reliant on something else in order for the whole to function. So to use that butterfly example — if you remove time from the mix, you don’t get your butterfly. Or, if you take away food, the caterpillar won’t have enough energy to transform.
Synthesis refers to the process of combining two or more things to make something new. E.g., a cocoon and a caterpillar. Or eggs, milk, and flour.
When it comes to systems thinking, synthesis refers to the process of thinking about all these parts at the same time, including how they interact with each other and all together. This differs from analysis, which is about dissecting things and analyzing the individual components.
Casualty refers to the process of understanding how one thing leads to another thing in a continually evolving system. It’s a classic case of cause and effect. If you change one small thing, it’ll have an effect — good or bad — further along.
Casualty in systems thinking is about being able to predict or understand how one change is likely to affect other things in the system, as well as the system as a whole. Understanding it means a better perspective on feedback loops, relationships, and dependencies — all of which are essentials for software development and project management.
5. Feedback loops
Everything interconnects, which means there are flows and feedback loops between every element.
There are two main types of feedback loop: reinforcing and balancing. Despite its positive-seeming connotations, reinforcing is actually a bad thing on the whole. ‘Reinforcing’ means elements reinforce an outcome in increasing reinforcing loops. This sends things into overdrive or overproduction, which threatens to throw off the status quo.
In a balancing feedback loop, there are elements that keep things balanced within the system. E.g., in nature, there are predators and prey. If there are just the right numbers of zebras to lions, you have a stable ecosystem. If you remove some lions, you become overrun with zebras. They multiply, eat all the grass, other animals go hungry, and things are thrown off-kilter.
6. Systems mapping
Systems thinking is complex, which is why it’s necessary to use a systems map. There are lots of ways to do this. From connected circles to digital feedback analysis to analog cluster mapping, the same principles apply: Include every element and the ways in which it’s connected to other elements within the system.
From there, you’ll have a better understanding of how decisions affect the wider system. You’ll also be able to draw insights and hypotheses theoretically before testing it out in the real world.
Systems thinking is a more holistic way of working. Rather than breaking things down into their separate parts, which, when it comes to software development, often leads to silos, bottlenecks, and duplicate work, you instead consider the thing as a whole.
Not only does this streamline work and boost collaboration — it also means managers and developers are better equipped to predict how changes will impact the rest of the system. Something that improves performance, sparks discoveries, and makes it easier to test hypotheses for more accurate results.
To make the process easier, we recommend investing in good quality project management software to keep everyone on the same page.
With Backlog, our own project management tool, you can assign tasks, set up notifications, see real-time progress diagrams — all from one shared place. If a team member completes some work or is running behind, the software will factor that in so the manager can respond with a speedy decision, like changing focus or hiring more help — and the project can carry on without a hitch. It also has built-in Git and SVN repositories, which means you can use it as part of your continuous delivery pipeline.
Like sandwiches, butterflies, and the animal kingdom, a team is a system in itself, and the more you connect the work, the better it’ll function together.
Want to learn more about the full software development lifecycle? Make sure to check out our DevOps Guide.