Looking ahead to next year, I want to talk about Abstraction, Encapsulation, Cohesion and Loose Coupling as it seems they are missing from a lot of modern software design. Back to Basics: Why the principles that built our industry still matter today There are only three things certain in life: death, taxes, and constant change in software. For decades, we’ve tried to limit that change. Up‑front design and predictive methodologies promised control, but too often delivered the wrong software for the user. In the late 90s, Kent Beck urged us to embrace change through methodologies like Extreme Programming and concrete practices such as Test‑Driven Development. These weren’t trends, they were reminders of fundamentals we already knew. Design behind interfaces. Keep responsibilities narrow. Make dependencies replaceable. These boundaries matter, from functions and classes to services, systems, and infrastructure. These ideas have been with us since the 60s and 70s. The challenge isn’t inven...
Keep It Loose Deep down we all know it’s important to componentise software systems. It allows different parts of the systems, the components, to change and evolve over time with minimal effect on other parts of the system. Designed and implemented correctly, components are loosely coupled , as well as highly cohesive . In practice this means that components can be changed, replaced, or evolved independently, without causing widespread change throughout the system. Components with responsibilities, and that naturally change together, are grouped together. Components have abstract interfaces and concrete implementations. Interfaces describe the features provided by a component and hide the concrete implementation. Users of components - usually other components - depend on the interface rather than the concrete implementation. If clients come to depend on concrete implementations - the internal details of a component - the benefits of componentisation are lost. The comp...