Emily Bache Demystifies Software Architecture: Elevating Design for Agility, Welcomes Sam Newman

Emily Bache, creator of Samman Coaching and host of the Modern Software Engineering channel, recently announced Sam Newman—renowned for his works on microservices architecture—as a new presenter. On the channel, Bache addressed the common developer aspiration of becoming an architect, often driven by perceived glamour and influence, by clarifying the fundamental difference between software design and architecture. She underscored that while architecture represents “significant design decisions measured by the cost of change,” as per Grady Booch, it exists on a continuum with software design. The critical distinction lies in the scale of impact and context: architectural decisions, such as choosing between a distributed system and a monolith, are inherently expensive to change, whereas design decisions, concerning code-level specifics like method arguments, are typically cheap. The overarching goal, Bache emphasized, is to push the boundary of expensive change as far as possible, rendering most decisions reversible and low-cost.

To achieve this critical agility, Bache highlighted three essential factors: modularity, robust automated testing, and strong refactoring skills. Modularity, encompassing effective abstractions and API design, is key to managing complexity, reducing the ‘blast radius’ of changes, and enabling developers to reason effectively about impact. Automated tests are crucial for making decisions reversible, as they immediately reveal the consequences of code alterations, even in less modular systems. Perhaps most notably, refactoring skill empowers developers to shift the balance, transforming even legacy code’s ‘architectural’ (expensive) changes into cheaper ‘design’ updates. This mastery is vital not only for mitigating the inflexibility of poorly designed systems but also for seizing unexpected business opportunities, ensuring designs can be safely adapted without breaking existing functionality. Ultimately, Bache concluded, these practices lead to more maintainable software and empowered development teams.