
Software Architecture: The Hard Parts

static coupling analyzes operational dependencies, and dynamic coupling analyzes communication dependencies.
Neal Ford • Software Architecture: The Hard Parts
An architecture quantum is an independently deployable artifact with high functional cohesion, high static coupling, and synchronous dynamic coupling. A common example of an architecture quantum is a well-formed microservice within a workflow.
Neal Ford • Software Architecture: The Hard Parts
Each understands the common scope under question: architects understand the coupling characteristics, developers understand the scope of behavior, and the operations team understands the deployable characteristics.
Neal 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
Thus, here’s our advice for modern trade-off analysis in software architecture: Find what parts are entangled together. Analyze how they are coupled to one another. Assess trade-offs by determining the impact of change on interdependent systems.
Neal 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
Building services that model bounded contexts required a subtle but important change to the way architects designed distributed systems because now transactionality is a first-class architectural concern. In many of the distributed systems architects designed prior to microservices, event handlers typically connected to a single relational database
... See moreNeal 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
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 agility—t
... See more