One of the principles applied in software engineering when solving problems is divide and conquer, but just dividing things into smaller blocks is not enough, we’ll end up having more complexity and the same solution.
Here is where Systems Thinking come into the game, providing a holistic analysis of the problem that we’re facing.
About Systems Thinking, a shift of mind
There are some difficulties when breaking down a problem, something that is intrinsic to software engineering. The connections between the parts can be lost, misunderstood and can even negatively influence the final solution. Furthermore, when several people or teams work on the same problem, if the solution is not balanced and well-coordinated, the chances of failure increase.
Imagine a car, it has a lot of pieces that all together build an object that you can drive. It can take you from one point to another. But each piece, isolated, has no meaning.
Besides, when building a car everyone has to have a general and collaborative vision, making the final result coherent. There is no use in having the best engine equipment if the steering wheel does not work.
Thoughts are very complex and, in many cases, so abstract that categorizing them into hermetic categories means falling into reductionism. Even so, there is a holistic approach to analysis called systemic thinking that is key to solving problems, especially for those in which the whole is made up of the success of the parts and their interrelation.
The parts are not the system.
This model of thought has more pieces than just interconnection. We have already seen that everything, absolutely everything, is interconnected. It is also very important to work on the synthesis process.
It is as important to understand the parts and the whole, as well as the relationships involved. That is why the teams need to have a clear vision of the objective, and not parcel out the knowledge or action taken into it. For this, top-bottom cultures are highly detrimental in this approach, since decisions are made without understanding the reality of the parts that compose it (and the relations), merely with the vision set on the whole. Hierarchy is the antithesis to dialogue, and it is difficult to escape hierarchy in many organizations.
Another interesting point of this approach are the synergies. When different elements are naturally combined, something new emerges. You have to be prepared to accept and understand that interconnections are part of the path and part of the solution.
In order not to fall into what is called “systemic blindness”, we must regularly review what our purposes, principles, and our medium/long-term objectives are. Understanding our day-to-day as if it were a system will give us a new and more realistic perspective.
Systems Thinking mindset in software
At a software level, the first premise that must be taken into account is that the decision made by a team can have implications for the rest of the company's departments as well as for customers, suppliers, competition, etc.
From systems theory, a system is much more than the sum of its parts. All analysis must be done considering the macro and the micro, trusting the teams, and creating strong relationships between them. Reality is a bunch of relationships.
Systemic thinking allows us to understand the complex relationships that link two events distant from each other, or difficult to relate directly, allowing a perspective that goes beyond the need to find a person responsible or to attribute blame.
How to start with Systems Thinking
First, is it important to understand better (and with a simple yet amazing point of view) what Systems Thinking is.
Russ speaks here about the difference between "continuous improvement" and "discontinuous improvement" as seen through the lens of Systems Thinking.
Systems Thinking is applicable in many areas. From the design of the system itself, construction, performance or testability. Likewise, the relationships and the hierarchy of the company can have also this approach.
One of the most influential books about Systems Thinking is The Fifth Discipline: The Art & Practice of The Learning Organization by Peter Senge
Peter talks about 11 laws we can use in order to use this systems approach.
Today’s problems come from yesterday’s “solutions.”
In general, we focus on the causes of our problems; when it’s a better approach to look at our own solutions to other problems in the past.
Solutions that move problems from one part of a system to another can go undetected because, sometimes, those who "solved" the first problem are different from those who inherit the new problem.
The harder you push, the harder the system pushes back.
In Systems Thinking, that is the phenomenon called Compensating feedback. Pushing harder, with aggressive interventions or increasingly stress, is exhausting. That blinds ourselves and make us contribute to the obstacles.
Stopping, analyzing and taking decisions far away from stressful situations is much more intelligent and efficient.
Behavior grows better before it grows worse.
Compensating feedback usually involves a "delay," a lag between the short-term benefit and the long-term disbenefit. That’s why systemic problems are so hard to recognize.
At the beginning all grows apparently well, but the future and the long term benefit are quite far from this beginning.
In complex human systems, there are always many ways to make things look better in the short term and that will make later compensating feedback appear.
The easy way out usually leads back in.
We all find comfort applying solutions that we know, but are them really the best?
If the solution were easy to see or obvious to everyone, it probably would already have been found. Familiar approaches are good, but we don’t have to push harder if we don’t find the solution into them. Change the focus and explore new solutions.
The cure can be worse than the disease.
Easy or familiar solution are sometimes, not the solution but addictive and dangerous
The phenomenon is known in Systems Thinking as Shifting the Burden to the Intervenor.
Faster is slower.
All natural systems have optimal rates of growth. When growth becomes excessive or aggressive the system itself will compensate by slowing down.
When it’s possible, growing organically is the best way to ensure a good base for the pyramid. With the startup mindset, that is really complex to achieve, and one of the causes that makes many projects fail.
Cause and effect are not closely related in time and space.
And that's a problem itself. Because we assume that cause and effect are close in time and space.
There is a mismatch between the reality in complex systems and how we usually think about that reality. The first step for fixing that is to let go that cause and effect are close in time and space.
Small changes can produce big results… but the areas of highest leverage are often the least obvious.
As we saw, in Systems Thinking, easy and short term solutions can be a big problem for the future. But not always, sometimes small, well-focused actions can sometimes produce significant, enduring improvements, if they're in the right place.
That is known in Systems Thinking as leverage.
You can have your cake and eat it too — but not all at once.
We usually think more in terms of snapshot than in processes. Processes change over time.
If we think in a problem like a snapshot, we will lose some benefits that we can apply to the process over the time, for example, eliminate rework, eliminate quality inspectors, reduce customer complaints, lower warranty costs, increase customer loyalty, and reduce advertising and sales promotion costs.
Thinking in problems as a process that we can improve over the time is much more realistic that taking in solutions to solve it in a glance.
Dividing an elephant in half does not produce two small elephants.
Divide the problem in half anyway, it doesn’t make it much more simple. Because the system is not just the sum of the pieces, but the interactions that cannot be seen from looking only at the piece you are holding.
Remember the car? The car is something that you can drive, but not just the pieces on it.
There is no blame.
Systems Thinking shows us that there is no blame because you and the cause of your problems are part of a single system.
Your enemy is outside your system, if the people that are part of the system are fighting between them, that's a disease that will hurt seriously the system.
Systems Thinking in the new reality
That is why software goes beyond code and isolated developers. Interpersonal relationships are part of everything and an essential part of teams. Working on them is key to achieving sustainable and quality production.
For the new reality, where remote work is an intrinsic part of how we work, we must focus on it. Not only in the resolution of tasks, but in communication, in creating a bond, in being able to abstract ourselves from our physical location and create a virtual tribe.
It is not about creating complex social networks, playing at meetings, creating team-building events, or treating people with psychological condescension. It is about changing methodologies, techniques that promote collaborative work.
The fact of working remotely gives so many advantages that it is difficult to give it up, which is why the office model does not attract talent. The challenge is to manage to create and understand relationships in this new reality. What happens when the camera turns off after a meeting? What about the frustrations? What happens when work doesn't flow as before?
Team skills are more challenging to develop than individual skills. This is why at The Crafters Lab, we build and believe in high-performance teams. Teams that are not made of individualistic rockstars, but exceptional as teams far from individuality.
Teams that are capable of creating relationships of trust and collaboration from a distance, making a robust system. Not just developers but part and contributors to systemic thinking.
Founding member of The Crafters Lab
Rubén is a software developer and founding member of The Crafters Lab.