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...