Deliverables

The curriculum covers what an architect should know. This covers what an architect actually hands over: 55 artifacts, each with a worked example, a note on when it is worth producing, who reads it, and the ways it usually goes wrong. Filter by the artifact's type, the kind of engagement that calls for it, the stack or industry it is drawn against, or the audience it is written for.

Identify the deliverable → 42 diagrams, shown one at a time with the answer withheld. Nothing to submit.

19 of 55 deliverables shown.

flowchart TB
  subgraph sell["Sell"]
    direction LR
    s1["CRM<br/><i>SaaS · Sales</i>"]
    s2["Quoting<br/><i>bespoke · Sales</i>"]
    s3["Pricing A<br/><i>legacy · Sales</i>"]
    s4["Pricing B<br/><i>legacy · Regional</i>"]
  end
  subgraph fulfil["Fulfil"]
    direction LR
    f1["Order Mgmt<br/><i>bespoke · Ops</i>"]
    f2["WMS<br/><i>COTS · Ops</i>"]
    f3["Carrier Portal<br/><i>SaaS · Ops</i>"]
  end
  subgraph support["Support"]
    direction LR
    b1["ERP<br/><i>COTS · Finance</i>"]
    b2["Billing<br/><i>mainframe · Finance</i>"]
    b3["HRIS<br/><i>SaaS · HR</i>"]
    b4["Expenses<br/><i>SaaS · unowned</i>"]
  end
  s3 -.->|"same capability"| s4
Structural View

Application Landscape Diagram

Every application in the estate placed against the business areas it serves, so duplication and orphans become visible.

flowchart LR
  sales["Sales<br/><i>quote, opportunity, discount</i>"]
  orders["Ordering<br/><i>order, line, fulfilment</i>"]
  billing["Billing<br/><i>invoice, credit note, dunning</i>"]
  ship["Shipping<br/><i>consignment, manifest</i>"]
  legacy["Legacy Mainframe<br/><i>account master</i>"]

  sales -->|"Customer / Supplier"| orders
  orders -->|"Customer / Supplier"| billing
  orders -->|"Published Language"| ship
  legacy -->|"Anti-Corruption Layer"| orders
  billing -.->|"Shared Kernel — party identity"| sales
Structural View

Bounded Context Map

The domain model's fault lines — which parts of the business have their own language, and what kind of relationship each pair of them has.

flowchart TB
  subgraph core["Customer-Facing"]
    direction LR
    c1["Customer<br/>Management"]
    c2["Product &<br/>Catalogue"]
    c3["Order<br/>Capture"]
    c4["Fulfilment"]
  end
  subgraph enable["Enabling"]
    direction LR
    e1["Pricing &<br/>Promotion"]
    e2["Inventory<br/>Management"]
    e3["Payments &<br/>Settlement"]
    e4["Returns &<br/>Claims"]
  end
  subgraph support["Supporting"]
    direction LR
    s1["Finance &<br/>Accounting"]
    s2["Human<br/>Resources"]
    s3["Procurement"]
    s4["Risk &<br/>Compliance"]
  end
Structural View

Business Capability Map

What the business is able to do, arranged as a stable nested hierarchy of abilities with no processes, systems or org units on it.

Capability Mapping Discovery
flowchart TB
  gw["HTTP Gateway<br/><i>inbound</i>"]
  subgraph svc["Order API — inside the container"]
    direction TB
    ctrl["Order Controller<br/><i>validation, mapping</i>"]
    app["Order Application Service<br/><i>use cases, transactions</i>"]
    dom["Order Domain Model<br/><i>invariants, state rules</i>"]
    repo["Order Repository<br/><i>persistence port</i>"]
    pay["Payment Client<br/><i>anti-corruption adapter</i>"]
    out["Outbox Publisher"]
  end
  db[("PostgreSQL")]
  ext["Payment Provider"]
  bus[["Kafka"]]

  gw --> ctrl --> app
  app --> dom
  app --> repo --> db
  app --> pay --> ext
  app --> out --> db
  out -.->|"relay reads outbox"| bus
Structural View

Component Diagram

The inside of one runnable unit — its major code-level groupings, their responsibilities and what each one talks to.

C4 Model Design
flowchart TB
  cust(["Customer"])
  subgraph boundary["Order Management"]
    direction TB
    web["Web Application<br/><i>Next.js</i>"]
    api["Order API<br/><i>Java / Spring Boot</i>"]
    worker["Fulfilment Worker<br/><i>Java / Spring Boot</i>"]
    db[("Order Store<br/><i>PostgreSQL</i>")]
    queue[["Order Events<br/><i>Kafka</i>"]]
    cache[("Session Cache<br/><i>Redis</i>")]
  end
  pay["Payment Gateway"]

  cust -->|"HTTPS"| web
  web -->|"JSON over HTTPS"| api
  api -->|"reads and writes"| db
  api -->|"reads and writes"| cache
  api -->|"publishes"| queue
  queue -->|"consumes"| worker
  worker -->|"reads and writes"| db
  worker -->|"HTTPS"| pay
Structural View

Container Diagram

One level inside the system boundary — the separately deployable and runnable pieces, each named with the technology it is built on.

C4 Model Design
flowchart LR
  crm["CRM"]
  oms["Order Mgmt"]
  erp["ERP"]
  wms["WMS"]
  bill["Billing<br/><i>mainframe</i>"]
  dw[("Warehouse")]
  ptnr["Partner"]

  crm -->|"I-01 · REST · on demand"| oms
  oms -->|"I-02 · SFTP CSV · nightly"| erp
  oms -->|"I-03 · MQ · near real time"| wms
  wms -->|"I-04 · REST · on demand"| oms
  erp -->|"I-05 · flat file · nightly"| bill
  bill -->|"I-06 · DB link · nightly"| dw
  oms -->|"I-07 · CDC · continuous"| dw
  ptnr -->|"I-08 · AS2 EDI · hourly"| oms
  oms -->|"I-09 · AS2 EDI · hourly"| ptnr
Structural View

Integration Landscape Diagram

Every interface between systems, with its mechanism, direction, frequency and owner — the artifact that tells you what a migration will actually break.

flowchart TB
  cust(["Customer"])
  agent(["Support Agent"])
  sys["Order Management<br/>the system being described"]
  pay["Payment Gateway<br/>external SaaS"]
  erp["ERP<br/>existing on-premises"]
  mail["Email Provider<br/>external SaaS"]
  crm["CRM<br/>external SaaS"]

  cust -->|"places and tracks orders"| sys
  agent -->|"amends and refunds orders"| sys
  sys -->|"authorises and captures"| pay
  sys -->|"posts financial documents"| erp
  sys -->|"sends confirmations"| mail
  sys -->|"reads account and entitlement"| crm
Structural View

System Context Diagram

The single box of your system surrounded by the people and external systems it talks to, and nothing about how it is built inside.

Context Diagrams Discovery
flowchart LR
  s1[("core_banking.accounts<br/><i>source</i>")]
  s2[("payments.transactions<br/><i>source</i>")]
  s3[("crm.customer<br/><i>source</i>")]

  j1{{"job: cdc_ingest<br/><i>hourly</i>"}}
  j2{{"job: conform_party<br/><i>daily 02:00</i>"}}
  j3{{"job: build_balances<br/><i>daily 03:15</i>"}}
  j4{{"job: reg_extract<br/><i>monthly</i>"}}

  r1[("raw.accounts")]
  r2[("raw.transactions")]
  c1[("clean.party")]
  c2[("clean.balance_daily")]
  o1[("report.capital_adequacy")]
  o2["Dashboard:<br/>Treasury Daily"]

  s1 --> j1 --> r1
  s2 --> j1 --> r2
  s3 --> j2
  r1 --> j2 --> c1
  r1 --> j3
  r2 --> j3 --> c2
  c1 --> j3
  c2 --> j4 --> o1
  c2 --> o2
Data View

Data Lineage Graph

Which dataset was derived from which, through what job — the artifact you produce when someone asks where a number came from.

erDiagram
  CUSTOMER ||--o{ ORDER : places
  CUSTOMER ||--o{ ADDRESS : has
  ORDER ||--|{ ORDER_LINE : contains
  ORDER }o--|| ADDRESS : "ships to"
  ORDER ||--o| PAYMENT : "settled by"
  PRODUCT ||--o{ ORDER_LINE : "appears in"
  PRODUCT }o--|| CATEGORY : "belongs to"

  CUSTOMER {
    uuid id PK
    string email UK
    string status
    timestamp created_at
  }
  ORDER {
    uuid id PK
    uuid customer_id FK
    uuid ship_to_id FK
    string status
    numeric total_minor
    string currency
  }
  ORDER_LINE {
    uuid id PK
    uuid order_id FK
    uuid product_id FK
    int quantity
    numeric unit_price_minor
  }
  PAYMENT {
    uuid id PK
    uuid order_id FK
    string provider_ref UK
    string state
  }
Data View

Entity Relationship Diagram

Entities, their attributes and the cardinality between them — where the notation on the end of each line is the actual content.

flowchart TB
  root["Organisation Root<br/><i>policy: deny unapproved regions</i>"]

  subgraph plat["Platform"]
    direction TB
    ident["Identity<br/><i>directory, privileged access</i>"]
    conn["Connectivity<br/><i>hub VNet/VPC, firewall, DNS, VPN</i>"]
    mgmt["Management<br/><i>logs, backup, monitoring</i>"]
  end

  subgraph land["Landing Zones"]
    direction TB
    subgraph corp["Corporate"]
      p1["Prod A<br/><i>spoke</i>"]
      n1["Non-Prod A<br/><i>spoke</i>"]
    end
    subgraph online["Internet-Facing"]
      p2["Prod B<br/><i>spoke</i>"]
      n2["Non-Prod B<br/><i>spoke</i>"]
    end
  end

  sandbox["Sandbox<br/><i>spend cap, no connectivity, auto-expire</i>"]
  decom["Decommissioned<br/><i>deny all</i>"]

  root --> plat
  root --> land
  root --> sandbox
  root --> decom
  conn --- p1
  conn --- n1
  conn --- p2
  conn --- n2
  mgmt -.->|"diagnostics forwarded"| land
  ident -.->|"roles and groups"| land
Deployment & Infrastructure View

Cloud Landing Zone Diagram

The account, network, identity and policy scaffolding every future workload will be dropped into, drawn before the first workload exists.

Landing Zones Design
gantt
  title Target state — 18 months
  dateFormat YYYY-MM-DD
  axisFormat %b %y

  section Foundation
  Landing zone and connectivity      :done,   f1, 2026-01-01, 60d
  Identity federation                :done,   f2, after f1, 45d
  Observability baseline             :active, f3, after f1, 75d

  section Decouple
  Strangler facade at edge           :active, d1, 2026-03-15, 90d
  Extract order domain               :        d2, after d1, 120d
  Extract pricing domain             :        d3, after d2, 90d
  Retire shared order database       :crit,   d4, after d3, 60d

  section Data
  Ingest to raw zone                 :        a1, 2026-04-01, 75d
  Conformed customer entity          :        a2, after a1, 90d
  Retire nightly extract jobs        :        a3, after a2, 45d

  section Resilience
  Multi-zone for tier 0              :        r1, 2026-06-01, 60d
  Automated failover rehearsal       :        r2, after r1, 45d
  Second region for tier 0           :crit,   r3, after r2, 90d
Planning Artifact

Architecture Roadmap

The sequence of architectural change over time, grouped by theme, with dependencies visible and each bar tied to an outcome rather than a technology.

flowchart TB
  t1["T-7d · Dry run in staging<br/><i>full rehearsal, timed</i><br/>owner: Delivery"]
  t2["T-1d · Freeze changes · verify backups<br/>confirm rota and bridge<br/>owner: Ops"]
  t3["T-0 00:00 · Enable read-only on legacy<br/>owner: Ops"]
  t4["T-0 00:15 · Final delta migration<br/><i>est 90 min · checkpoint at 60</i><br/>owner: Data"]
  t5["T-0 01:45 · Reconcile counts + checksums<br/>owner: Data"]
  g1{"T-0 02:15 · GO / NO-GO<br/><i>criteria: 100% row match,<br/>0 critical defects, all owners present</i>"}
  t6["T-0 02:30 · Repoint DNS + feature flag<br/><i>TTL pre-lowered to 60s</i><br/>owner: Platform"]
  t7["T-0 02:45 · Smoke suite + 10 manual journeys<br/>owner: QA"]
  g2{"T-0 03:30 · Accept or roll back"}
  t8["T-0 03:30 · Open to 10% traffic<br/>owner: Platform"]
  t9["T-0 06:00 · 100% traffic<br/>owner: Platform"]
  t10["T+24h · Hypercare ends<br/>legacy kept read-only 30d"]
  rb(["ROLLBACK · revert DNS<br/>re-enable legacy writes<br/><i>est 20 min</i>"])
  pnr["POINT OF NO RETURN<br/><i>after first write to new system<br/>rollback needs reverse migration</i>"]

  t1 --> t2 --> t3 --> t4 --> t5 --> g1
  g1 -->|"no-go"| rb
  g1 -->|"go"| t6 --> t7 --> g2
  g2 -->|"roll back"| rb
  g2 -->|"accept"| t8 --> t9 --> t10
  t8 -.-> pnr
Planning Artifact

Cutover Plan

The hour-by-hour sequence of go-live, with owners, checkpoints, the rollback decision point and the moment rollback stops being possible.

flowchart LR
  subgraph w0["Wave 0 — Foundation"]
    direction TB
    f1["Landing zone"]
    f2["Connectivity + DNS"]
    f3["Identity federation"]
    f4["Observability + backup"]
  end

  subgraph w1["Wave 1 — Prove it (6 apps)"]
    direction TB
    a1["Internal wiki<br/><i>rehost</i>"]
    a2["Reporting portal<br/><i>rehost</i>"]
    a3["Batch scheduler<br/><i>replatform</i>"]
  end

  subgraph w2["Wave 2 — Bulk (34 apps)"]
    direction TB
    b1["Departmental apps<br/><i>rehost ×26</i>"]
    b2["Shared services<br/><i>replatform ×8</i>"]
  end

  subgraph w3["Wave 3 — Hard cases (9 apps)"]
    direction TB
    c1["Order management<br/><i>refactor</i>"]
    c2["Data warehouse<br/><i>replatform</i>"]
    c3["Partner gateway<br/><i>refactor</i>"]
  end

  subgraph w4["Wave 4 — Exit"]
    direction TB
    d1["Mainframe interfaces<br/><i>replace</i>"]
    d2["Data centre exit<br/><i>contract ends Q3</i>"]
  end

  w0 -->|"platform accepted<br/>by security + ops"| w1
  w1 -->|"runbook proven<br/>rollback rehearsed"| w2
  w2 -->|"shared services live<br/>latency measured"| w3
  w3 -->|"last dependency<br/>severed"| w4
Planning Artifact

Migration Wave Plan

Which applications move in which batch, in what order, and what the dependency between batches actually is.

flowchart TB
  subgraph l1["Capabilities delivered"]
    direction LR
    c1["Product<br/>engineering"] --- c2["Data &<br/>analytics"] --- c3["Platform &<br/>infrastructure"] --- c4["Security &<br/>risk"]
  end
  subgraph l2["Organisation"]
    direction LR
    o1["Stream-aligned teams<br/><i>×9 · own build and run</i>"] --- o2["Platform team<br/><i>×1 · paved road</i>"] --- o3["Enabling team<br/><i>×1 · coaching</i>"] --- o4["Architecture chapter<br/><i>federated</i>"]
  end
  subgraph l3["Ways of working"]
    direction LR
    p1["Product-funded<br/><i>not project</i>"] --- p2["You build it<br/>you run it"] --- p3["Continuous<br/>delivery"] --- p4["Design authority<br/><i>advisory + gates</i>"]
  end
  subgraph l4["Governance"]
    direction LR
    g1["ARB<br/><i>off-radar only</i>"] --- g2["Tech radar<br/><i>quarterly</i>"] --- g3["Automated<br/>compliance"] --- g4["Exception<br/>register"]
  end
  subgraph l5["People"]
    direction LR
    s1["Skills gaps<br/><i>SRE ×6 · data eng ×4</i>"] --- s2["Sourcing<br/><i>hire 6 · reskill 4</i>"] --- s3["Career paths<br/><i>IC track added</i>"]
  end
  l1 --> l2 --> l3 --> l4 --> l5
Planning Artifact

Target Operating Model

How the organisation will be arranged to run the new architecture — capabilities, teams, processes, governance and skills, not just the systems.

Operating Models Discovery
quadrantChart
  title Business value against technical health
  x-axis "Poor technical health" --> "Good technical health"
  y-axis "Low business value" --> "High business value"
  quadrant-1 Invest
  quadrant-2 Migrate or re-engineer
  quadrant-3 Eliminate
  quadrant-4 Tolerate
  "Order management": [0.28, 0.92]
  "Payment gateway": [0.81, 0.95]
  "Customer portal": [0.74, 0.78]
  "Pricing engine": [0.22, 0.84]
  "Mainframe billing": [0.14, 0.88]
  "Legacy CRM": [0.19, 0.34]
  "Reporting portal": [0.31, 0.26]
  "Expenses tool": [0.68, 0.22]
  "Intranet wiki": [0.72, 0.18]
  "Partner gateway": [0.44, 0.66]
Analysis Artifact

Application Portfolio Heat Map

Every application placed on business value against technical health, so that invest, tolerate, migrate and eliminate become positions rather than opinions.