Systems Thinking: 3 Steps to Tackle Complex Technical Problems
Managing complexity is one of the most important skills an EM can have. Here's how systems thinking can help you make sound decisions with imperfect information.
This article is written by Boyan Angelov.
Boyan Angelov’s journey as a technical and business leader has taken him across several domains (e-commerce, healthcare, HRTech, LegalTech). The latter part of his career has been spent as a data strategist in different managerial roles, but he takes advantage of his technical background in science and engineering to consult clients on all topics in data. He has overseen the development and deployment of end-to-end ML and data-intensive systems and products by leading teams of data scientists, engineers, and analysts. He has designed and delivered data strategies for organizations of all sizes and various industries. Boyan is also the author of O’Reilly’s Python and R for the Modern Data Scientist and Elements of Data Strategy.
In a game of chess, there are more possible combinations of positions than neural connections in the human brain. Even expert players can’t anticipate every outcome, but you have to make a decision to move the game forward.
Engineering managers face similar complexity every day. To keep your team productive, you must constantly make decisions based on imperfect information. This can be challenging because the human brain is hardwired to avoid uncertainty.
Fortunately, managing complexity is a learned skill. One tool that has helped me navigate complex decision-making more effectively is systems thinking.
Systems thinking is an approach to problem-solving that focuses on how parts of a system interact to create certain outcomes. In the context of engineering leadership, I define systems thinking as creating a mental model that helps you:
Simplify a complex problem.
Make an informed decision.
Assess the outcome and adjust your approach.
Systems thinking helps you see the forest for the trees—to understand the big picture by focusing on the right details. Of course, you won’t get it “right” every time. But systems thinking helps you make sound decisions without slowing down your team.
Today, I’ll discuss how I’ve used systems thinking to manage a big source of technical complexity in my work: legacy systems.
Systems Thinking in Action: Legacy Systems
I once led a team that purchased a series of assets from another company. Unfortunately, the assets lacked documentation, and we had no idea how to work with this complex collection of systems.
The engineer in me wanted to deconstruct these systems and learn how they worked immediately. However, I resisted the impulse because acting prematurely can cause a catastrophic break.
Instead, I did the following:
1) Ask myself: is this a problem I need to solve?
In this instance, the answer was yes. The legacy system was critical for our internal and external users—and directly tied to our finances. That said, it’s best to avoid working with complexity when you can.
2) Observe and map information.
Systems thinking encourages us to avoid immediate action. Instead, we can apply mental modeling to understand how the different parts of the system work together.
My team used a Miro board to capture everything we knew about the different components of the legacy system. We began to draw relationships between them (e.g., situations when data had to be transferred from a CRM system to a database and back).
Our initial intuition about how things were connected wasn’t always correct. However, we improved the mental model over several iterations and established a high-level understanding of the different subsystems—essential knowledge for the next step.
3) Conduct low-stakes experiments.
Next, we selected a few parameters to adjust and monitored the effects on the system’s behavior. We were careful to take calculated risks that didn’t pose a significant threat to the system. In our case, this meant:
Switching services off and on (limited to systems we knew how to turn back on) Deploying small changes to the code
Based on our learnings, we added more detail to the mental model and conducted follow-up experiments.
These experiments didn’t give us a perfect understanding of the system. However, they helped us operate and debug it well enough to keep it functional. As a result, we could keep moving forward with minimal disruption to stakeholders—and eventually redo the system in a less complex way.
Next Up: A Systems Thinking Approach to People
Today’s article focused on managing technical complexity. However, systems thinking is an incredibly versatile framework that can help us manage non-technical leadership challenges.
Just as we used systems thinking to learn how the parts of a technical system interact, we can take a similar approach to understanding team dynamics and barriers to productivity. This knowledge can help us make strategic changes to build a high-performing culture.
Stay tuned for Part 2, where we’ll discuss how systems thinking can improve engineering team culture.