@trohde/earos 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +156 -0
- package/assets/init/.agents/skills/earos-artifact-gen/SKILL.md +106 -0
- package/assets/init/.agents/skills/earos-artifact-gen/references/interview-guide.md +313 -0
- package/assets/init/.agents/skills/earos-artifact-gen/references/output-guide.md +367 -0
- package/assets/init/.agents/skills/earos-assess/SKILL.md +212 -0
- package/assets/init/.agents/skills/earos-assess/references/calibration-benchmarks.md +160 -0
- package/assets/init/.agents/skills/earos-assess/references/output-templates.md +311 -0
- package/assets/init/.agents/skills/earos-assess/references/scoring-protocol.md +281 -0
- package/assets/init/.agents/skills/earos-calibrate/SKILL.md +153 -0
- package/assets/init/.agents/skills/earos-calibrate/references/agreement-metrics.md +188 -0
- package/assets/init/.agents/skills/earos-calibrate/references/calibration-protocol.md +263 -0
- package/assets/init/.agents/skills/earos-create/SKILL.md +257 -0
- package/assets/init/.agents/skills/earos-create/references/criterion-writing-guide.md +268 -0
- package/assets/init/.agents/skills/earos-create/references/dependency-rules.md +193 -0
- package/assets/init/.agents/skills/earos-create/references/rubric-interview-guide.md +123 -0
- package/assets/init/.agents/skills/earos-create/references/validation-checklist.md +238 -0
- package/assets/init/.agents/skills/earos-profile-author/SKILL.md +251 -0
- package/assets/init/.agents/skills/earos-profile-author/references/criterion-writing-guide.md +280 -0
- package/assets/init/.agents/skills/earos-profile-author/references/design-methods.md +158 -0
- package/assets/init/.agents/skills/earos-profile-author/references/profile-checklist.md +173 -0
- package/assets/init/.agents/skills/earos-remediate/SKILL.md +118 -0
- package/assets/init/.agents/skills/earos-remediate/references/output-template.md +199 -0
- package/assets/init/.agents/skills/earos-remediate/references/remediation-patterns.md +330 -0
- package/assets/init/.agents/skills/earos-report/SKILL.md +85 -0
- package/assets/init/.agents/skills/earos-report/references/portfolio-template.md +181 -0
- package/assets/init/.agents/skills/earos-report/references/single-artifact-template.md +168 -0
- package/assets/init/.agents/skills/earos-review/SKILL.md +130 -0
- package/assets/init/.agents/skills/earos-review/references/challenge-patterns.md +163 -0
- package/assets/init/.agents/skills/earos-review/references/output-template.md +180 -0
- package/assets/init/.agents/skills/earos-template-fill/SKILL.md +177 -0
- package/assets/init/.agents/skills/earos-template-fill/references/evidence-writing-guide.md +186 -0
- package/assets/init/.agents/skills/earos-template-fill/references/section-rubric-mapping.md +200 -0
- package/assets/init/.agents/skills/earos-validate/SKILL.md +113 -0
- package/assets/init/.agents/skills/earos-validate/references/fix-patterns.md +281 -0
- package/assets/init/.agents/skills/earos-validate/references/validation-checks.md +287 -0
- package/assets/init/.claude/CLAUDE.md +4 -0
- package/assets/init/AGENTS.md +293 -0
- package/assets/init/CLAUDE.md +635 -0
- package/assets/init/README.md +507 -0
- package/assets/init/calibration/gold-set/.gitkeep +0 -0
- package/assets/init/calibration/results/.gitkeep +0 -0
- package/assets/init/core/core-meta-rubric.yaml +643 -0
- package/assets/init/docs/consistency-report.md +325 -0
- package/assets/init/docs/getting-started.md +194 -0
- package/assets/init/docs/profile-authoring-guide.md +51 -0
- package/assets/init/docs/terminology.md +126 -0
- package/assets/init/earos.manifest.yaml +104 -0
- package/assets/init/evaluations/.gitkeep +0 -0
- package/assets/init/examples/aws-event-driven-order-processing/artifact.yaml +2056 -0
- package/assets/init/examples/aws-event-driven-order-processing/evaluation.yaml +973 -0
- package/assets/init/examples/aws-event-driven-order-processing/report.md +244 -0
- package/assets/init/examples/example-solution-architecture.evaluation.yaml +136 -0
- package/assets/init/examples/multi-cloud-data-analytics/artifact.yaml +715 -0
- package/assets/init/overlays/data-governance.yaml +94 -0
- package/assets/init/overlays/regulatory.yaml +154 -0
- package/assets/init/overlays/security.yaml +92 -0
- package/assets/init/profiles/adr.yaml +225 -0
- package/assets/init/profiles/capability-map.yaml +223 -0
- package/assets/init/profiles/reference-architecture.yaml +426 -0
- package/assets/init/profiles/roadmap.yaml +205 -0
- package/assets/init/profiles/solution-architecture.yaml +227 -0
- package/assets/init/research/architecture-assessment-rubrics-research.docx +0 -0
- package/assets/init/research/architecture-assessment-rubrics-research.md +566 -0
- package/assets/init/research/reference-architecture-research.md +751 -0
- package/assets/init/standard/EAROS.md +1426 -0
- package/assets/init/standard/schemas/artifact.schema.json +1295 -0
- package/assets/init/standard/schemas/artifact.uischema.json +65 -0
- package/assets/init/standard/schemas/evaluation.schema.json +284 -0
- package/assets/init/standard/schemas/rubric.schema.json +383 -0
- package/assets/init/templates/evaluation-record.template.yaml +58 -0
- package/assets/init/templates/new-profile.template.yaml +65 -0
- package/bin.js +188 -0
- package/dist/assets/_basePickBy-BVu6YmSW.js +1 -0
- package/dist/assets/_baseUniq-CWRzQDz_.js +1 -0
- package/dist/assets/arc-CyDBhtDM.js +1 -0
- package/dist/assets/architectureDiagram-2XIMDMQ5-BH6O4dvN.js +36 -0
- package/dist/assets/blockDiagram-WCTKOSBZ-2xmwdjpg.js +132 -0
- package/dist/assets/c4Diagram-IC4MRINW-BNmPRFJF.js +10 -0
- package/dist/assets/channel-CiySTNoJ.js +1 -0
- package/dist/assets/chunk-4BX2VUAB-DGQTvirp.js +1 -0
- package/dist/assets/chunk-55IACEB6-DNMAQAC_.js +1 -0
- package/dist/assets/chunk-FMBD7UC4-BJbVTQ5o.js +15 -0
- package/dist/assets/chunk-JSJVCQXG-BCxUL74A.js +1 -0
- package/dist/assets/chunk-KX2RTZJC-H7wWZOfz.js +1 -0
- package/dist/assets/chunk-NQ4KR5QH-BK4RlTQF.js +220 -0
- package/dist/assets/chunk-QZHKN3VN-0chxDV5g.js +1 -0
- package/dist/assets/chunk-WL4C6EOR-DexfQ-AV.js +189 -0
- package/dist/assets/classDiagram-VBA2DB6C-D7luWJQn.js +1 -0
- package/dist/assets/classDiagram-v2-RAHNMMFH-D7luWJQn.js +1 -0
- package/dist/assets/clone-ylgRbd3D.js +1 -0
- package/dist/assets/cose-bilkent-S5V4N54A-DS2IOCfZ.js +1 -0
- package/dist/assets/cytoscape.esm-CyJtwmzi.js +331 -0
- package/dist/assets/dagre-KLK3FWXG-BbSoTTa3.js +4 -0
- package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/assets/diagram-E7M64L7V-C9TvYgv0.js +24 -0
- package/dist/assets/diagram-IFDJBPK2-DowUMWrg.js +43 -0
- package/dist/assets/diagram-P4PSJMXO-BL6nrnQF.js +24 -0
- package/dist/assets/erDiagram-INFDFZHY-rXPRl8VM.js +70 -0
- package/dist/assets/flowDiagram-PKNHOUZH-DBRM99-W.js +162 -0
- package/dist/assets/ganttDiagram-A5KZAMGK-INcWFsBT.js +292 -0
- package/dist/assets/gitGraphDiagram-K3NZZRJ6-DMwpfE91.js +65 -0
- package/dist/assets/graph-DLQn37b-.js +1 -0
- package/dist/assets/index-BFFITMT8.js +650 -0
- package/dist/assets/index-H7f6VTz1.css +1 -0
- package/dist/assets/infoDiagram-LFFYTUFH-B0f4TWRM.js +2 -0
- package/dist/assets/init-Gi6I4Gst.js +1 -0
- package/dist/assets/ishikawaDiagram-PHBUUO56-CsU6XimZ.js +70 -0
- package/dist/assets/journeyDiagram-4ABVD52K-CQ7ibNib.js +139 -0
- package/dist/assets/kanban-definition-K7BYSVSG-DzEN7THt.js +89 -0
- package/dist/assets/katex-B1X10hvy.js +261 -0
- package/dist/assets/layout-C0dvb42R.js +1 -0
- package/dist/assets/linear-j4a8mGj7.js +1 -0
- package/dist/assets/mindmap-definition-YRQLILUH-DP8iEuCf.js +68 -0
- package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/assets/pieDiagram-SKSYHLDU-BpIAXgAm.js +30 -0
- package/dist/assets/quadrantDiagram-337W2JSQ-DrpXn5Eg.js +7 -0
- package/dist/assets/requirementDiagram-Z7DCOOCP-Bg7EwHlG.js +73 -0
- package/dist/assets/sankeyDiagram-WA2Y5GQK-BWagRs1F.js +10 -0
- package/dist/assets/sequenceDiagram-2WXFIKYE-q5jwhivG.js +145 -0
- package/dist/assets/stateDiagram-RAJIS63D-B_J9pE-2.js +1 -0
- package/dist/assets/stateDiagram-v2-FVOUBMTO-Q_1GcybB.js +1 -0
- package/dist/assets/timeline-definition-YZTLITO2-dv0jgQ0z.js +61 -0
- package/dist/assets/treemap-KZPCXAKY-Dt1dkIE7.js +162 -0
- package/dist/assets/vennDiagram-LZ73GAT5-BdO5RgRZ.js +34 -0
- package/dist/assets/xychartDiagram-JWTSCODW-CpDVe-8v.js +7 -0
- package/dist/index.html +23 -0
- package/export-docx.js +1583 -0
- package/init.js +353 -0
- package/manifest-cli.mjs +207 -0
- package/package.json +83 -0
- package/schemas/artifact.schema.json +1295 -0
- package/schemas/artifact.uischema.json +65 -0
- package/schemas/evaluation.schema.json +284 -0
- package/schemas/rubric.schema.json +383 -0
- package/serve.js +238 -0
|
@@ -0,0 +1,751 @@
|
|
|
1
|
+
# Reference Architecture Best Practices: Blueprints, Golden Paths, and Quality Frameworks
|
|
2
|
+
|
|
3
|
+
*Deep research compiled March 2026*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. What Makes a Good Reference Architecture
|
|
8
|
+
|
|
9
|
+
### 1.1 Definition and Purpose
|
|
10
|
+
|
|
11
|
+
A reference architecture is a standardised, reusable blueprint that guides the design and implementation of system architectures within a specific domain. In TOGAF's terminology, it is "a generic architecture that identifies the normal outlines of a system and provides the components, relationships, principles, and architectural guidelines" for a class of solutions. Unlike a solution architecture (which is tailored to one project), a reference architecture is meant to be broadly applicable — it captures proven patterns so that teams don't reinvent the wheel.
|
|
12
|
+
|
|
13
|
+
Conexiam identifies two fundamental types of reference architectures: those that **expose the structure** of a system (component models, layered views) and those that **show how a system works** (data flows, interaction patterns, runtime behaviours). The best reference architectures include both.
|
|
14
|
+
|
|
15
|
+
### 1.2 TOGAF and the Enterprise Continuum
|
|
16
|
+
|
|
17
|
+
TOGAF positions reference architectures along an **Enterprise Continuum** — a spectrum from generic to specific:
|
|
18
|
+
|
|
19
|
+
| Level | Description | Example |
|
|
20
|
+
|-------|-------------|---------|
|
|
21
|
+
| **Foundation** | Universal IT principles and building blocks | TOGAF Technical Reference Model (TRM) |
|
|
22
|
+
| **Common Systems** | Cross-industry patterns | Service-oriented architecture, event-driven architecture |
|
|
23
|
+
| **Industry** | Domain-specific blueprints | BIAN (banking), HL7 FHIR (healthcare), ACORD (insurance) |
|
|
24
|
+
| **Organisation-Specific** | Tailored to one enterprise | "Our microservices reference architecture on AWS" |
|
|
25
|
+
|
|
26
|
+
The further right on the continuum, the more opinionated and prescriptive the architecture becomes. A good reference architecture clearly states **where it sits** on this continuum so consumers understand how much adaptation is expected.
|
|
27
|
+
|
|
28
|
+
TOGAF also provides two built-in reference models: the **Technical Reference Model (TRM)**, which describes a fundamental layered architecture, and the **Integrated Information Infrastructure Reference Model (III-RM)**, focused on information flow. Both serve as starting points that organisations extend.
|
|
29
|
+
|
|
30
|
+
### 1.3 Structure and Content: Lessons from the Hyperscalers
|
|
31
|
+
|
|
32
|
+
The major cloud providers have converged on a remarkably consistent structure for their reference architectures. Examining AWS, Azure, and Google Cloud reveals a common anatomy:
|
|
33
|
+
|
|
34
|
+
#### AWS Reference Architectures
|
|
35
|
+
|
|
36
|
+
AWS publishes reference architecture diagrams through the **AWS Architecture Center**, structured around:
|
|
37
|
+
|
|
38
|
+
- **Architecture diagram** with numbered data-flow annotations
|
|
39
|
+
- **Component descriptions** — each AWS service's role explained
|
|
40
|
+
- **Well-Architected alignment** — mapping to the six pillars (operational excellence, security, reliability, performance efficiency, cost optimisation, sustainability)
|
|
41
|
+
- **Deployment guidance** — often including CloudFormation or CDK templates
|
|
42
|
+
- **Cost considerations**
|
|
43
|
+
|
|
44
|
+
AWS also provides **AWS Solutions Constructs** — an open-source CDK library of multi-service patterns that implement Well-Architected best practices with ready-to-deploy code. These represent reference architectures at the infrastructure-as-code level.
|
|
45
|
+
|
|
46
|
+
#### Azure Architecture Center
|
|
47
|
+
|
|
48
|
+
Microsoft's Azure Architecture Center structures reference architectures with:
|
|
49
|
+
|
|
50
|
+
- **Scenario overview** — business context, use cases, and intended audience
|
|
51
|
+
- **Architecture diagram** — visual showing component interactions
|
|
52
|
+
- **Dataflow description** — numbered walkthrough of how data moves through the system
|
|
53
|
+
- **Components** — each Azure service linked to its Well-Architected service guide
|
|
54
|
+
- **Well-Architected Framework considerations** — analysis across the five pillars (reliability, security, cost optimisation, operational excellence, performance efficiency)
|
|
55
|
+
- **Alternatives** — discussion of technology choices and trade-offs
|
|
56
|
+
- **Deploy this scenario** — ARM templates or Bicep files on GitHub
|
|
57
|
+
|
|
58
|
+
#### Google Cloud Architecture Center
|
|
59
|
+
|
|
60
|
+
Google Cloud's approach emphasises:
|
|
61
|
+
|
|
62
|
+
- **Architecture framework** — organised into pillars (security, reliability, performance, cost, operations, sustainability) plus cross-pillar perspectives
|
|
63
|
+
- **Simplicity** — explicit principle that if your architecture is too complex to understand, it will be difficult to implement
|
|
64
|
+
- **Documentation emphasis** — Google specifically calls out that lack of documentation is a major obstacle and that a "properly documented cloud architecture establishes common language and standards"
|
|
65
|
+
- **Decoupling** — separating components so they can operate independently
|
|
66
|
+
- **Industry perspectives** — e.g. a dedicated Financial Services Industry (FSI) perspective aligned to each pillar
|
|
67
|
+
|
|
68
|
+
### 1.4 Audience and Level of Detail
|
|
69
|
+
|
|
70
|
+
A good reference architecture serves multiple audiences simultaneously and should be layered accordingly:
|
|
71
|
+
|
|
72
|
+
| Audience | Needs | Detail Level |
|
|
73
|
+
|----------|-------|-------------|
|
|
74
|
+
| **Executive / Business** | Why this pattern? What value? | High-level context diagram, business benefits, cost model |
|
|
75
|
+
| **Solution Architect** | How to compose the solution | Component model, integration patterns, decision points |
|
|
76
|
+
| **Developer** | How to implement | API contracts, code samples, deployment templates |
|
|
77
|
+
| **Operations / SRE** | How to run it | Monitoring, scaling policies, runbooks, SLOs |
|
|
78
|
+
| **Security / Compliance** | How it's protected | Threat model, control mapping, compliance evidence |
|
|
79
|
+
|
|
80
|
+
The key insight from all three hyperscalers: **the diagram is necessary but not sufficient**. Every reference architecture needs narrative explanation of data flows, explicit quality-attribute considerations, and actionable deployment artefacts.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 2. Golden Paths and Paved Roads
|
|
85
|
+
|
|
86
|
+
### 2.1 Origin: Spotify's Golden Path
|
|
87
|
+
|
|
88
|
+
The concept of the **Golden Path** was popularised by Spotify Engineering in 2020 to address a specific problem: as the company grew, autonomous teams led to ecosystem fragmentation. Developers resorted to what Spotify called "rumour-driven development" — the only way to figure out how to do something was to ask a colleague who might know.
|
|
89
|
+
|
|
90
|
+
Spotify's definition: a Golden Path is the **"opinionated and supported path to build something"** — for example, build a backend service, put up a website, or create a data pipeline.
|
|
91
|
+
|
|
92
|
+
Key design principles:
|
|
93
|
+
|
|
94
|
+
- **Opinionated but not mandatory**: The path represents the organisation's recommended way of doing things. Teams can deviate, but they lose platform support when they do.
|
|
95
|
+
- **Convenience over restriction**: The goal is to make the right thing the easy thing, not to enforce compliance through gates.
|
|
96
|
+
- **Full lifecycle coverage**: A golden path covers from project creation through CI/CD, observability, and production operations.
|
|
97
|
+
- **Dramatically reduced setup time**: Spotify reported reducing service setup time from **14 days to under 5 minutes**.
|
|
98
|
+
|
|
99
|
+
### 2.2 Related Concepts
|
|
100
|
+
|
|
101
|
+
The golden path concept has spawned related ideas:
|
|
102
|
+
|
|
103
|
+
- **Paved Road** (Netflix's term): Similar concept — a well-maintained, well-lit highway through the technology landscape. Netflix emphasises that the paved road includes automated security scanning, standardised observability, and pre-configured CI/CD.
|
|
104
|
+
- **Silver Path**: Spotify's term for a secondary supported path — not the primary recommendation, but still maintained and supported.
|
|
105
|
+
- **Guardrails vs. Gates**: Golden paths favour guardrails (guide developers towards good practices) over gates (block developers until they comply). If you stay on the path, security and observability come "for free."
|
|
106
|
+
|
|
107
|
+
### 2.3 Backstage and Software Templates
|
|
108
|
+
|
|
109
|
+
Spotify's internal developer portal, **Backstage** (now a CNCF project), is the primary mechanism for delivering golden paths. As of mid-2025, Backstage has become "the gravitational center of the IDP conversation."
|
|
110
|
+
|
|
111
|
+
**Backstage Software Templates (Scaffolder)** operationalise golden paths:
|
|
112
|
+
|
|
113
|
+
1. A platform team defines a template (e.g. "Create a Java microservice")
|
|
114
|
+
2. The template encodes organisational standards: preferred language/framework, CI/CD pipeline, observability setup, security scanning
|
|
115
|
+
3. A developer selects the template, fills in a few form fields
|
|
116
|
+
4. Backstage creates a new repository with the golden-path configuration, with the first build already running through CI/CD
|
|
117
|
+
|
|
118
|
+
The templates are stored as YAML definitions that can be version-controlled, reviewed, and evolved alongside the platform.
|
|
119
|
+
|
|
120
|
+
### 2.4 Platform Engineering Context
|
|
121
|
+
|
|
122
|
+
Golden paths are a core concept within **platform engineering** — the practice of designing, building, and maintaining self-service capabilities that enable developers to deliver software faster with reduced cognitive load.
|
|
123
|
+
|
|
124
|
+
ThoughtWorks describes the golden path philosophy as: "If you follow and use these tools, we will give you our best support, so you will have a good experience. We're using these tools because these are the ones we recommend, and if you get stuck, we'll help you because we know exactly how to unblock you."
|
|
125
|
+
|
|
126
|
+
Key platform engineering patterns for golden paths:
|
|
127
|
+
|
|
128
|
+
- **Internal Developer Platform (IDP)**: The infrastructure layer that hosts and delivers golden paths
|
|
129
|
+
- **Self-service provisioning**: Developers can create environments, deploy services, and access tools without tickets
|
|
130
|
+
- **Production readiness scoring**: Tools like OpsLevel provide maturity dashboards that measure how closely services follow golden paths
|
|
131
|
+
- **Cognitive load reduction**: The primary metric — how much mental effort is removed from the developer's workflow
|
|
132
|
+
|
|
133
|
+
### 2.5 Design Principles for Effective Golden Paths
|
|
134
|
+
|
|
135
|
+
Drawing from Red Hat, Spotify, and ThoughtWorks guidance, effective golden paths share these characteristics:
|
|
136
|
+
|
|
137
|
+
1. **Start with the most painful developer journey** — identify where teams waste the most time
|
|
138
|
+
2. **Cover the full lifecycle** — from "I need a new service" to "it's running in production with monitoring"
|
|
139
|
+
3. **Make defaults excellent** — logging, security, observability, error handling should be pre-configured
|
|
140
|
+
4. **Keep the escape hatch** — experienced engineers must be able to go "off-road" for specific needs
|
|
141
|
+
5. **Measure adoption, not enforcement** — track what percentage of teams voluntarily use the path
|
|
142
|
+
6. **Iterate based on feedback** — treat golden paths as products with their own roadmap
|
|
143
|
+
7. **Make the path visible** — use a developer portal (Backstage, Port, OpsLevel) to showcase available paths
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 3. Reference Architecture Templates and Structures
|
|
148
|
+
|
|
149
|
+
### 3.1 The arc42 Template
|
|
150
|
+
|
|
151
|
+
The **arc42** template, created by Gernot Starke and Peter Hruschka, provides a 12-section framework for software architecture documentation. It is deliberately pragmatic — every section is optional, and teams choose what's relevant.
|
|
152
|
+
|
|
153
|
+
#### The 12 Sections
|
|
154
|
+
|
|
155
|
+
| # | Section | Purpose |
|
|
156
|
+
|---|---------|---------|
|
|
157
|
+
| 1 | **Introduction and Goals** | Functional requirements summary, driving forces, quality goals, stakeholder expectations |
|
|
158
|
+
| 2 | **Constraints** | Technical, organisational, and regulatory constraints |
|
|
159
|
+
| 3 | **Context and Scope** | System boundary, external systems, interfaces — the "big picture" |
|
|
160
|
+
| 4 | **Solution Strategy** | Core architectural decisions, technology choices, key patterns |
|
|
161
|
+
| 5 | **Building Block View** | Static decomposition — modules, components, layers (hierarchical) |
|
|
162
|
+
| 6 | **Runtime View** | Dynamic behaviour — important scenarios, sequences, interactions |
|
|
163
|
+
| 7 | **Deployment View** | Infrastructure, hardware, environments, deployment topology |
|
|
164
|
+
| 8 | **Crosscutting Concepts** | Technical topics that span multiple building blocks (security, logging, error handling, persistence) |
|
|
165
|
+
| 9 | **Architectural Decisions** | Key decisions with rationale (ADRs) |
|
|
166
|
+
| 10 | **Quality Requirements** | Quality tree, quality scenarios, measurable targets |
|
|
167
|
+
| 11 | **Risks and Technical Debt** | Known problems, risks, and their mitigations |
|
|
168
|
+
| 12 | **Glossary** | Domain terms, ubiquitous language |
|
|
169
|
+
|
|
170
|
+
Arc42's strength is its **technology-agnostic** structure — it works equally well for a microservices system, an embedded system, or a data platform.
|
|
171
|
+
|
|
172
|
+
### 3.2 The C4 Model
|
|
173
|
+
|
|
174
|
+
The **C4 model** (created by Simon Brown) provides an "abstraction-first" approach to diagramming software architecture. It uses four levels of zoom:
|
|
175
|
+
|
|
176
|
+
| Level | Name | Shows | Audience |
|
|
177
|
+
|-------|------|-------|----------|
|
|
178
|
+
| 1 | **System Context** | The system as a box, surrounded by users and external systems | Everyone |
|
|
179
|
+
| 2 | **Container** | Major runtime units (applications, databases, message queues) | Architects, developers |
|
|
180
|
+
| 3 | **Component** | Components within a container | Developers |
|
|
181
|
+
| 4 | **Code** | Class/module level (usually auto-generated) | Developers |
|
|
182
|
+
|
|
183
|
+
Plus supplementary diagrams: **Dynamic** (runtime interactions), **Deployment** (infrastructure mapping).
|
|
184
|
+
|
|
185
|
+
### 3.3 Combining arc42 and C4
|
|
186
|
+
|
|
187
|
+
Arc42 and C4 complement each other naturally:
|
|
188
|
+
|
|
189
|
+
| C4 Diagram | Maps to arc42 Section |
|
|
190
|
+
|------------|----------------------|
|
|
191
|
+
| System Context | Section 3: Context and Scope |
|
|
192
|
+
| Container | Section 5: Building Block View (Level 1) |
|
|
193
|
+
| Component | Section 5: Building Block View (Level 2+) |
|
|
194
|
+
| Dynamic | Section 6: Runtime View |
|
|
195
|
+
| Deployment | Section 7: Deployment View |
|
|
196
|
+
|
|
197
|
+
This combination provides both the **structure** (arc42) and the **visual language** (C4) needed for comprehensive documentation.
|
|
198
|
+
|
|
199
|
+
### 3.4 Azure Architecture Center Structure
|
|
200
|
+
|
|
201
|
+
Microsoft's reference architectures follow a consistent template:
|
|
202
|
+
|
|
203
|
+
1. **Architecture overview** — one-paragraph summary
|
|
204
|
+
2. **Architecture diagram** — annotated visual
|
|
205
|
+
3. **Dataflow** — numbered step-by-step walkthrough
|
|
206
|
+
4. **Components** — list of services with links to documentation
|
|
207
|
+
5. **Scenario details** — business context, use cases
|
|
208
|
+
6. **Considerations** — organised by Well-Architected pillars:
|
|
209
|
+
- Reliability
|
|
210
|
+
- Security
|
|
211
|
+
- Cost optimisation
|
|
212
|
+
- Operational excellence
|
|
213
|
+
- Performance efficiency
|
|
214
|
+
7. **Deploy this scenario** — ARM/Bicep templates
|
|
215
|
+
8. **Contributors** — authors and reviewers
|
|
216
|
+
|
|
217
|
+
### 3.5 AWS Reference Architecture Structure
|
|
218
|
+
|
|
219
|
+
AWS reference architectures typically include:
|
|
220
|
+
|
|
221
|
+
1. **Title and one-line description**
|
|
222
|
+
2. **Architecture diagram** with numbered data flows
|
|
223
|
+
3. **Service descriptions** — role of each AWS service
|
|
224
|
+
4. **How it works** — step-by-step data flow narrative
|
|
225
|
+
5. **Well-Architected considerations** — mapped to six pillars
|
|
226
|
+
6. **Implementation** — CDK constructs, CloudFormation templates, or Solution Constructs
|
|
227
|
+
7. **Cost estimate** — using AWS Pricing Calculator
|
|
228
|
+
8. **Related resources** — links to documentation, workshops, blog posts
|
|
229
|
+
|
|
230
|
+
### 3.6 Proposed Unified Template for Reference Architectures
|
|
231
|
+
|
|
232
|
+
Synthesising across all frameworks, a comprehensive reference architecture should include:
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
1. OVERVIEW
|
|
236
|
+
1.1 Purpose and scope
|
|
237
|
+
1.2 Target audience
|
|
238
|
+
1.3 Position on the enterprise continuum (foundation / common / industry / org-specific)
|
|
239
|
+
1.4 Relationship to other reference architectures
|
|
240
|
+
|
|
241
|
+
2. BUSINESS CONTEXT
|
|
242
|
+
2.1 Business drivers and goals
|
|
243
|
+
2.2 Use cases and scenarios
|
|
244
|
+
2.3 Key stakeholders and their concerns
|
|
245
|
+
2.4 Constraints (regulatory, organisational, technical)
|
|
246
|
+
|
|
247
|
+
3. ARCHITECTURE VIEWS
|
|
248
|
+
3.1 Context view (C4 Level 1 — system context)
|
|
249
|
+
3.2 Functional view (C4 Level 2 — containers / building blocks)
|
|
250
|
+
3.3 Component view (C4 Level 3 — internal structure)
|
|
251
|
+
3.4 Data flow view (runtime scenarios, numbered walkthrough)
|
|
252
|
+
3.5 Deployment view (infrastructure topology)
|
|
253
|
+
3.6 Security view (threat model, control mapping)
|
|
254
|
+
|
|
255
|
+
4. CROSSCUTTING CONCERNS
|
|
256
|
+
4.1 Security and identity
|
|
257
|
+
4.2 Observability (logging, monitoring, tracing)
|
|
258
|
+
4.3 Resilience and fault tolerance
|
|
259
|
+
4.4 Scalability and performance
|
|
260
|
+
4.5 Data management and governance
|
|
261
|
+
4.6 Integration patterns
|
|
262
|
+
|
|
263
|
+
5. ARCHITECTURE DECISIONS
|
|
264
|
+
5.1 Key decisions with rationale (ADR format)
|
|
265
|
+
5.2 Technology choices and trade-offs
|
|
266
|
+
5.3 Patterns adopted and why
|
|
267
|
+
5.4 Alternatives considered
|
|
268
|
+
|
|
269
|
+
6. QUALITY ATTRIBUTES
|
|
270
|
+
6.1 Quality attribute requirements (measurable)
|
|
271
|
+
6.2 Quality scenarios
|
|
272
|
+
6.3 SLOs and SLAs
|
|
273
|
+
6.4 Fitness functions for automated validation
|
|
274
|
+
|
|
275
|
+
7. OPERATIONAL MODEL
|
|
276
|
+
7.1 Deployment strategy
|
|
277
|
+
7.2 CI/CD pipeline design
|
|
278
|
+
7.3 Monitoring and alerting
|
|
279
|
+
7.4 Incident response
|
|
280
|
+
7.5 Scaling policies
|
|
281
|
+
7.6 Disaster recovery
|
|
282
|
+
|
|
283
|
+
8. IMPLEMENTATION GUIDANCE
|
|
284
|
+
8.1 Golden path / getting started
|
|
285
|
+
8.2 Infrastructure-as-code templates
|
|
286
|
+
8.3 API specifications
|
|
287
|
+
8.4 Sample code and starter kits
|
|
288
|
+
8.5 Migration path from existing systems
|
|
289
|
+
|
|
290
|
+
9. GOVERNANCE
|
|
291
|
+
9.1 Compliance mapping
|
|
292
|
+
9.2 Architecture review checklist
|
|
293
|
+
9.3 Known risks and technical debt
|
|
294
|
+
9.4 Evolution roadmap
|
|
295
|
+
|
|
296
|
+
10. GLOSSARY AND REFERENCES
|
|
297
|
+
10.1 Domain terms
|
|
298
|
+
10.2 Abbreviations
|
|
299
|
+
10.3 External references and standards
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 4. Quality Criteria for Reference Architectures
|
|
305
|
+
|
|
306
|
+
### 4.1 Fundamental Quality Dimensions
|
|
307
|
+
|
|
308
|
+
Research and industry practice identify several dimensions that distinguish good reference architectures from poor ones:
|
|
309
|
+
|
|
310
|
+
#### Applicability
|
|
311
|
+
Four criteria indicate the applicability of a reference architecture (from academic research on reference architecture evaluation):
|
|
312
|
+
|
|
313
|
+
1. **Range of development pathways** — How many valid design decisions remain? A reference architecture with too few pathways is overly rigid; too many means it's too vague.
|
|
314
|
+
2. **Size of application area** — How broad is the domain it covers? Larger application areas increase reuse potential but risk becoming too generic.
|
|
315
|
+
3. **Availability of standards and implementation guides** — Are there concrete artefacts teams can use?
|
|
316
|
+
4. **Provision of submodels** — Does it provide detailed models for specific aspects (data, security, integration)?
|
|
317
|
+
|
|
318
|
+
#### The Prescriptiveness Spectrum
|
|
319
|
+
|
|
320
|
+
One of the most critical design decisions for a reference architecture is where to sit on the **prescriptiveness spectrum**:
|
|
321
|
+
|
|
322
|
+
| Approach | Characteristics | When to Use |
|
|
323
|
+
|----------|----------------|-------------|
|
|
324
|
+
| **Highly prescriptive** | Specific technologies, exact configurations, ready-to-deploy templates | Organisations seeking standardisation, reducing decision fatigue |
|
|
325
|
+
| **Balanced** | Recommended patterns with defined decision points | Organisations with diverse needs but shared principles |
|
|
326
|
+
| **Flexible / guidance-oriented** | Principles and patterns without technology mandates | Federated organisations, multi-cloud strategies |
|
|
327
|
+
|
|
328
|
+
The hyperscalers tend towards the prescriptive end (since they're promoting their own services), while frameworks like TOGAF and arc42 are deliberately technology-agnostic.
|
|
329
|
+
|
|
330
|
+
### 4.2 Quality Criteria Checklist
|
|
331
|
+
|
|
332
|
+
Drawing from ISO 25010 quality characteristics, TOGAF principles, and cloud provider practices:
|
|
333
|
+
|
|
334
|
+
**Completeness**
|
|
335
|
+
- Covers all relevant architectural views (structural, behavioural, deployment)
|
|
336
|
+
- Addresses all quality attributes important to the domain
|
|
337
|
+
- Includes both "happy path" and failure scenarios
|
|
338
|
+
- Documents decisions AND their rationale
|
|
339
|
+
|
|
340
|
+
**Clarity**
|
|
341
|
+
- Architecture diagrams follow a consistent notation (C4, ArchiMate, UML)
|
|
342
|
+
- Text is written for the stated audience level
|
|
343
|
+
- Jargon is defined in a glossary
|
|
344
|
+
- Data flows are narrated step-by-step
|
|
345
|
+
|
|
346
|
+
**Consistency**
|
|
347
|
+
- Internal consistency — no contradictions between views
|
|
348
|
+
- External consistency — aligns with organisational principles and standards
|
|
349
|
+
- Terminology is used consistently throughout
|
|
350
|
+
|
|
351
|
+
**Currency**
|
|
352
|
+
- Uses current, supported technology versions
|
|
353
|
+
- Reflects current security best practices
|
|
354
|
+
- Aligned with current vendor recommendations
|
|
355
|
+
- Has a clear versioning and update strategy
|
|
356
|
+
|
|
357
|
+
**Actionability**
|
|
358
|
+
- Provides implementation artefacts (IaC templates, API specs, code samples)
|
|
359
|
+
- Includes a clear "getting started" path
|
|
360
|
+
- Offers deployment automation
|
|
361
|
+
- Contains runnable examples or proof-of-concept code
|
|
362
|
+
|
|
363
|
+
**Reusability**
|
|
364
|
+
- Clearly delineates what is fixed vs. what is customisable
|
|
365
|
+
- Uses parameterisation for environment-specific values
|
|
366
|
+
- Separates concerns to allow partial adoption
|
|
367
|
+
- Documents extension points
|
|
368
|
+
|
|
369
|
+
**Operational Readiness**
|
|
370
|
+
- Includes monitoring and alerting guidance
|
|
371
|
+
- Defines SLOs and scaling policies
|
|
372
|
+
- Addresses disaster recovery
|
|
373
|
+
- Provides runbook templates
|
|
374
|
+
|
|
375
|
+
**Evolvability**
|
|
376
|
+
- Architecture decisions are recorded with rationale
|
|
377
|
+
- Known limitations and technical debt are documented
|
|
378
|
+
- An evolution roadmap exists
|
|
379
|
+
- The architecture supports incremental adoption
|
|
380
|
+
|
|
381
|
+
### 4.3 Common Anti-Patterns
|
|
382
|
+
|
|
383
|
+
What makes a **bad** reference architecture:
|
|
384
|
+
|
|
385
|
+
- **Diagram-only architectures** — A box-and-arrow diagram without narrative, decisions, or implementation guidance
|
|
386
|
+
- **Stale blueprints** — Reference architectures that haven't been updated in years and recommend deprecated technologies
|
|
387
|
+
- **Ivory tower designs** — Created by architects who don't build, without input from implementing teams
|
|
388
|
+
- **One-size-fits-all** — No customisation points, no decision framework for when the pattern doesn't fit
|
|
389
|
+
- **Missing the "-ilities"** — Focuses only on functional decomposition without addressing security, performance, resilience, or operability
|
|
390
|
+
- **No golden path** — Describes what to build but not how to get started
|
|
391
|
+
- **Undocumented trade-offs** — Presents one option without explaining what was considered and rejected
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## 5. Assessment Rubrics for Reference Architectures
|
|
396
|
+
|
|
397
|
+
### 5.1 Architecture Review Boards (ARBs)
|
|
398
|
+
|
|
399
|
+
Architecture Review Boards are the primary governance mechanism for assessing reference architectures. TOGAF's Architecture Governance Framework positions the ARB as a key governing component.
|
|
400
|
+
|
|
401
|
+
#### Typical ARB Assessment Criteria
|
|
402
|
+
|
|
403
|
+
Based on AWS, LeanIX, and TOGAF guidance, ARBs typically evaluate:
|
|
404
|
+
|
|
405
|
+
| Category | Assessment Questions |
|
|
406
|
+
|----------|---------------------|
|
|
407
|
+
| **Strategic Alignment** | Does this align with business strategy and architectural principles? |
|
|
408
|
+
| **Standards Compliance** | Does it conform to enterprise standards and regulatory requirements? |
|
|
409
|
+
| **Security** | Are security best practices implemented (least privilege, encryption, threat modelling)? |
|
|
410
|
+
| **Scalability** | Can it handle projected growth? Are scaling mechanisms defined? |
|
|
411
|
+
| **Reliability** | Are HA and fault tolerance measures adequate? |
|
|
412
|
+
| **Cost** | Is the cost model understood and optimised? |
|
|
413
|
+
| **Operational Readiness** | Can operations teams run this? Are monitoring and incident procedures defined? |
|
|
414
|
+
| **Reusability** | Can other teams adopt this pattern? Is it sufficiently parameterised? |
|
|
415
|
+
| **Technical Debt** | What debt is being introduced? Is it documented and planned for? |
|
|
416
|
+
|
|
417
|
+
#### Decision Framework
|
|
418
|
+
|
|
419
|
+
ARBs typically use a structured decision framework:
|
|
420
|
+
|
|
421
|
+
- **Approve** — Architecture meets all criteria
|
|
422
|
+
- **Approve with conditions** — Architecture is acceptable with specific modifications required
|
|
423
|
+
- **Defer** — More information or analysis needed
|
|
424
|
+
- **Reject** — Architecture does not meet minimum criteria
|
|
425
|
+
|
|
426
|
+
Decisions are usually reached through consensus, with a voting mechanism (e.g. 2/3 majority) used in deadlock cases.
|
|
427
|
+
|
|
428
|
+
### 5.2 A Reference Architecture Assessment Rubric
|
|
429
|
+
|
|
430
|
+
No single universally adopted rubric exists, but synthesising from ARB practices, TOGAF, and the Well-Architected frameworks, here is a proposed assessment rubric:
|
|
431
|
+
|
|
432
|
+
#### Scoring: 1 (Poor) — 2 (Developing) — 3 (Adequate) — 4 (Good) — 5 (Excellent)
|
|
433
|
+
|
|
434
|
+
**A. Completeness and Coverage (weight: 20%)**
|
|
435
|
+
|
|
436
|
+
| Criterion | 1 | 3 | 5 |
|
|
437
|
+
|-----------|---|---|---|
|
|
438
|
+
| Architectural views | Single diagram only | Multiple views but gaps | Full coverage: context, functional, deployment, data flow, security |
|
|
439
|
+
| Quality attributes | Not addressed | Some mentioned informally | All relevant attributes with measurable targets |
|
|
440
|
+
| Failure scenarios | Not considered | Basic HA described | Comprehensive failure mode analysis with recovery procedures |
|
|
441
|
+
| Decision rationale | No decisions recorded | Key decisions listed | Full ADRs with context, options, consequences |
|
|
442
|
+
|
|
443
|
+
**B. Clarity and Communication (weight: 15%)**
|
|
444
|
+
|
|
445
|
+
| Criterion | 1 | 3 | 5 |
|
|
446
|
+
|-----------|---|---|---|
|
|
447
|
+
| Diagram quality | Ad-hoc notation, inconsistent | Standard notation, mostly clear | Consistent C4/ArchiMate, all elements labelled, legend provided |
|
|
448
|
+
| Narrative quality | Jargon-heavy, assumes deep context | Readable but uneven | Clear, audience-appropriate, with glossary |
|
|
449
|
+
| Data flow documentation | No flow description | Partial walkthrough | Complete numbered step-by-step narrative |
|
|
450
|
+
|
|
451
|
+
**C. Actionability and Implementation (weight: 25%)**
|
|
452
|
+
|
|
453
|
+
| Criterion | 1 | 3 | 5 |
|
|
454
|
+
|-----------|---|---|---|
|
|
455
|
+
| Getting started | No implementation guidance | Some code samples | Complete golden path with scaffolding templates |
|
|
456
|
+
| IaC templates | None provided | Partial templates | Full deployment automation (Terraform/CDK/Bicep) |
|
|
457
|
+
| API specifications | Informal descriptions | Partial OpenAPI specs | Complete, versioned API contracts |
|
|
458
|
+
| CI/CD guidance | Not addressed | Pipeline described | Pipeline-as-code templates provided |
|
|
459
|
+
|
|
460
|
+
**D. Operational Readiness (weight: 20%)**
|
|
461
|
+
|
|
462
|
+
| Criterion | 1 | 3 | 5 |
|
|
463
|
+
|-----------|---|---|---|
|
|
464
|
+
| Monitoring | Not addressed | Metrics mentioned | Dashboard templates, alerting rules, SLO definitions |
|
|
465
|
+
| Scaling | Not addressed | Manual scaling described | Auto-scaling policies with load testing results |
|
|
466
|
+
| DR/BCP | Not addressed | Backup strategy mentioned | Full DR plan with RTO/RPO, tested runbooks |
|
|
467
|
+
| Security posture | Not addressed | Basic security controls | Threat model, control mapping, compliance evidence |
|
|
468
|
+
|
|
469
|
+
**E. Reusability and Evolvability (weight: 10%)**
|
|
470
|
+
|
|
471
|
+
| Criterion | 1 | 3 | 5 |
|
|
472
|
+
|-----------|---|---|---|
|
|
473
|
+
| Customisation points | Monolithic, no variation | Some parameterisation | Clear extension points, decision framework for variants |
|
|
474
|
+
| Versioning | No version control | Versioned document | Architecture-as-code in Git with change history |
|
|
475
|
+
| Evolution roadmap | Static document | Known limitations listed | Roadmap with planned improvements and migration guidance |
|
|
476
|
+
|
|
477
|
+
**F. Governance and Compliance (weight: 10%)**
|
|
478
|
+
|
|
479
|
+
| Criterion | 1 | 3 | 5 |
|
|
480
|
+
|-----------|---|---|---|
|
|
481
|
+
| Standards alignment | No reference to standards | Mentions relevant standards | Explicit mapping to enterprise principles and industry standards |
|
|
482
|
+
| Compliance | Not addressed | Regulatory requirements listed | Control mapping with evidence collection guidance |
|
|
483
|
+
| Review process | No review mechanism | Periodic manual review | Automated fitness functions with continuous validation |
|
|
484
|
+
|
|
485
|
+
### 5.3 Well-Architected Reviews as Assessment
|
|
486
|
+
|
|
487
|
+
The cloud providers' Well-Architected Reviews serve as de facto assessment rubrics:
|
|
488
|
+
|
|
489
|
+
- **AWS Well-Architected Tool**: Structured questionnaire across six pillars, producing a report with high-risk issues (HRIs) and improvement plan
|
|
490
|
+
- **Azure Well-Architected Review**: Online assessment tool that evaluates workloads against the five pillars
|
|
491
|
+
- **Google Cloud Architecture Review**: Review process aligned to the framework's pillars plus industry-specific perspectives
|
|
492
|
+
|
|
493
|
+
These tools can be repurposed to assess reference architectures by treating the reference architecture as the "workload" being reviewed.
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## 6. Machine-Readable Aspects
|
|
498
|
+
|
|
499
|
+
### 6.1 Architecture as Code (AaC)
|
|
500
|
+
|
|
501
|
+
**Architecture as Code** is the practice of describing, version-controlling, and automating the entire system architecture through machine-readable artefacts. It represents a fundamental shift from architecture-as-documents to architecture-as-code.
|
|
502
|
+
|
|
503
|
+
Core principles:
|
|
504
|
+
|
|
505
|
+
- Architecture definitions are **text files** stored in version control
|
|
506
|
+
- Changes are tracked through **pull requests** and code review
|
|
507
|
+
- Architectural rules are enforced through **automated validation**
|
|
508
|
+
- Diagrams are **generated from models**, not drawn manually
|
|
509
|
+
|
|
510
|
+
### 6.2 Diagram-as-Code Tools
|
|
511
|
+
|
|
512
|
+
Several tools enable machine-readable architecture diagrams:
|
|
513
|
+
|
|
514
|
+
**Structurizr DSL** (recommended for C4 model):
|
|
515
|
+
```
|
|
516
|
+
workspace {
|
|
517
|
+
model {
|
|
518
|
+
user = person "User"
|
|
519
|
+
system = softwareSystem "My System" {
|
|
520
|
+
webapp = container "Web Application" "Serves the UI" "React"
|
|
521
|
+
api = container "API" "Business logic" "Java/Spring Boot"
|
|
522
|
+
db = container "Database" "Stores data" "PostgreSQL"
|
|
523
|
+
}
|
|
524
|
+
user -> webapp "Uses"
|
|
525
|
+
webapp -> api "Calls" "HTTPS/JSON"
|
|
526
|
+
api -> db "Reads/writes" "JDBC"
|
|
527
|
+
}
|
|
528
|
+
views {
|
|
529
|
+
systemContext system "Context" { include * }
|
|
530
|
+
container system "Containers" { include * }
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
Key benefit: **one model, multiple views**. Change the model and all diagrams update automatically.
|
|
536
|
+
|
|
537
|
+
Other diagram-as-code tools include:
|
|
538
|
+
|
|
539
|
+
- **PlantUML** — UML and C4 diagrams from text
|
|
540
|
+
- **Mermaid** — Markdown-native diagrams (widely supported in GitHub, GitLab, Notion)
|
|
541
|
+
- **D2** — Modern diagramming language with auto-layout
|
|
542
|
+
- **Diagrams (Python)** — Cloud architecture diagrams as Python code
|
|
543
|
+
- **Mingrammer Diagrams** — AWS/Azure/GCP specific diagram generation
|
|
544
|
+
|
|
545
|
+
### 6.3 Infrastructure as Code (IaC) as Architecture
|
|
546
|
+
|
|
547
|
+
IaC templates are themselves a form of machine-readable reference architecture:
|
|
548
|
+
|
|
549
|
+
| Tool | Format | Strengths |
|
|
550
|
+
|------|--------|-----------|
|
|
551
|
+
| **Terraform** | HCL | Multi-cloud, large module ecosystem |
|
|
552
|
+
| **AWS CDK** | TypeScript/Python/Java | Type-safe, composable constructs |
|
|
553
|
+
| **Pulumi** | General-purpose languages | Full programming language power |
|
|
554
|
+
| **Azure Bicep** | Domain-specific | Native Azure integration |
|
|
555
|
+
| **Google Cloud Deployment Manager** | YAML/Jinja | Native GCP integration |
|
|
556
|
+
| **Crossplane** | Kubernetes YAML | Infrastructure as Kubernetes resources |
|
|
557
|
+
|
|
558
|
+
**AWS Solutions Constructs** exemplify this: they are CDK libraries that encode Well-Architected reference architecture patterns as deployable code.
|
|
559
|
+
|
|
560
|
+
### 6.4 Architecture Decision Records (ADRs)
|
|
561
|
+
|
|
562
|
+
ADRs capture significant architectural decisions in a structured, version-controlled format. The standard format (from Michael Nygard):
|
|
563
|
+
|
|
564
|
+
```markdown
|
|
565
|
+
# ADR-001: Use PostgreSQL for primary data store
|
|
566
|
+
|
|
567
|
+
## Status
|
|
568
|
+
Accepted
|
|
569
|
+
|
|
570
|
+
## Context
|
|
571
|
+
We need a relational database that supports JSONB for semi-structured data,
|
|
572
|
+
has strong ecosystem support, and is available as a managed service on all
|
|
573
|
+
major cloud providers.
|
|
574
|
+
|
|
575
|
+
## Decision
|
|
576
|
+
We will use PostgreSQL as our primary relational data store.
|
|
577
|
+
|
|
578
|
+
## Consequences
|
|
579
|
+
- Teams have a clear default database choice
|
|
580
|
+
- We can leverage JSONB for flexible schemas
|
|
581
|
+
- We need PostgreSQL expertise on the platform team
|
|
582
|
+
- Applications requiring pure document storage may need a separate decision
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
**Machine-readable ADR formats** are emerging:
|
|
586
|
+
|
|
587
|
+
- **Decision Reasoning Format (DRF)**: A vendor-neutral YAML/JSON format for decisions with explicit reasoning, assumptions, cognitive state, and trade-offs
|
|
588
|
+
- **MADR (Markdown Architectural Decision Records)**: Structured Markdown with YAML front matter
|
|
589
|
+
- **Log4brains**: Tool that manages ADRs as a searchable knowledge base
|
|
590
|
+
|
|
591
|
+
### 6.5 API Specifications
|
|
592
|
+
|
|
593
|
+
Reference architectures increasingly embed machine-readable API contracts:
|
|
594
|
+
|
|
595
|
+
- **OpenAPI / Swagger** — REST API specifications
|
|
596
|
+
- **AsyncAPI** — Event-driven and message-based API specifications
|
|
597
|
+
- **GraphQL SDL** — Schema definition for GraphQL APIs
|
|
598
|
+
- **Protocol Buffers** — gRPC service definitions
|
|
599
|
+
- **JSON Schema** — Data validation contracts
|
|
600
|
+
|
|
601
|
+
These specifications can be used for automated contract testing, documentation generation, and client SDK generation.
|
|
602
|
+
|
|
603
|
+
### 6.6 Fitness Functions for Automated Assessment
|
|
604
|
+
|
|
605
|
+
**Architecture fitness functions** (coined by Neal Ford and colleagues in "Building Evolutionary Architectures") are automated tests that validate architectural characteristics:
|
|
606
|
+
|
|
607
|
+
Types of fitness functions relevant to reference architecture conformance:
|
|
608
|
+
|
|
609
|
+
| Type | Example | Automation |
|
|
610
|
+
|------|---------|-----------|
|
|
611
|
+
| **Dependency rules** | "Service A must not directly depend on Service C's database" | ArchUnit, Dependency-Check |
|
|
612
|
+
| **Performance budgets** | "API response time < 200ms at p99" | Load testing in CI/CD |
|
|
613
|
+
| **Security policies** | "No public S3 buckets, all data encrypted at rest" | OPA/Rego policies, cfn-nag, Checkov |
|
|
614
|
+
| **API conformance** | "All APIs must follow our OpenAPI conventions" | Spectral linting |
|
|
615
|
+
| **Infrastructure compliance** | "All deployments must use approved instance types" | Sentinel (Terraform), AWS Config Rules |
|
|
616
|
+
| **Operational readiness** | "All services must have health checks and readiness probes" | Kubernetes admission controllers |
|
|
617
|
+
|
|
618
|
+
The key insight: fitness functions **shift governance left** — from periodic architecture reviews to continuous, automated validation in the CI/CD pipeline. They turn reference architecture principles into executable policy.
|
|
619
|
+
|
|
620
|
+
### 6.7 Putting It Together: A Machine-Readable Reference Architecture
|
|
621
|
+
|
|
622
|
+
A fully machine-readable reference architecture might be structured as a Git repository:
|
|
623
|
+
|
|
624
|
+
```
|
|
625
|
+
reference-architecture/
|
|
626
|
+
├── README.md # Human-readable overview
|
|
627
|
+
├── docs/
|
|
628
|
+
│ ├── architecture/
|
|
629
|
+
│ │ ├── workspace.dsl # Structurizr C4 model
|
|
630
|
+
│ │ ├── context.md # Context narrative
|
|
631
|
+
│ │ └── decisions/ # ADRs
|
|
632
|
+
│ │ ├── 001-database-choice.md
|
|
633
|
+
│ │ ├── 002-messaging-pattern.md
|
|
634
|
+
│ │ └── ...
|
|
635
|
+
│ ├── runbooks/ # Operational runbooks
|
|
636
|
+
│ └── quality/
|
|
637
|
+
│ ├── quality-scenarios.yaml # Machine-readable quality requirements
|
|
638
|
+
│ └── slo-definitions.yaml # SLO definitions
|
|
639
|
+
├── infrastructure/
|
|
640
|
+
│ ├── terraform/ # IaC templates
|
|
641
|
+
│ │ ├── modules/
|
|
642
|
+
│ │ └── environments/
|
|
643
|
+
│ └── kubernetes/ # K8s manifests / Helm charts
|
|
644
|
+
├── api/
|
|
645
|
+
│ ├── openapi.yaml # API specification
|
|
646
|
+
│ └── asyncapi.yaml # Event specification
|
|
647
|
+
├── templates/
|
|
648
|
+
│ ├── backstage-template.yaml # Backstage scaffolder template
|
|
649
|
+
│ └── cookiecutter/ # Project scaffolding
|
|
650
|
+
├── fitness-functions/
|
|
651
|
+
│ ├── arch-rules/ # ArchUnit / dependency rules
|
|
652
|
+
│ ├── security-policies/ # OPA/Rego policies
|
|
653
|
+
│ ├── performance-budgets/ # Load test definitions
|
|
654
|
+
│ └── compliance-checks/ # Regulatory compliance checks
|
|
655
|
+
├── examples/
|
|
656
|
+
│ ├── sample-service/ # Reference implementation
|
|
657
|
+
│ └── integration-tests/ # End-to-end tests
|
|
658
|
+
└── CHANGELOG.md # Version history
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
This structure enables:
|
|
662
|
+
- **Automated diagram generation** from the Structurizr DSL
|
|
663
|
+
- **One-click deployment** via IaC templates
|
|
664
|
+
- **Continuous compliance** via fitness functions in CI/CD
|
|
665
|
+
- **Self-service adoption** via Backstage templates
|
|
666
|
+
- **Version-controlled evolution** via Git history and ADRs
|
|
667
|
+
- **Machine-parseable quality requirements** for automated assessment
|
|
668
|
+
|
|
669
|
+
---
|
|
670
|
+
|
|
671
|
+
## 7. Synthesis: Principles for Excellent Reference Architectures
|
|
672
|
+
|
|
673
|
+
Across all the research, several overarching principles emerge:
|
|
674
|
+
|
|
675
|
+
1. **Reference architectures are products, not projects.** They need ongoing investment, a roadmap, feedback loops, and versioning — just like the software they describe.
|
|
676
|
+
|
|
677
|
+
2. **The best reference architectures are executable.** A reference architecture that exists only as a PDF or wiki page will drift from reality. The gold standard is architecture-as-code that can be deployed, tested, and validated automatically.
|
|
678
|
+
|
|
679
|
+
3. **Opinions are a feature, not a bug.** The value of a reference architecture is proportional to the number of decisions it makes for you. Vague guidance that says "choose an appropriate database" is less useful than specific guidance that says "use PostgreSQL for OLTP workloads with these configurations."
|
|
680
|
+
|
|
681
|
+
4. **Multiple audiences require multiple layers.** A single 50-page document doesn't serve executives and developers equally. Layer the architecture: context for executives, component models for architects, deployment templates for developers, runbooks for operations.
|
|
682
|
+
|
|
683
|
+
5. **Golden paths operationalise reference architectures.** A reference architecture describes what to build; a golden path makes it easy to build it. The most effective organisations pair every reference architecture with a corresponding Backstage template or scaffolding tool.
|
|
684
|
+
|
|
685
|
+
6. **Fitness functions close the governance loop.** Without automated validation, reference architecture conformance degrades over time. Fitness functions turn architectural principles into executable tests.
|
|
686
|
+
|
|
687
|
+
7. **Document decisions, not just designs.** The rationale behind architectural choices is often more valuable than the choices themselves, because it enables future teams to understand when the architecture should evolve.
|
|
688
|
+
|
|
689
|
+
---
|
|
690
|
+
|
|
691
|
+
## Sources
|
|
692
|
+
|
|
693
|
+
### Cloud Provider Reference Architectures
|
|
694
|
+
- [AWS Architecture Center](https://aws.amazon.com/architecture/)
|
|
695
|
+
- [AWS Reference Architecture Diagrams](https://aws.amazon.com/architecture/reference-architecture-diagrams/)
|
|
696
|
+
- [AWS Solutions Constructs](https://aws.amazon.com/blogs/aws/aws-solutions-constructs-a-library-of-architecture-patterns-for-the-aws-cdk/)
|
|
697
|
+
- [AWS Well-Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)
|
|
698
|
+
- [Azure Architecture Center](https://learn.microsoft.com/en-us/azure/architecture/)
|
|
699
|
+
- [Azure Best Practices](https://learn.microsoft.com/en-us/azure/architecture/best-practices/index-best-practices)
|
|
700
|
+
- [Google Cloud Architecture Center](https://docs.cloud.google.com/architecture)
|
|
701
|
+
- [Google Cloud Well-Architected Framework](https://docs.cloud.google.com/architecture/framework)
|
|
702
|
+
|
|
703
|
+
### TOGAF and Enterprise Architecture
|
|
704
|
+
- [TOGAF Architecture Principles](https://pubs.opengroup.org/architecture/togaf9-doc/arch/chap20.html)
|
|
705
|
+
- [TOGAF Enterprise Continuum](https://pubs.opengroup.org/architecture/togaf9-doc/arch/chap35.html)
|
|
706
|
+
- [TOGAF Architecture Review Board](https://pubs.opengroup.org/architecture/togaf8-doc/arch/chap23.html)
|
|
707
|
+
- [What is a Reference Architecture? — Conexiam](https://conexiam.com/what-is-a-reference-architecture/)
|
|
708
|
+
|
|
709
|
+
### Golden Paths and Platform Engineering
|
|
710
|
+
- [How We Use Golden Paths to Solve Fragmentation — Spotify Engineering](https://engineering.atspotify.com/2020/08/how-we-use-golden-paths-to-solve-fragmentation-in-our-software-ecosystem)
|
|
711
|
+
- [How Spotify Leverages Paved Paths — InfoQ](https://www.infoq.com/news/2021/03/spotify-paved-paths/)
|
|
712
|
+
- [What is a Golden Path? — Red Hat](https://www.redhat.com/en/topics/platform-engineering/golden-paths)
|
|
713
|
+
- [Designing Golden Paths — Red Hat](https://www.redhat.com/en/blog/designing-golden-paths)
|
|
714
|
+
- [Engineering Platforms and Golden Paths — ThoughtWorks](https://www.thoughtworks.com/en-us/insights/podcasts/technology-podcasts/engineering-platforms-golden-paths-building-better-developer-experiences)
|
|
715
|
+
- [Platform Engineering: Rebuilding the Core — ThoughtWorks](https://www.thoughtworks.com/insights/blog/platforms/platform-engineering--rebuilding-the-core-for-developer-effectiv)
|
|
716
|
+
- [Backstage Software Templates — Spotify](https://backstage.spotify.com/learn/onboarding-software-to-backstage/setting-up-software-templates/11-spotify-templates/)
|
|
717
|
+
- [How to Build Golden Paths Developers Will Actually Use — Jellyfish](https://jellyfish.co/library/platform-engineering/golden-paths/)
|
|
718
|
+
- [Golden Paths in Platform Engineering — Cyclops](https://cyclops-ui.com/blog/2025/04/24/golden-paths/)
|
|
719
|
+
|
|
720
|
+
### Architecture Documentation Templates
|
|
721
|
+
- [arc42 Template Overview](https://arc42.org/overview)
|
|
722
|
+
- [arc42 Documentation](https://docs.arc42.org/home/)
|
|
723
|
+
- [arc42 + C4 Example — bitsmuggler](https://bitsmuggler.github.io/arc42-c4-software-architecture-documentation-example/)
|
|
724
|
+
- [Effective Architecture Documentation with arc42 and C4 — Torsten Mosis](https://www.linkedin.com/pulse/effective-architecture-documentation-arc42-c4-torsten-mosis)
|
|
725
|
+
- [The Ultimate Guide to Software Architecture Documentation](https://www.workingsoftware.dev/software-architecture-documentation-the-ultimate-guide/)
|
|
726
|
+
|
|
727
|
+
### Architecture as Code and Machine-Readable Formats
|
|
728
|
+
- [Architecture as Code — aac.muthub.org](https://aac.muthub.org/)
|
|
729
|
+
- [Introduction to Architecture as Code — aac.geon.se](https://aac.geon.se/01_introduction/)
|
|
730
|
+
- [Getting Started with Architecture as Code — TechTarget](https://www.techtarget.com/searchapparchitecture/tip/Getting-started-with-architecture-as-code)
|
|
731
|
+
- [Structurizr](https://structurizr.com/)
|
|
732
|
+
- [Structurizr DSL](https://docs.structurizr.com/dsl)
|
|
733
|
+
- [Architecture Decision Records — Joel Parker Henderson](https://github.com/joelparkerhenderson/architecture-decision-record)
|
|
734
|
+
|
|
735
|
+
### Fitness Functions and Automated Governance
|
|
736
|
+
- [Fitness Functions — Continuous Architecture](https://continuous-architecture.org/practices/fitness-functions/)
|
|
737
|
+
- [Fitness Functions for Your Architecture — InfoQ](https://www.infoq.com/articles/fitness-functions-architecture/)
|
|
738
|
+
- [Fitness Functions — ThoughtWorks](https://www.thoughtworks.com/insights/decoder/f/fitness-functions)
|
|
739
|
+
- [Automated Architecture Compliance Using Fitness Functions — LinkedIn](https://www.linkedin.com/pulse/automated-architecture-compliance-assessments-leveraging-bayan)
|
|
740
|
+
- [Governing Data Products Using Fitness Functions — Martin Fowler](https://martinfowler.com/articles/fitness-functions-data-products.html)
|
|
741
|
+
|
|
742
|
+
### Architecture Review and Governance
|
|
743
|
+
- [Build and Operate an Effective ARB — AWS Architecture Blog](https://aws.amazon.com/blogs/architecture/build-and-operate-an-effective-architecture-review-board/)
|
|
744
|
+
- [Architecture Review Board — LeanIX](https://www.leanix.net/en/wiki/ea/architecture-review-board)
|
|
745
|
+
- [Architecture Review Board Checklist — Hava](https://www.hava.io/blog/architecture-review-board-checklist)
|
|
746
|
+
- [What Is an Enterprise Architecture Review Board? — Conexiam](https://conexiam.com/what-is-an-enterprise-architecture-review-board/)
|
|
747
|
+
|
|
748
|
+
### Quality and Evaluation
|
|
749
|
+
- [Reference Architecture — ScienceDirect](https://www.sciencedirect.com/topics/computer-science/reference-architecture)
|
|
750
|
+
- [arc42 Quality Requirements (ISO 25010)](https://github.com/arc42/quality-requirements/blob/main/doc/iso-25010-definitions.txt)
|
|
751
|
+
- [Software Architecture Quality Attributes — Syndicode](https://syndicode.com/blog/12-software-architecture-quality-attributes/)
|