
Software Architecture: The Hard Parts

The authors built many distributed systems a few decades ago when they first became popular, yet decision making in modern microservices seems more difficult, and we wanted to figure out why. We eventually realized that, back in the early days of distributed architecture, we mostly still persisted data in a single relational database. However, in
... See moreNeal 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
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
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
All things are poison, and nothing is without poison; the dosage alone makes it so a thing is not a poison. Paracelsus
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
... 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
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
Architects must watch out for composite architecture characteristics—ones that aren’t objectively measurable but are really composites of other measurable things. For example, “agility” isn’t measurable, but if an architect starts pulling the broad term agility apart, the goal is for teams to be able to respond quickly and confidently to change,
... See more