Nonlinear Thinking: DDD Europe 2022
We are conditioned to think linearly. Linear thinking is so ubiquitous, many of us don’t recognize it as one type of thinking. We think of it as, simply, thinking. Linear thinking enables us to design, build and deploy software. But it can not resolve systemic issues. For systems, we need nonlinear thinking.
Though we may be brilliant software developers, product managers or strategic leaders, when it comes to nonlinear thinking, we are all blocked by two obstacles:
- One: By default, we are spectacularly terrible at nonlinear thinking*. We are constantly tangled up in our opinions, cognitive biases, fears, assumptions, linear conditioning and logical fallacies. They seem real and true to us. Skillfully and consistently untangling ourselves requires practice.
- Two: We don’t know that we are terrible at it. In fact, the worse we are at nonlinear thinking, the more certain we are that we are good at it!
Therein lies a paradox: We need to be good at nonlinear thinking in order to see that we aren’t good at nonlinear thinking. Fortunately, as Carl Jung said, “Only the paradox comes anywhere near to comprehending the fullness of life.”
In this workshop, we will “comprehend the fullness” with helpful principles and practices on three levels: individual, teams/groups and a system as a whole.
30 mins: Practices for cultivating self awareness and improving the soundness of our own thinking. We begin here because what we think and experience is what we’ll build. While we’ll only have time to do one or two, we’ll introduce varied resources to continue exploring.
30 mins: The “Yes, and” game. We’ll practice collective reasoning by following a few fundamental rules for thinking nonlinearly together. This is a warm up for …
1 hour: “Where shall we begin?” We’ll model an interesting (likely familiar) real world systems challenge. In this challenge, there is no linear path to transformation – we’ll need to take a nonlinear approach. We’ll focus on patterns and relationship as well as blockers, challenges, feedback loops. We can apply DDD concepts or we can mix and match. We won’t Solve Everything. But we will create some structured thinking in the midst of uncertainty.
Note: Nonlinear thinking is also called systems thinking, strategic thinking, pattern thinking, parallel thinking, systemic reasoning and other names.
From Software To Systems
When I started on my journey, we built individual digital spaces bounded by software that orchestrating page request. Almost everything was constructed around the relationship between a user and a page.
Meanwhile, the internet, a knowledge and information system, was emerging around us. Everyone was outgrowing their software. In response everyone wanted digital transformation.
So we began restructuring spacetime. Asynchronous software and micro services, event-based cloud native platforms and hypermedia data structures.
The transformations inevitably hit the same iceberg. We don’t think in systems.
- Thinking in Systems by Donella Meadows
- Design Unbound: Designing for Emergence in a Whitewater World by Ann M Pendleton-Jullian & John Seely Brown
- Systems Thinking, MIT Course
- Chaos: Making a New Science by James Gleick
- Animal, Vegetable, Junk: A History of Food, from Sustainable to Suicidal by Mark Bittman
- Biggest Little Farm (documentary)
Linear thinking is so ubiquitous, it is usually what we usually mean when we say “thinking.” The ideals of linear approaches are: predictable, rational, repeatable, top down, dualistic and primarily concerned with control
Nonlinear thinking is also called systems thinking, strategic thinking, pattern thinking, parallel thinking or systemic reasoning. Nonlinear approaches are antithetical to reductionism — managing complexity by breaking it down into parts. Instead, it focuses on how relationships between the parts create emergence — things that couldn’t exist without those relationships.
There are big challenges to nonlinear thinking. We are terrible at it. We don’t know we are terrible at it. And when we do it well, almost nobody will believe what we say.
- A Lifetime of Systems Thinking by Russel Ackoff (article)
- The Fifth Discipline: The Art & Practice of a Learning Organization by Peter M. Senge
- Domain Driven Design by Eric Evans
- The Timeless Way of Building by Christopher Alexander
- Lateral Thinking by Edward de Bono
- The Art of Systems Architecting by Mark Maier, Eberhardt Rechtin
Fred Brooks says that conceptual integrity is the most important consideration in systems design. It is creating harmony from a cacophony of “many good but independent and uncoordinated ideas”.
We often rely on “glue roles”, people good at synthesizing knowledge and experience into reasonable decisions to maintain integrity between parts of an organization (system or software). But this is exhausting and often fruitless. A better way if to help everyone become better at practicing conceptual integrity.
One way to do this is to create artifacts together, that move behind data and information towards knowledge, understanding and maybe even wisdom.
- The Mythical Man Month by Fred Brooks
- Becoming a Technical Leader by Gerald Weinberg
- Technical leadership masterclass by Ruth Malan (and course)
- Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy by Vlad Khononov
Respond rather than react
There is a lot of panic and blame in systems. People generally don’t improve their thinking and communication in response to systems challenges — they make things worse. To alleviate this strain, practicing self awareness and learning to drop reactions (in favor of constructing responses) is essential.
Writing out our thinking (by hand) supports self awareness, especially awareness of our reactive minds. As does most forms of meditation, rhythmic activity and immersive hobbies.
- The Beer Game
- Farnam Street’s Decision by Design course
- Switch: How to change things when change is hard by Chip and Dan Heath
- Dealing with Doubt, talk by Sharon Salzberg
- The Power of Full Engagement: Managing Energy, Not Time, Is the Key to High Performance and Personal Renewal by Jim Loehr and Tony Schwartz
Collective Systemic Reasoning
Collectively reasoning is arriving at the best possible conclusion, under the circumstances, when conditions are uncertain. Conditions, in systems, are always uncertain.
Rather than share our opinions, we share our ideas, recommendations or theories along with the reasons that convinced us. And we proactively strengthen those reasons, with others, in order to improve the soundness of our activities.
Central to this practice is learning to say “Yes, and …” critically listening to others and helping them strengthen reasons.
- Argumentation Course
- The Great Mental Models by Shane Parrish
- Technology Strategy Patterns by Eben Hewitt
- Start with Why by Simon Sinek
Places to intervene
Adapted from: Leverage Points: Places to Intervene in a System by Donella Meadows
12. Parameters (numbers): autoscaling, five 9s
11. Storage: add caching, database performance
10. DevOps: restructure the flows
9. React faster: CI/CD, test coverage
7. Self-correcting negative feedback: let the pain be painful
6. Self-reinforcing positive feedback: make what must be easier, easier
5. Restructure information flows: in people (transparency) and tech (silos)
4. Change the rules that govern behavior
4. Self-organizing: the power to change previous aspects of the system
3. Change the goals: the Why of the system.
2. Change the paradigm: the mindsetout of which the system — its goals, structure, rules, workflows — arise
1. Maintain the power to transcend paradigms