
Software Architecture: The Hard Parts

An architect implements fitness functions to build protections around unexpected change in architecture characteristics. In the Agile software development world, developers implement unit, functional, and user acceptance tests to validate different dimensions of the domain design. However, until now, no similar mechanism existed to validate the
... See moreNeal Ford • Software Architecture: The Hard Parts
Static coupling Represents how static dependencies resolve within the architecture via contracts. These dependencies include operating system, frameworks, and/or libraries delivered via transitive dependency management, and any other operational requirement to allow the quantum to operate.
Neal Ford • Software Architecture: The Hard Parts
Architects shouldn’t break a system into smaller parts unless clear business drivers exist. The primary business drivers for breaking applications into smaller parts include speed-to-market (sometimes called time-to-market) and achieving a level of competitive advantage in the marketplace. Speed-to-market is achieved through architectural
... See moreNeal Ford • Software Architecture: The Hard Parts
High functional cohesion refers structurally to the proximity of related elements: classes, components, services, and so on. Throughout
Neal Ford • Software Architecture: The Hard Parts
Often, the best design an architect can create is the least worst collection of trade-offs—no single architecture characteristics excels as it would alone, but the balance of all the competing architecture characteristics promote project success.
Neal Ford • Software Architecture: The Hard Parts
While experience is useful, scenario analysis is one of an architect’s most powerful tools to allow iterative design without building whole systems. By modeling likely scenarios, an architect can discover if a particular solution will, in fact, work well.
Neal Ford • Software Architecture: The Hard Parts
Dynamic coupling Represents how quanta communicate at runtime, either synchronously or asynchronously. Thus, fitness functions for these characteristics must be continuous, typically utilizing monitors.
Neal Ford • Software Architecture: The Hard Parts
High static coupling implies that the elements inside the architecture quantum are tightly wired together, which is really an aspect of contracts.
Neal Ford • Software Architecture: The Hard Parts
static coupling analyzes operational dependencies, and dynamic coupling analyzes communication dependencies.