Episode 407: Juval Lowy on Righting Software

Topics covered
Popular Clips
Episode Highlights
Composable Design
Juval Lowy emphasizes the importance of composable design in software architecture, which involves decomposing systems based on volatility rather than functionality. This approach allows for the encapsulation of potential changes, ensuring that when a change occurs, it is contained within a specific area without affecting the entire system 1. He explains that this method is akin to isolating a "hand grenade" in a vault, preventing widespread damage 2. Lowy further illustrates this concept by highlighting how encapsulating volatility in utilities like security and logging can prevent system-wide disruptions when changes occur 3.
All good design decompose based on volatility, meaning the encapsulate in hand volatility of what is actually going on.
---
This principle is crucial for creating adaptable and resilient software systems.
Functional Decomposition
Lowy criticizes functional decomposition, a common practice in software design, for its inability to handle changes effectively. He argues that functional decomposition leads to complex architectures that are difficult to maintain and extend, as changes in one part of the system often necessitate changes throughout 4. Instead, he advocates for encapsulating volatility, which separates the sequence of activities from the activities themselves, allowing for independent changes 5. This separation reduces complexity and enhances system adaptability.
Functional decomposition always lands you in these extreme areas of complexity that nobody can understand.
---
By focusing on encapsulating volatility, developers can create systems that are easier to manage and evolve.
Building Blocks
Lowy highlights the significance of identifying core use cases and minimizing the number of building blocks in software design. He suggests that a smaller set of building blocks can effectively address core use cases, which rarely change, thus maintaining system stability even as requirements evolve 6. This approach is inspired by natural systems, where a limited number of components interact in numerous ways to achieve complex behaviors 7.
You want to come up with a smaller set of building blocks that you can put together.
---
By focusing on core use cases and reducing complexity, developers can ensure that their designs remain robust and adaptable.
Related Episodes


Episode 190: Lean (Software) Development
Answers 383 questions

Episode 441 Shipping Software - With Bugs
Answers 383 questions

Episode 180: Leading Agile Developers with Jurgen Appelo
Answers 383 questions

Episode 430: Marco Faella on Seriously Good Software
Answers 383 questions

Episode 38: Interview James Noble
Answers 383 questions

Episode 47: Interview Grady Booch
Answers 383 questions

Episode 112: Roles in Software Engineering II
Answers 383 questions

Episode 100: Software in Space
Answers 383 questionsEpisode 87: Software Components
Answers 383 questions

Episode 130: Code Visualization with Michele Lanza
Answers 383 questions

Episode 110: Roles in Software Engineering I
Answers 383 questions

Episode 134: Release It with Michael Nygard
Answers 383 questions

Episode 82: Organization of Large Code Bases with Juergen Hoeller
Answers 383 questions

Episode 401: Jeremy Miller on Waterfall Versus Agile
Answers 383 questions














