Capability·Driven

A methodology for architecture

The capability is the unit of decomposition.

Capability-Driven Design decomposes a system not by team, technology, or service, but by capability — a mandate-backed business function that owns its data, exposes a curated API to the channels that call it, and speaks to its peers only through events. Everything else is derived from that one commitment.

01 — Philosophy

What a capability is, and why it is primary

A capability is not a service, a team, or a database. It is a business function the organisation is mandated to hold — and it is the primary unit around which the whole architecture is organised.

A capability is a mandate-backed business function — the primary unit of architectural decomposition.
Owns its data

A capability owns one or more databases or schemas, invisible to every other capability. No shared stores, no shared entities, no reaching into another capability's persistence.

Curated boundary

It exposes a single curated REST API for channels to call, and publishes events on a shared bus for peers to consume. You share contracts, never implementations.

Stable over decades

Capabilities change only when the mandate changes. Technology is derived from the capability's requirements — never the reverse.

Sized to a context window

A capability is sized to fit an AI agent's context window. This is the primary decomposition constraint — small enough for one agent to hold whole.

Mandate before market

Every capability is researched against its competitive landscape and regulatory horizon before it is drafted. A list derived from the org chart produces a shallow architecture.

Headless by design

The method produces a headless system specification. Channel UIs sit outside the system boundary and consume capability APIs — a separate development concern.

Journey · Apply for a loan Journey · Send a payment
Two banking journeys as vertical slices through five horizontal capabilities Five stacked capability lanes — identity, accounts, payments, lending, notifications — each with services and its own database. A journey column on the left cycles between apply for a loan in indigo (touching identity, accounts and lending) and send a payment in teal (touching accounts, payments and notifications); each sends a pulse down its length and lights only the capabilities it touches. Identity Accounts Payments Lending Notifications
A journey is a vertical slice through horizontal capabilities — each owning its own data. Different journeys touch different capabilities.
02 — The shape of a capability

Every capability carries a six-part bundle

A capability file is not a paragraph of description. It is a structured bundle that forces the questions of mandate, competition, regulation, and rationale to be answered before a line is built.

1

Mandate

The statutes, regulations, policies, charters, or strategic decisions that explain why the organisation holds this capability. At least one source, always.

2

Competitive landscape

Where the organisation sits relative to others offering the same capability: table stakes, differentiators, disruptors, unbundling, rebundling, switching drivers.

3

Regulatory horizon

What is currently in force, what is coming in the next two to three years, and which enforcement signals matter.

4

Build-vs-buy

Which elements must be built in-house and which should be bought from vendors — an explicit position, not an accident of tooling.

5

Sub-capabilities

The bounded areas of responsibility that compose the capability, each carrying its own promotion test.

6

Design decisions

Architectural choices with rationale, alternatives considered, and why those alternatives were rejected. No silent deviation.

Revenue model is intentionally not part of the bundle. The capability file describes what the capability is; commercial analysis is a separate concern.

03 — The promotion test

When does a sub-capability become a capability?

Every sub-capability is evaluated against four boolean criteria. The count of trues decides whether it stands on its own — with a documented override the only escape hatch.

1

Distinct participants

Does it involve actors absent from the parent's other sub-capabilities?

2

Separate regulation

Is it governed by a materially distinct body of rules?

3

Distinct lifecycle

Does it have phases of operation that appear nowhere else?

4

Independent scale

Do its demand drivers vary independently of the parent?

The prima facie rule. Each criterion is a boolean; criteria_met is the count of trues. If three or more are true, promote the sub-capability to a standalone capability. If fewer, retain it.

Overrides are permitted — a 3-of-4 may be retained, a 2-of-4 may be promoted — but the parent capability's design decisions must record the reasoning. No silent deviation.

04 — The invariants

The rules the meta-model enforces

These are not style guidelines. They are structural invariants the model checks — the boundaries that keep capabilities independent and the system composable.

Channels talk to capabilities via REST

Every capability publishes an OpenAPI spec. Customer, partner, and external systems reach it only through that contract.

Capabilities talk to each other via events — never REST

Every capability publishes an AsyncAPI spec of the events it emits on the shared bus. Peers subscribe; they do not call the REST API.

Every service has both contracts

Each service inside a capability publishes its own OpenAPI spec for intra-capability calls and an AsyncAPI spec for the events it publishes and consumes.

No shared sub-capabilities

Every sub-capability belongs to exactly one parent. If two capabilities seem to need the same one, either promote it or accept they solve different problems that merely sound alike.

No shared databases, entities, or codebases

If capability A needs data owned by B, A subscribes to B's events. Share contracts, not implementations.

DS

Data stores are capability-scoped and first-class

Every DS-XXX belongs to one capability. Every entity lives in exactly one store, whose data classification equals or exceeds every entity it holds.

ENT

Entities are capability-scoped, not journey-scoped

The data model lives with the capability that owns it. Journeys reference entities by ID; they do not define them.

NFR

NFRs are journey-scoped; SLAs compose

End-to-end latency and regulatory SLAs are journey-scoped. Per-service SLAs live on the technical-service spec and compose into the journey target.

SEQ

Sequence diagrams are journey-phase-scoped

A journey initiates many sequences, each attached to a phase. There are no capability-level or service-level sequence diagrams.

The four valid communication paths

Everything a capability can legitimately do to reach the outside world reduces to these.

Channel → REST

Inbound requests

Channels and external consumers call the capability's published OpenAPI contract.

Cap ⚡ Event

Cross-capability

Capabilities emit and subscribe to events on the shared bus — the only path between them.

Svc → REST

Intra-capability

Services within one capability call each other over their own OpenAPI specs.

Svc ⚡ Event

Intra-capability async

Services publish and consume events via their own AsyncAPI specs on the bus.

05 — Principal artifacts

Eighteen schemas, one substrate

The meta-model is a sector-neutral set of JSON Schemas. A sector pack supplies concrete content that validates against them. Everything below is a first-class, versioned artifact — grouped here by the scope that owns it.

Capability-scoped — owned by the capability

capabilityA capability file — the six-part bundle.
sub-capabilityA bounded area within one capability; defines the promotion test.
data-modelThe entities a capability owns.
data-storeA persistence boundary; every entity is stored in exactly one.
service-boundariesThe services composing a capability.
event-catalogueThe events a capability's services publish.
eventA single event on the shared bus.
governanceThe governance rules applicable to a capability.

Journey-scoped — owned by the journey

journey-inventoryThe flat, prioritised list of every journey.
journey-detailThe full specification of a single journey.
nfrEnd-to-end non-functional requirements for a journey.

System-level — one per organisation

service-dependenciesThe system-wide dependency map and build order.
personaA type of actor in the system.
observability-modelOrganisation-wide observability posture.
security-modelOrganisation-wide security posture.

Service & index artifacts

technical-serviceThe canonical per-service definition, with SLA and its data stores.
api-manifestIndexes OpenAPI + AsyncAPI specs at capability or service scope.
sequence-manifestIndexes Mermaid sequence diagrams at journey-phase scope.

Identifier conventions

PrefixMeaningFormat
CAP-XXXCapability3 digits
SUB-XXXSub-capability3 digits
JRN-XXXJourney3 digits
PH-XXXPhase (within a journey)3 digits
PER-XXXPersona3 digits
CHN-XXXChannel3 digits
SVC-XXXService3 digits
ENT-XXXEntity3 digits
DS-XXXData store3 digits
EVT-XXXEvent3 digits
GOV-XXXGovernance rule3 digits, optional sub-rule
DD-XXXDesign decision3 digits
SEQ-XXXSequence diagram3 digits

Prefixes are conventions, not hard schema requirements. A pack may override them; the schema regex patterns move with it.

06 — The pipeline

From mandate to a buildable slice

Artifacts are produced by a three-phase pipeline with quality gates between them. Each stable journey model is a single buildable vertical slice — handed to development, one at a time.

Phase ADisc.

Discovery

Sequential, done once. Research-led — the market and regulatory landscape is captured before any artifact is drafted.

  • Capabilities & sub-capabilities
  • Technical services
  • Governance mapping
  • Personas
Phase BFrame

Framing

Sequential, done once. The system is drawn at the context and container level, and the work is enumerated and prioritised.

  • Visual architecture + C4 workspace (L1 System Context, L2 Container)
  • Journey inventory, prioritised
Gate 1 — Modelling readiness. All foundation artifacts baselined; journey inventory prioritised.
Phase CModel

Analytical modelling

Iterative, per journey in priority order. Each journey is scaffolded, modelled end-to-end, then reviewed against the invariants.

  • Journey detail → participant interaction → NFRs
  • Data model → service boundaries → API contracts → events
  • Validation + reasoning review, then central-model sync
Gate 2 — Journey stable (repeating). Journey artifacts stable, central model updated, evidence committed.
Handoff→ Dev

To development

A stable journey model is one buildable vertical slice. It becomes a deliverable in the development project. Channel development is a separate concern consuming the capability APIs.