
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.
Mark Richards • Software Architecture: The Hard Parts
High functional cohesion refers structurally to the proximity of related elements: classes, components, services, and so on. Throughout
Mark Richards • 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
Mark Richards • 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.
Mark Richards • 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.
Mark Richards • 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 moreMark Richards • 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.
Mark Richards • Software Architecture: The Hard Parts
By codifying rules about code quality, structure, and other safeguards against decay into fitness functions that run continually, architects build a quality checklist that developers can’t skip. A few years ago, the excellent book The Checklist Manifesto by Atul Gawande (Picador) highlighted the use of checklists by professionals like surgeons, air
... See moreMark Richards • 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, ei
... See more