The Difference Between Building SYSTEMS vs Building SOFTWARE
Summary
This transcript is an excerpt from “The Engineering Room” podcast featuring Diana, the author of the book “Learning Systems Thinking.” The conversation revolves around the importance of systems thinking, particularly in the context of software development and digital transformation.
Diana explains the origin of the book, initially titled “Mind Shift,” which was changed to “Learning Systems Thinking” for better clarity and marketability. The book stemmed from her experiences with digital transformations and the recurring patterns of chaos and challenges she observed. She was driven by a desire to understand why organizations struggle with change despite technological advancements. Instead of simply complaining about the difficulties, she aimed to explore effective approaches to building modern systems, changing mindsets, communication styles, and coding practices.
The core idea Diana emphasizes is the shift from building software as isolated components to building systems where relationships between components are paramount. She highlights that many common mistakes and recurring issues in software development arise in the “gaps between the pieces,” meaning in the interactions and dependencies between different parts of a system.
Diana contrasts reductionism (or linear thinking) with systems thinking. She acknowledges that reductionism, breaking down complexity into smaller parts, is a familiar and fundamental approach, particularly in fields like object-oriented programming where systems are designed as orchestrations of encapsulated parts (using the car analogy with braking system, steering column etc.). Linear thinking is also ingrained in our learning processes, where we build foundational skills and progress to more complex tasks sequentially.
However, she argues that understanding the parts in isolation is insufficient to understand the system as a whole. The crucial aspect of systems thinking is recognizing that relationships produce emergent effects. When two components of a system interact (be it software APIs or teams collaborating), they create a “third thing” – an outcome that neither could achieve alone. This phenomenon is called emergence.
Diana argues that in modern software development, especially for information systems, the focus should increasingly be on designing for emergence. This means considering how relationships between different parts of the system can generate valuable outcomes that are beyond the capabilities of individual components or monolithic systems. While reductionism is helpful for gaining control over individual parts, it falls short when addressing systemic challenges that arise from the interactions and dependencies within the system.
In essence, the conversation underscores the need to move beyond a purely reductionist approach in software development and embrace systems thinking to effectively manage complexity, understand emergent behaviors, and build more resilient and adaptable systems in the age of digital transformation.
Accuracy
The information presented in the transcript regarding systems thinking, reductionism, and their relevance to software development is accurate and aligns with established knowledge.
-
Systems Thinking: Diana’s description of systems thinking accurately reflects its core principles. Systems thinking emphasizes understanding the interconnectedness and interdependence of parts within a whole. It focuses on relationships, feedback loops, and emergent properties that arise from these interactions, rather than just analyzing individual components in isolation.
-
Reductionism (Linear Thinking): Her characterization of reductionism as breaking down complex problems into smaller, manageable parts is also correct. Reductionism is a valid and often necessary approach for understanding individual components. Object-oriented programming, as she mentions, does incorporate reductionist principles by encapsulating functionalities into objects. However, she correctly points out its limitations when applied to understanding the system as a whole, especially concerning emergent behavior and inter-component dynamics.
-
Emergence: The concept of emergence, where the whole is greater than the sum of its parts, is a fundamental principle in systems theory. Diana’s explanation of emergence arising from the relationships between software components or teams is a clear and accurate illustration of this concept in the context of software systems.
-
Digital Transformation & Software Development Challenges: Her observation that digital transformations often face challenges and chaos, despite technological advancements, is a widely recognized issue. The shift from monolithic architectures to distributed and microservices-based systems, and the increasing complexity of software systems, indeed necessitates a systems thinking approach to manage interdependencies and emergent behaviors effectively.
-
Historical Progression of Software Architectures: Her brief history from monolithic software to decoupled, event-driven, and other architectures accurately reflects the evolution of software development paradigms. This evolution was driven in part by the need to manage complexity and improve scalability, which inherently pushes developers towards considering systems-level interactions.
Overall Accuracy Assessment: The transcript accurately represents the core concepts of systems thinking and reductionism, and correctly applies them to the challenges and evolution of software development and digital transformation. There are no inaccuracies in the presented information. It is a simplified explanation suitable for a podcast format, but it maintains conceptual integrity.
Resources
Here are the top 5 most relevant resources to learn more about systems thinking, especially in the context of software and technology, based on the themes discussed in the transcript:
-
“Thinking in Systems: A Primer” by Donella H. Meadows: This book is a widely recommended and accessible introduction to systems thinking. Donella Meadows, a renowned systems scientist, explains the fundamental concepts of systems, feedback loops, stocks, and flows in a clear and engaging way. It provides a strong foundation for understanding system dynamics and applying systems thinking principles in various contexts, including technology and organizations.
- Relevance: This is a foundational text for anyone wanting to understand systems thinking. It provides the theoretical framework and vocabulary necessary to grasp the concepts discussed in the transcript in more depth.
-
“The Fifth Discipline: The Art & Practice of The Learning Organization” by Peter M. Senge: While broader than just software, this book is a classic in organizational learning and systems thinking. Senge outlines five disciplines crucial for building learning organizations, with systems thinking as the cornerstone. It explores how systems thinking can be applied to understand complex organizational challenges and foster systemic change.
- Relevance: It expands the application of systems thinking to organizational contexts, relevant to digital transformations and how software systems interact within larger organizational systems. It highlights the human and organizational aspects of systems thinking.
-
“Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations” by Nicole Forsgren, Jez Humble, and Gene Kim: This book, while focused on DevOps and software delivery performance, is deeply rooted in systems thinking principles. It uses data and research to demonstrate how high-performing technology organizations operate as complex adaptive systems, emphasizing feedback loops, continuous improvement, and system-wide optimization.
- Relevance: Directly applicable to software engineering and digital transformation. It shows how systems thinking principles translate into practical improvements in software development processes and organizational performance.
-
“Cynefin Framework” by Dave Snowden (Cognitive Edge): While not a single book, exploring the Cynefin framework developed by Dave Snowden is crucial for understanding complexity and sense-making in different system contexts. The framework helps differentiate between ordered, complicated, complex, chaotic, and disordered domains, guiding appropriate approaches for problem-solving and decision-making in each domain. Resources include articles, videos, and workshops available through Cognitive Edge.
- Relevance: Provides a practical framework for understanding the nature of complexity in software systems and digital transformation initiatives. It helps in choosing appropriate methodologies and approaches based on the system’s context.
-
Online Courses and Communities (e.g., Coursera, edX, System Dynamics Society): Platforms like Coursera and edX offer numerous courses on systems thinking, system dynamics, and complexity science. Additionally, joining communities like the System Dynamics Society or online forums dedicated to systems thinking can provide ongoing learning, discussions, and access to further resources.
- Relevance: Offers structured learning paths and opportunities for interactive engagement with systems thinking concepts. Online communities provide ongoing support and access to a wider network of practitioners and resources.
These five resources offer a blend of foundational knowledge, practical application in software and organizations, and ongoing learning opportunities for anyone interested in deepening their understanding of systems thinking.