Systems Thinking—A Process For Problem Solving in SDLCDiti Das
Listen on the go!
“94% of problems in business are systems driven and only 6% are people driven.” ~ William Edwards Deming
WHAT IS A SYSTEM?
We hear and use the word System in all different contexts, all different places, and almost all the time. Also, we probably interact with dozens of systems, such as nature, our own home, retail stores, the organization we work for, etc. So, a system is an interconnecting network of parts that work together thereby creating a larger whole of a complex thing.
WHAT IS SYSTEMS THINKING?
System thinking is a method of critical thinking by which one can analyze the relationship between the system’s parts to understand a situation for better decision-making. Through this system-view approach, a different process for problem solving rises. Rather than isolating a problem and then fixing it, which is a common practice using traditional thinking, the systems thinking approach extends the sight to observe the scope surrounding a problem. Through this systematic approach, causal effects are recognized and a problem space is found-out.
CHARACTERISTICS OF SYSTEMS THINKING
- Shifting perspective from Parts to Whole: The most general characteristic of system thinking is shifting perspective from parts to the whole. System’s properties cannot be reduced to the part’s properties; likewise, systematic properties are properties of the whole which none of the parts have.
- Shifting perspective from Objects to Relationship: System is a collection of objects that interact with each other and build a relationship. In a systematic view, objects themselves build networks.
- Shifting perspective from Structures to Process: In a systematic approach, continual flow of things in system is more important than considering configuration or structure of objects.
SYSTEMS THINKING—A PROCESS FOR PROBLEM SOLVING
By understanding systems thinking as a holistic view perspective, its real value emerges. The value itself is being able to use this holistic view perspective to identify an actual problem, while understanding the extended interconnected network that surrounds it. Traditional analysis focuses on separating the individual parts of the problems caused whereas system thinking allows us to focus on how the individual parts interact with each other and helps identify the cause of a problem.
Consider defect or bug fixing for example. Generally, we have two choices:
- To update patch over the defect or bug
- To find out the root cause of the bug and fix it.
Most common approach is to update the patch while leaving the root cause un-addressed. Simply updating the patch over a defect can produce a code that is difficult to maintain, and may result in more bugs/defects which again need to be fixed with more patching. This loop ultimately triggers unmaintainable software. So, short term result may be what is intended but long-term result is different.
There are other examples also. For example, if an organization is suffering from poor quality in production, the immediate step is to increase more manual testers instead of investing in automated testing and continuous testing approach. More manual testing means lesser focus on automation testing, creating the requirement for more manual testers in future as the application code increases which indirectly will result in more cost to the company. System thinking approach provides a broader picture of the system which help us to design long-term solution.
A SOFTWARE DEVELOPMENT LIFE CYCLE PERSPECTIVE
Let me talk about system thinking from Software Development perspective.
Software Development Lifecycle unleashes a business idea into reality which at the end enables the user to enjoy the intent and presence of an application/product. Although the prime purpose of the application/product existence is to serve its users, not many products/applications achieve the expected customer satisfaction levels. Why is it so? System Thinking approach definitely helps us find out the reason and solutions for the same. A product is comprised of many components and many believe that all such features integrated shall make or manifests a product.
Per Russell L. Ackoff, “System is not a sum of the behavior of its parts, it’s the product of their interactions.”
We must apply system thinking as it allows us to see the end-to-end system and understand & optimize the value stream. The value stream can be shown as a business value generating feature to flow through the system to transform into a usable product, i.e., through a robust software development lifecycle comprising of phases like build, test, deploy and release phases. We need to map this end-to-end process or value stream at each stage or function of the process.
It is also necessary to take care how well the flow operates through the system. Doing so enables the teams to remove constraints or bottlenecks in the systems by making them visible with the help of measuring the queue time. Let us take an example, by measuring rate of test case execution or test coverage we can say manual testing would be an obvious constraint in testing phase which will lead to delay in production. The solution could be implementing Continuous Testing that facilitates automated testing, allowing test team to reduce the cycle time in Testing phase.
The usual downtime in product releases are attributed predominantly to the lack of scalability of the environments and performance of the product. Non-functional requirements are not either prioritized or detailed during the initial ideation of the product. Even if it is considered, it is not properly communicated to the test/operation team. The design team defines the structure of the product/application in silo and masks the information from the downstream teams like Test teams or Operation teams. System thinking will enable us to address these kinds of challenges considering the end-to-end perspective rather than siloed modular approach.
System thinking enables the architect/design team detail and considers each aspect of the design, technology landscape, associated limitations, testing phase requirements, environmental needs, and release aspects (operational) aligning with the overall application/product and the downstream teams, like Test and Operations plan and scale to the expectations of the product intent and usage. Test teams start preparing in parallel and identify the appropriate strategy to ensure proper coverage of both functional and non-functional requirements during validation and verification. The strategy should set the context for validation and verification rather than defining number of cycles of test execution with the same test suites. Likewise, the operations team can plan per the actual usage and help the upstream phases accordingly providing dedicated environment for proper development, validation (test) which resembles the production environment.
CAUSAL LOOP DIAGRAM-A TOOL FOR SYSTEM THINKING APPROACH
Causal loop diagram can be used to understand the challenges and relationships between different variables of the IT project Life cycle. The objective is to include maximum number of key variables and their interconnections/relationships to represent reality.
Here comes the concept of feedback loop of system thinking – Reinforcement loop and Balancing loop. A reinforcing loop is one in which an action produces a result which influences more of the same action which results in a growth or decline (Positive or Negative), while the balancing loop encourages systems to stay in balance.
In an IT project Life cycle, there can be four loops; Product development loop (Balancing Loop), Product Management Loop (Reinforcing Loop), Employee Productivity Loop (Balancing Loop), and Product Maintenance Loop (Reinforcing Loop).
The balancing Product Development loop describes that when there is an increase in customer requirements, the need for re-structuring the current software functionality and design increase. The Reinforcing Product Management loop (Positive) suggests that quick management actions should be taken to implement changes in project schedule and prioritization. The reinforcing Employee Productivity loop (Negative) indicates if there is an urgent customer requirement and the project progress falls behind schedule, the team needs to work overtime to satisfy customer deadlines. The Product Support & Maintenance loop shows the post product development support & maintenance activities that involve deploying the software to meet customer requirements.
To conclude, System Thinking is a powerful tool for solving complex problems as it helps us to see the influencers behind the face value of a problem. Addressing many of the problems the organizations face every day requires us to adopt a System Thinking approach provided the extremely complex Landscape and challenges they face to be competitive.