Nonlinear Thinking: DDD Europe 2022
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.
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