Software systems are essentially socio-technical systems
and they are not isolated from other systems engineering processes. Unconsciously or by intention, we implement systems thinking in multi-agent systems, microservices, DevOps, distributed systems, API-led integrations and lean based software development life cycles. However, the concrete relationship between systems thinking and software engineering is still a green area and barely highlighted as a common practice among software engineers. In this presentation, we will
elaborate how systems thinking helps us to understand the socio-technical aspects of software engineering. We will discuss why systems thinking is important in the field of software engineering, provide examples where it is currently used and show the general areas where systems thinking applies to tackle complex software problems
Applying Systems Thinking to Solve Wicked Problems in Software Engineering
1. Applying Systems Thinking
to Solve Wicked Problems in Software
Engineering
The scientific study of “wholes”
Majed Ayyad, PhD
Birzeit University
11/21/2019
2. Outline 2
1
2
3
4
What is a problem: Complex wicked Problems
What is Thinking
What is Systems Thinking
Where it is applied in Software Engineering
Replaced by
4. What is a Problem?
Which of the followings is a problem
The multiplication of 2 by 2
Translating the word “problem” into Arabic
Problem solving is “What you do, when you don’t know what to do”
(Wheatley, 1984)
A rule of thumb: Problems exist when learned behaviors are
not sufficient to solve the problem.
I learned
Arithmetic , I know
both languages
I am 2 years
old, I don’t
know Arabic
5. How Do You Solve this Problem?
Problem: Given a candidate CV, which of the following decisions you will
select:
Analyze
Challenge assumptions
Seek others opinion
Validate claimed knowledge
Critical Thinking
Use Pros and Cons
6. How Do You Solve this Problem?
Problem: … (Yes, three dots) Yes, But for a
specific
context?
Ah … we
need to find
the problem?
Gather Information
Verify and Validate gathered
information
Do we need Secondary
Information?
Problem Framing
Design ThinkingSelect a strategy
Build a solution Prototype
Evaluate Results
Productize
..
..
7. How Do You Solve this Problem?
Overtime /Velocity
Problem: Increase the development velocity by 20%
Linear Thinking
Increases
Explain a phenomenon by
using a single relationship:
cause and effect.
reductionist theory Mechanistic Thinking
8. What is Thinking?
Problem: What is This?
But what is thinking?
When you start the process of solving the problem … you
start the thinking process
A mind activity
To make sense of what you are aware of [here the picture:
physical perception]!
Using your [knowledge, memory, experience,…
9. Given the following characteristics, Name one
problem that matches all ………………….!
We don’t understand the problem until we find the solution
You can create incremental solutions to the problem, but there’s
nothing that tells you that you’ve found the correct and final solution.
Solutions are not right or wrong:
Every problem is essentially novel and unique
Every solution is a one-shot operation
Answer: Software Engineering
10. Which Problem is Solved by Software Engineering?
A fundamental problem of software engineering is the problem of
development of systems…
Creating value to customer
The actual product of software
engineering is ……………..
11. Software Engineering: A wicked Problem?
The real problem in software
engineering is to find the Value?
Software Engineering is a wicked problem
by itself. It is used to solve another wicked
problem which is finding the customer value.
12. Why Software Engineering is a wickedproblem?
Proof by contradiction
SE is not a wicked problem
We start by well defined problem statement
We don’t have to use incremental solutions to the
problem [ Spiral, XP, Scrum, lean, …]
We know that we are building what the customer
needs
We can use previous solutions
Change is affordable
13. How do We Solve Wicked Problems!
ThinkingSystems
14. What is Systems Thinking? Zoom out
Holistic Thinking
Synthetic thinking
Dynamic thinking
Systems thinking was developed by Jay Forrester and others at MIT.
“Systems thinking is a discipline for seeing wholes. It is a
framework for seeing interrelationships rather than things, for
seeing patterns of change rather than static ‘snapshots”
15. A Systems Example
A System
This Photo by Unknown Author is licensed under CC BY-SA-NC
A Part
A Structure
A Function
A Process
Thoughts
{time}
{space}
{Emergent}
{Input/Output}
{The whole is different than the sum}
{function/Role}
A Whole
{contains}
16. Kanban Board as a System !
Control
Stock Stock Stock
Flow
Flow
Development rate
inflow outflow
17. Characteristics of Systems Thinking
• Optimize the Whole – avoid sub-optimization and look for the
properties of the whole not the properties of each part.
Learn and practice the zoom out skill
22. Zoom out the Kanban Board!
Stock Stock Stock
Flow
Flow
Development rate
inflow
outflow
23. Characteristics of Systems Thinking
• Optimize the Whole – avoid sub-optimization look for the properties
of the whole not the properties of each part.
• Look for Relationships: Interaction is more important to understand
how components work together.
24. Systems Dynamics: Balancing and Enforcing Loops
Overtime /Velocity
Fatigue
Stress
+
-
-
Efficiency
+
+
+
time
Stress management
-
+
+
Features
Delivered/
Throughput
QualityProblem: Increase the development velocity by 20%
Bugs
rate of requirements change
Team skills
Budget constraints
Schedule constraints
25. Characteristics of Systems Thinking
• Optimize the Whole – avoid sub-optimization look for the properties
of the whole not the properties of each part.
• Look for Relationships: Interaction is more important to understand
how components work together.
• Consider Flows and Processes before Structures.
26. How To Develop Systems Thinking Mindset?
Start with Synthesis
Draw a boundary – identify the containing whole
Study the behavior and properties of the whole – emergent
properties, homeostasis or steady state
Study the behavior and properties of the parts in terms of
their contribution to the behavior of the whole [ use loops,
flows and stocks]- interrelationships
Identify the Whole? How can I master the zoom-out skill?
Synthesis reveals understanding—why?
Analysis reveals structure— how?
27. Example on Synthetic
How many developers start
the design exercise from
scratch?
• … few
• … why
• We analyze and analyze
then we compile the
design after we put a lot of
code!
Reverse Engineering is not synthetic!
Application as Stock
APIs as flows
28. Applications of Systems Thinking in SE
.
Operations
Development
Architecture
PlaceholderPlanning
SE-Education
30. Microservices Challenges
• Decentralized Governance and Data Management
• Creating Synergies and Orchestrations
• Heterogeneity and Homeostasis
• Network Structure
(Image: Bruce Wong, Netflix)
31. DevOps
Feedbacks
Flows work, experiments and learning
The 175 Principles of Flow
ECONOMIC PRINCIPLES
QUEUEING PRINCIPLES
FLOW CONTROL PRINCIPLES
FAST FEEDBACK PRINCIPLES
32. We have developed and evolved an MS-level software engineering
curriculum that enables Computer Science (CS) majors to become
considerably more T-shaped than when they entered. It includes
courses in software management and economics, human-computer
interaction, embedded software systems, systems and software
requirements, architecture, and Verification and Validation (V&V), and
a two-semester, real-client team project course that gives students
experience in applying these skills.
33. Between 𝑡0 𝑎𝑛𝑑 𝑡0 + 1
The Domino effect
Image source
Faulty Requirements
Faulty design
Faulty functionality
Faulty logic
The bug path
34. Final Remark
• Systems are connected through a complex network!
• Software Engineering a Socio-Technical System
• Theory of systems is our way to achieve Integration in the various
sciences, natural and social as inspired by von Bertalanffy
(Image: Josh Evans, Netflix)
35. Not Anymore R&D
• Research and design are not two different things!
• …. Design is also a research methodology
37. Summary
• Software systems are essentially socio-technical systems
• and they are not isolated from other systems engineering processes.
Unconsciously or by intention, we implement systems thinking in multi-
agent systems, microservices, DevOps, distributed systems, API-led
integrations and lean based software development life cycles. However, the
concrete relationship between systems thinking and software engineering
is still a green area and barely highlighted as a common practice among
software engineers. In this presentation, we will
• elaborate how systems thinking helps us to understand the socio-technical
aspects of software engineering. We will discuss why systems thinking is
important in the field of software engineering, provide examples where it
is currently used and show the general areas where systems thinking
applies to tackle complex software problems