Published Apr 24, 2020

Episode 407: Juval Lowy on Righting Software

Software visionary Juval Lowy discusses the critical state of the software industry, highlighting systemic development failures and advocating for a renaissance in design practices. He emphasizes the need for robust requirements analysis, composable design, and encapsulating volatility to create adaptable systems.
Episode Highlights
Software Engineering Radio - the podcast for professional software developers logo

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