In software development, having a Systems Thinking approach means that you start from an event or a part of a system and tries to determine its connections or relationships to other parts or events.
A Reductionist Thinking is when you break down a problem or task at hand into its simplest parts in order to understand better what the problem is about.
An example of how these two ways of thinking can be applied is described below.
Reductionist Thinking Can Help You Build The Right Solutions.
Let’s say you want to solve a particular customer problem. Based on what you know about both your customer and the problem you’ll try to come up with an idea or hypothesis for a solution. What happens is that usually the idea or hypothesis is too big to be easily and quickly implemented on your product and tested. That’s when applying reductionist thinking might help you.
In order to both reduce risk and speed up delivery, modern product and software development approaches recommend breaking the necessary work into several small deliverables.
Because you broke a large chunk of work into smaller functional parts, now you can implement and integrate them into your product within a short period of time, 1-2 weeks preferably. Also, you’ll be able to built incrementally and deliver continuously.
Once that happens, you can sense customers’ response and better understand if what you’re offering as a solution is, in reality, the one that will solve your customers’ problems.
Systems Thinking Can Help You Streamline Your Product Development Process
When thinking about the way you develop your product or the way your team develops software, oftentimes you can benefit from looking at this issue with systems thinking perspective.
That means starting from the premise that your team is a sub-system of a greater system that usually goes beyond your company and in order to understand this system you’ll have to pull back your lens and look at the whole context instead of a single part.
Start With a Map
One might say: Well, I’m just a developer, I don’t care about the product, marketing, etc. It’s not wrong to think like that If you want to limit your impact to your team. However, if you understand and think about the whole value stream and solve issues with a systemic perspective, analyzing the inputs, how you process them, and the outputs, you might achieve better results and higher impact.One way to understand better the systems is to use Value Stream Mapping techniques (VSM). But, if you don't want to complicate things at the beginning, just use a basic flow diagram to identify which are the system's components,… Click To Tweet
Derive Actions Based On Your Mapping
From this mapping, you can figure out optimizations that will yield more effective optimizations and higher impacts. We commonly refer to these optimizations as global optimizations. The contrary would be a local optimization, which might have a positive effect on a particular sub-system but won’t help the whole system to perform better.
Adding to that, there’s the idea that in a system, how fast you can go is limited by your slowest sub-system or resource. No matter how optimized a part of your systems is if the rest of it is not optimized as well you’ll just be constrained by these slowest parts.
Best Way to Change A System
It’s not easy to change systems due to its complex nature. Some time ago I’ve attended a training with Mary and Tom Poppendieck about lean software development. During the training, Mary said something that stuck into my mind:
“You don’t change complex systems with big-bang changes. The way you change complex systems is through small changes and sensing system’s reactions after each change”.mary poppendieck
Mary’s statement resonates with me and that might be one of the reasons most transformation initiatives fail. So, the way to go when it comes to change a system is to apply small changes to it, and not big-bang changes, otherwise, the back-pressure will be high.
The video below presents a nice introduction to Systems Thinking.
In summary, use systems thinking to understand your system. Apply small and continuous changes, measure how the systems react, repeat that continuously.
To Learn More
If you want to learn more about this topic I recommend the following books.