methodatlas
RunsheetDomain Modeling

Bounded Context Canvas

ComplexityMedium
Time1-3 h
Participants3-8
FormatWorkshop + async
MaturityEmerging
01

Prerequisite

What needs to be finished first

A rough event timeline and pivotal events are documented so candidates for bounded contexts and their boundaries are available.

Without: Without the Big Picture, the canvas becomes an isolated microservice map and misses context shifts in the business flow.
Complete firstContext Map

An overview of the existing contexts and their relationships (Customer-Supplier, Conformist, ACL) is available or being developed in parallel.

Without: Without a Context Map, upstream and downstream dependencies stay invisible. The canvas may be internally consistent but integrates poorly.
02

Preparation

What needs to be ready before start

Materials

Bounded Context Canvas template (ddd-crew GitHub) as a Miro template or A1 printout; sticky notes in four colors for Domain Roles, Strategic Classification, Inbound, and Outbound; markers; glossary area at the edge.

People / roles

One context owner (team lead or tech lead); two to three domain experts from the business domain; one to three engineers; optionally a DDD coach for the team's first canvases.

Pre-read

Provisional context name; list of known upstream and downstream systems with integration type; existing service documentation; relevant ADRs for interfaces.

Time needed

1-3 h

Setup

Place the canvas on the work surface and label the fields (Name, Purpose, Strategic Classification, Domain Roles, Inbound Communication, Outbound Communication, Ubiquitous Language, Business Decisions, Assumptions). Put the glossary column on the right. Set the timer to 90 min.

03

Core question

The one question this method answers

Which domain boundary defines this context, which language applies inside it, and how does it integrate with its neighbors?

04

Flow

Marker: Sektion

StepDurationActionHint
1Section 1: Name and purpose
10 minUse the context name as a domain term, not as a service name. Write the purpose in two sentences: which business problem this context solves and which outcome it produces.If the name sounds like a microservice ('order-service'), it is too technical. Use a domain term from the ubiquitous language.
2Section 2: Strategic classification
10 minClassify along three axes: Domain (Core, Supporting, Generic), Business Model (Revenue, Engagement, Compliance, Cost Reduction), Evolution (Genesis, Custom, Product, Commodity).Core domains need the best people. If everything is classified as Core, the strategy is unclear or the team is overconfident.
3Section 3: Domain roles
10 minWhich role does the context play (Specification, Execution, Audit, Approver, Analysis, Gateway)? Multiple roles are possible, but they need justification.More than three domain roles point to a God Context. Check whether the canvas should be split.
4Section 4: Inbound and outbound communication
30 minFor each interface: counterpart context, frequency, data, integration pattern (Customer-Supplier, Conformist, ACL, Open Host Service, Published Language). Separate inbound commands and queries from outbound events.If inbound and outbound use different language, translation (ACL) is mandatory. Missing ACLs with differing language create model leaks.
5Section 5: Ubiquitous language and business decisions
20 minCollect 10-20 central terms with a short definition. Note three to five important business decisions (rules, policies, invariants) enforced by the context.If a term means different things to different stakeholders, define it here explicitly. Otherwise the ambiguity leaks into code and tickets.
6Section 6: Assumptions and risks
10 minCapture open assumptions, missing clarity, and known risks. Name an owner and next action for each entry.An empty assumptions block is a warning sign. Every context has uncertain assumptions; without this reflection, the canvas is polished but shallow.
05

Artifact

What comes out at the end

Form

Completed canvas (image or structured Markdown) in the repo under `docs/contexts/<context-name>.md`, linked to the Context Map, relevant ADRs, and service documentation. Include version number and date in the header.

Versioning / ownership

Keep every canvas in Git with version number in the filename or header. For larger changes (domain classification, new integrations), create a new version and keep the old one. Add a change log at the end with date and reason.

Tool alternatives
  • Miro or FigJam with the ddd-crew template
  • Markdown file with tables in the architecture repo
  • Confluence page with attached image
  • Structurizr DSL with annotated context definition

bounded-context-canvas-working-template.md

Compact working template for Bounded Context Canvas with context, input, output artifacts, and next step.

Bounded Context Canvas Working Template

Context

What is this method used for?

Core question

Which question should be answered at the end?

Input

Which data, observations, or materials are available?

Working area

  • Area 1:
  • Area 2:
  • Area 3:
  • Relationships / patterns:

Output artifacts

  • Context Canvas:
  • Glossary:
  • Integration Notes:

Open questions

  • ...

Next step

Owner, date, success signal.

06

Example output

Concrete filled scenario, fictional example

bounded-context-canvas-beispiel.md

Concrete filled scenario, fictional example

Bounded Context Canvas — Pricing (v2, 2026-05-18)

Purpose: Calculates final prices per order item while considering promotion rules, taxes, and volume discounts. Delivers traceable price breakdowns for audit and customer service.

Strategic Classification: Core / Revenue / Custom (the promotion engine is a differentiator).

Domain Roles: Execution, Specification.

Inbound:

  • Ordering (Customer-Supplier, Command CalculatePrice, ~80k/day)
  • Catalog (Conformist via REST, Query GetProduct, ~80k/day)
  • Promotion (Published Language via Kafka topic promotion.activated, ~50/day)

Outbound:

  • PriceCalculated Event (Published Language, to Ordering and Analytics)
  • TaxRequested Command to TaxService (Customer-Supplier with ACL)

Ubiquitous Language (excerpt): Price (final, currency-coded), ListPrice, NetPrice, Promotion, Eligibility, PromotionStack, RoundingRule.

Business Decisions: Promotion stacking order is fixed (BOGO before percentage discount). VAT is always calculated last. Rounding to cents follows DIN 1333.

Assumptions: TaxService stays reachable synchronously (owner: @ben, spike on outage behavior by 25.05.). Promotion engine scales to 200/day (unclear on Cyber Monday).

07

Pitfalls

Recognize symptoms and steer against them

Trap

Context as a microservice map

Symptom

Name and content describe a service, not a domain boundary. The language is technical (endpoints, queues).

What to do

Reset the canvas with a domain term. A domain expert must understand the name without backend knowledge.

Trap

All contexts are Core

Symptom

Strategic classification is Core/Revenue everywhere, with no Generic or Supporting contexts.

What to do

Do a reality check with stakeholders: what would be buy instead of build? Where does the company really invest? More than 30% Core is usually overestimated.

Trap

Missing ACL when the model breaks

Symptom

Inbound language from upstream differs but is adopted directly.

What to do

Plan an ACL explicitly as an outbound component. Translate models into your own terms. Otherwise upstream refactoring directly impacts the context.

Trap

Glossary is empty or generic

Symptom

The ubiquitous language contains generic terms (Item, User, Order) without domain definition.

What to do

Write one sentence per term that captures the domain-specific meaning. What does 'Order' mean HERE, compared with 'Order' in the fulfillment context?

Trap

Assumptions block is empty

Symptom

No open points are listed in the assumptions field and everything looks settled.

What to do

The facilitator asks: what do we not know? Which assumption could be wrong? Require at least three entries, otherwise the canvas is polished up.

Trap

Static documentation

Symptom

The canvas is created once and then forgotten. Reality (code, interfaces) drifts away.

What to do

Set a quarterly review cadence or review after major changes. Keep the canvas in the repo next to code, not in the wiki. Drift then becomes visible in code review.

08

Stop criteria

Done signals checkable in under a minute

The context boundary is not developed, so the canvas refers to an unclear area.
No domain expert is present, so language and business decisions are guessed.
The team has no DDD background and no coach is available, so classifications are placed incorrectly.
More than three domain roles are entered, so the context is too large and needs splitting instead of a canvas.
No owner is named for the context, so the canvas becomes ownerless after the session.
Upstream and downstream systems are unknown, so inbound and outbound stay empty or fictional.

Finished the runsheet?

Go to the profile for purpose, similar methods, and sources or continue to the next method in the catalog.