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
What it is
A map of where the business vocabulary changes. Each box is a bounded context — a region within which one word means exactly one thing — and each line is labelled with the kind of relationship, not the data that flows. "Customer / Supplier" says one side can make demands of the other. "Conformist" says it cannot. "Anti-Corruption Layer" says somebody is paying to keep a foreign model out.
It is the least technical structural diagram and usually the most contentious, because the lines are about organisational power as much as software.
When you produce it
Before you decide service boundaries, and again whenever a proposed boundary keeps producing chatty integrations. A context map that shows three contexts all reaching into one shared "Customer" table is telling you the decomposition is wrong before you have written any code.
Who reads it
Architects and senior engineers deciding where to cut. Product people, who usually recognise their own organisation in it immediately. It is rarely a CxO artifact — the vocabulary is too specialised — but the conclusions drawn from it belong in a CxO deck.
What good looks like
- Each box lists two or three words that mean something different inside it.
- Every line carries a named relationship pattern, not just an arrow.
- Where an anti-corruption layer exists, it is on the diagram, because it is a real cost somebody is paying.
- Shared kernels are marked and rare. A map with five shared kernels is a distributed monolith with a good vocabulary.
Common mistakes
- Drawing services instead of contexts. If two boxes use every word identically, they are one context split for deployment reasons.
- Unlabelled relationships. The labels are the entire value.
- Treating it as permanent. Contexts move. An out-of-date map is worse than none, because people trust it.