Data Mesh Design Template
Mesh fit test, current state, domain map and ownership rules, data products and quality tests, self-serve platform, federated governance policies, standards, metrics, roadmap
How to use: Use it when a central data team has become the bottleneck and domains are ready to own analytical data. Fill the fit assessment and the domain map first, then the product acceptance tests and the global policies the platform enforces. The main pitfall is renaming existing tables as products without owners, contracts, consumers or a funded platform.
Preview
Data Mesh Design: [Organisation or data estate]
Architecture design for a data mesh: the decision that a mesh fits, the domains that own data, the data products they publish, the self-serve data platform that makes publishing cheap, the federated computational governance that keeps products interoperable, the interoperability standards, the logical architecture, the operating model, metrics and the adoption roadmap. The structure follows the four data mesh principles named by Zhamak Dehghani (martinfowler.com, 2020), cited by name only. Product and contract metadata use the Bitol Open Data Product Standard (ODPS) v1.1.0 and Open Data Contract Standard (ODCS) v3.2.0 through the linked templates. Replace every
[bracketed]value and every row marked Example.
Document control
| Field | Value |
|---|---|
| Document ID | [DMD-001] |
| Organisation or data estate | [Corvid Commerce analytical estate] |
| Accountable executive | [@chief-data-officer] |
| Design authority | [@data-architect] |
| Platform owner | [@data-platform-lead] |
| Version | [0.1] |
| Status | [Draft / In review / Approved / Superseded] |
| Approvers/reviewers | [@cdo], [@chief-architect], [@ciso], [@domain-leads] |
| Last updated | YYYY-MM-DD |
| Next scheduled review | YYYY-MM-DD |
| Classification | [Internal / Confidential] |
| Governance model reference | [data/data-governance-operating-model document ID and version] |
| Standards versions | ODPS [v1.1.0], ODCS [v3.2.0], lineage [OpenLineage version] |
Approvals
| Role | Name | Decision | Date |
|---|---|---|---|
| Accountable executive | [@name] | [Approve / Approve with conditions / Reject] | YYYY-MM-DD |
| Data governance council chair | [@name] | [Decision] | YYYY-MM-DD |
| Chief information security officer | [@name] | [Decision] | YYYY-MM-DD |
| Domain leads (each pilot domain) | [@names] | [Decision] | YYYY-MM-DD |
Revision history
| Version | Date | Author | Change summary |
|---|---|---|---|
| 0.1 | YYYY-MM-DD | [@name] | First draft after fit assessment |
| 0.2 | YYYY-MM-DD | [@name] | Example: Domain map agreed with Sales, Fulfilment and Finance |
| 1.0 | YYYY-MM-DD | [@name] | Example: Global policies and platform capabilities approved for the pilot |
Contents
- Purpose, drivers and fit
- Current state
- Domain-oriented ownership
- Data as a product
- Self-serve data platform
- Federated computational governance
- Interoperability standards
- Logical architecture
- Operating model and teams
- Metrics and economics
- Adoption roadmap
- Risks and anti-patterns
- Decisions and traceability
- Glossary and references
1. Purpose, drivers and fit
1.1 Drivers
| ID | Driver | Evidence | Owner |
|---|---|---|---|
| DRV-01 (Example) | Central data team backlog delays new datasets | Median 34 days from request to first usable dataset over the last two quarters | [@cdo] |
| DRV-02 (Example) | Analysts do not trust shared tables | Three incidents last quarter where finance and sales reported different order counts | [@head-of-finance] |
| DRV-03 (Example) | Domain teams already own operational systems end to end | Six product teams with on-call for their services | [@cto] |
| DRV-[NN] | [Driver] | [Evidence] | [@owner] |
1.2 Fit assessment
A mesh moves data ownership to the teams that know the data. That has a cost: every domain needs data skills, and the organisation needs a platform and shared standards. Answer each question with evidence.
| Question | Answer | Evidence | Fit signal |
|---|---|---|---|
| Are there several distinct business domains producing analytical data? | [Yes / No] | [Domain list] | Mesh fits better with more domains |
| Is the central team the main bottleneck rather than data quality at source? | [Yes / No] | [Backlog data] | Bottleneck at the centre supports a mesh |
| Can domain teams take on data product ownership with funding and skills? | [Yes / No / Partly] | [Staffing plan] | No means start with a central team and domain stewards |
| Is there budget for a platform team for at least two years? | [Yes / No] | [Budget line] | No platform means each domain rebuilds the same tooling |
| Do leaders accept global policies enforced automatically? | [Yes / No] | [Council minutes] | Without this, the mesh becomes isolated silos |
Example: Corvid Commerce answers yes to four questions and "partly" to domain skills. It adopts the mesh for three pilot domains and keeps a central team for the remaining three until their skills plan is funded.
1.3 Out of scope
[Operational databases, transactional integration (see
architecture/integration-design), master data management (see
architecture/master-data-management-design), and any area left
centrally managed.]
2. Current state
| Area | Current state | Problem | Evidence |
|---|---|---|---|
| Storage and compute (Example) | Lakehouse on Apache Iceberg tables in one cloud account | Shared namespace, unclear ownership of 610 tables | Catalogue export |
| Transformation (Example) | One dbt project with 900 models owned by the central team | Changes queue behind each other | Pull request lead time |
| Access (Example) | Ticket-based grants by the central team | Two to five days per grant | Ticket data |
| Quality (Example) | Tests on some models, no published service levels | Consumers find issues first | Incident log |
| Metadata (Example) | Catalogue populated by crawler, few descriptions | Low discovery | Search analytics |
| [Area] | [State] | [Problem] | [Evidence] |
Link the platform baseline to architecture/data-platform-architecture
if one exists.
3. Domain-oriented ownership
The first principle moves ownership of analytical data to the business
domains closest to it. Use the bounded contexts from domain-driven
design where they exist (architecture/context-map,
architecture/bounded-context-canvas), so operational and analytical
ownership line up.
3.1 Domain map
| Domain ID | Domain | Owning team | Bounded contexts | Source systems | Data product owner | Mesh status |
|---|---|---|---|---|---|---|
| DOM-01 (Example) | Sales | Checkout team | Ordering, Payments | Order service, payment gateway events | [@sales-dpo] | Pilot |
| DOM-02 (Example) | Catalogue | Catalogue team | Product information, Pricing | Product service | [@catalogue-dpo] | Wave 2 |
| DOM-03 (Example) | Fulfilment | Fulfilment team | Warehousing, Shipping | Warehouse system, carrier events | [@fulfilment-dpo] | Pilot |
| DOM-04 (Example) | Customer | Accounts team | Identity, Profiles | Account service | [@customer-dpo] | Wave 2 |
| DOM-05 (Example) | Finance | Finance systems team | Ledger, Billing | ERP, billing service | [@finance-dpo] | Pilot |
| DOM-06 (Example) | Marketing | Growth team | Campaigns, Attribution | Marketing tools | [@marketing-dpo] | Central for now |
| DOM-[NN] | [Domain] | [Team] | [Contexts] | [Sources] | [@owner] | [Status] |
3.2 Ownership rules
| Rule ID | Rule | Rationale |
|---|---|---|
| OWN-01 (Example) | The team that changes a source system owns the source-aligned products built from it | Changes and meaning stay with the people who cause them |
| OWN-02 (Example) | Aggregate products are owned by the domain that uses them most, or by a named consumer-aligned team | Avoids orphaned cross-domain tables |
| OWN-03 (Example) | Every product has one accountable data product owner; shared ownership is not allowed | Clear escalation |
| OWN-[NN] | [Rule] | [Rationale] |
4. Data as a product
The second principle treats each published dataset as a product with
consumers, a roadmap, quality promises and an owner. Dehghani's 2019
article names qualities such as discoverable, addressable, trustworthy,
self-describing, interoperable and secure; the 2020 article adds
understandability and explorability, and the book (2022) extends the
list with natively accessible and valuable on its own. The table below
uses those quality names with original acceptance tests. Specify each product in
data/data-product-specification and each output port in
data/data-contract.
4.1 Product qualities and acceptance tests
| Quality | Acceptance test for a product to go live |
|---|---|
| Discoverable | Listed in the catalogue with description, owner, domain and tags; appears in search for its business terms |
| Addressable | Each output port has a stable, versioned identifier and location |
| Understandable (self-describing) | Every property has a description; business terms link to the glossary; at least one example query |
| Trustworthy | Published service levels (freshness, availability) and quality checks run on every load, results visible to consumers |
| Natively accessible | Readable through at least one port suited to its main consumers (SQL table, file, API or stream) |
| Interoperable | Uses the global identifiers, time zone, currency and code lists in section 7 |
| Secure | Access by policy from classification; personal data masked by default |
| Valuable on its own | At least one named consumer and use case before build starts |
4.2 Product inventory
| Product ID | Product | Domain | Type | Output ports | Contract IDs | Named consumers | Status |
|---|---|---|---|---|---|---|---|
| DP-SAL-01 (Example) | Orders | DOM-01 | Source aligned | orders 2.1.0 (Iceberg table) | corvid-orders-orders | Finance, Fulfilment, BI | Active |
| DP-SAL-02 (Example) | Payments | DOM-01 | Source aligned | payments 1.0.0 | corvid-payments-payments | Finance | Draft |
| DP-FUL-01 (Example) | Shipments | DOM-03 | Source aligned | shipments 1.2.0 | corvid-shipments-shipments | Sales, Customer service | Active |
| DP-FUL-02 (Example) | Delivery performance | DOM-03 | Aggregate | delivery_daily 1.0.0 | corvid-delivery-performance-daily | Operations dashboards | Draft |
| DP-FIN-01 (Example) | Recognised revenue | DOM-05 | Consumer aligned | revenue_monthly 1.0.0 | corvid-revenue-monthly | Board reporting | Proposed |
| DP-[DOM]-[NN] | [Product] | [Domain] | [Source aligned / Aggregate / Consumer aligned] | [Ports] | [IDs] | [Consumers] | [Status] |
The type values follow ODPS v1.1.0 (sourceAligned, aggregate,
consumerAligned). Product IDs in this document are design references;
the ODPS id in each specification is the system identifier.
4.3 Product lifecycle
Every product moves through the same states. The platform records the
state in the product specification (ODPS status) and the catalogue
shows it to consumers.
5. Self-serve data platform
The third principle provides shared, self-service capabilities so that
domain teams can build, publish and run products without specialist
infrastructure work. Dehghani describes the platform in planes: the
2020 article names a data infrastructure provisioning plane, a data
product developer experience plane and a data mesh supervision plane,
and the book (2022) renames them the infrastructure utilisation, data
product experience and mesh experience planes. This design groups
capabilities by the book's plane names.
Treat the platform as a product with its own roadmap
(architecture/internal-developer-platform-charter,
architecture/platform-golden-path).
| Cap ID | Capability | Plane | Self-service interface | Mandatory for products | Status |
|---|---|---|---|---|---|
| PLT-01 (Example) | Storage and compute provisioning per domain (Iceberg namespace, warehouse, budget) | Infrastructure | Template repository and pipeline | Yes | Live |
| PLT-02 (Example) | Product scaffold: dbt project, tests, CI, ODPS and ODCS files | Product experience | create-data-product command | Yes | Pilot |
| PLT-03 (Example) | Contract validation in CI against the ODCS v3.2.0 JSON schema | Product experience | CI step | Yes | Pilot |
| PLT-04 (Example) | Quality checks and service level monitoring with consumer-visible results | Product experience | Declared in the contract | Yes | Pilot |
| PLT-05 (Example) | Access policies from classification tags, masking by default | Infrastructure | Policy as code | Yes | Live |
| PLT-06 (Example) | Catalogue registration and search from product metadata | Mesh experience | Automatic on publish | Yes | Pilot |
| PLT-07 (Example) | Lineage collection with OpenLineage events | Mesh experience | Automatic from orchestrator | Yes | Planned |
| PLT-08 (Example) | Cost reporting per product | Mesh experience | Dashboard | No | Planned |
| PLT-[NN] | [Capability] | [Plane] | [Interface] | [Yes / No] | [Status] |
Platform service levels:
| Measure | Target (Example) |
|---|---|
| Time for a trained domain team to publish a new source-aligned product | 10 working days |
| Access grant through policy (no ticket) | Within 1 hour |
| Platform availability during business hours | [Target] |
6. Federated computational governance
The fourth principle combines a federated decision body (domain
representatives, platform, security, legal and privacy) with policies
that the platform enforces automatically. Membership, decision rights
and the RACI belong in data/data-governance-operating-model; this
section lists the policies and how each one is enforced.
6.1 Global and local policies
Global policies apply to every product and are few. A policy is global only if inconsistency between domains would break interoperability, security or legal compliance. Everything else is local.
| Policy ID | Policy | Scope | Enforcement point | Mode | Evidence |
|---|---|---|---|---|---|
| POL-G-01 (Example) | Every output port has a valid ODCS v3.2.0 contract with owner and service levels | Global | CI contract validation (PLT-03) | Block publish | CI logs |
| POL-G-02 (Example) | Properties holding personal data carry a classification tag and are masked unless the consumer role allows | Global | Policy engine (PLT-05) | Block access | Access logs |
| POL-G-03 (Example) | Shared identifiers use the global formats in section 7 | Global | Contract linting | Block publish | Lint report |
| POL-G-04 (Example) | Breaking changes need a new major version and a deprecation notice period of at least [N] days | Global | Contract diff check | Block merge | Pull request record |
| POL-G-05 (Example) | Retention follows the data retention standard | Global | Table maintenance jobs | Detect and alert | Retention report |
| POL-L-01 (Example) | Sales freshness target for orders is hourly | Local (DOM-01) | Contract service level | Monitor | Service level dashboard |
| POL-[G/L]-[NN] | [Policy] | [Global / Local] | [Point] | [Block / Detect / Monitor] | [Evidence] |
Link retention and classification policies to
data/data-retention-deletion-standard and
data/data-classification-policy, and quality rules to
data/data-quality-standard.
6.2 Exceptions
| Exception ID | Policy | Product | Reason | Compensating control | Approved by | Expires |
|---|---|---|---|---|---|---|
| EXC-01 (Example) | POL-G-03 | DP-FIN-01 | ERP customer number cannot be changed before migration | Mapping table published with the product | Governance group, YYYY-MM-DD | YYYY-MM-DD |
| EXC-[NN] | [Policy] | [Product] | [Reason] | [Control] | [Body, date] | YYYY-MM-DD |
7. Interoperability standards
| Std ID | Area | Standard | Version | Applies to |
|---|---|---|---|---|
| STD-01 (Example) | Product metadata | Bitol Open Data Product Standard (ODPS) | v1.1.0 | Every product specification |
| STD-02 (Example) | Port contracts | Bitol Open Data Contract Standard (ODCS) | v3.2.0 | Every output port |
| STD-03 (Example) | Lineage events | OpenLineage | [Version] | Every pipeline run |
| STD-04 (Example) | Table format | Apache Iceberg | [Format version] | All table ports |
| STD-05 (Example) | Customer identifier | customer_id as issued by DOM-04, string, never reused | Internal v1 | All products with customer data |
| STD-06 (Example) | Timestamps | UTC, ISO 8601, with a separate local date where business days matter | Internal v1 | All products |
| STD-07 (Example) | Currency | ISO 4217 code with amounts in minor units | Internal v1 | All monetary properties |
| STD-[NN] | [Area] | [Standard] | [Version] | [Scope] |
Keep the glossary of business terms in architecture/data-dictionary or the
catalogue, and refer to it from contracts.
8. Logical architecture
Read the diagram as follows: each product reads its inputs through the output ports of other products (Delivery performance reads Orders and Shipments), never from another domain's internal tables. Dotted lines show platform services the product uses at publish time. Consumers read through the policy engine, which applies POL-G-02.
9. Operating model and teams
| Team | Type | Responsibilities | Interaction with others |
|---|---|---|---|
| Domain product teams (Example) | Stream aligned | Build and run their data products, answer consumers | Use the platform as a service |
| Data platform team (Example) | Platform | Build and run PLT capabilities as a product | Offer self-service; collaborate with pilot domains for the first quarter |
| Data enablement team (Example) | Enabling | Coach domains, run the data product owner training | Time-boxed engagement per domain |
| Governance group (Example) | Federated body | Agree global policies and exceptions | Meets every [two weeks]; decisions recorded |
Team types follow the vocabulary of Team Topologies (Skelton and Pais),
used by name only. Document each team's interfaces with
architecture/team-api.
Funding: [domain budgets fund product teams; platform funded centrally; cost reporting per product from PLT-08].
10. Metrics and economics
| Metric ID | Metric | Driver | Baseline (Example) | Target (Example) | Source |
|---|---|---|---|---|---|
| MET-01 | Median days from request to first usable product | DRV-01 | 34 | 10 | Request tracker |
| MET-02 | Share of active output ports with a valid contract | DRV-02 | 75% (18 of 24) | 100% | Contract registry |
| MET-03 | Share of active products with at least one named consumer querying in the last 30 days | DRV-01 | 83% (20 of 24) | 90% | Query logs |
| MET-04 | Incidents where consumers found a quality issue before the producer | DRV-02 | 3 per quarter | 0 to 1 per quarter | Incident log |
| MET-05 | Platform cost per active product per year | Economics | EUR 40,000 (EUR 960,000 for 24 products) | EUR 24,000 at 40 products | Finance |
Example arithmetic: the platform team costs EUR 960,000 a year. With 24 active products that is EUR 960,000 / 24 = EUR 40,000 per product; at the target of 40 products it falls to EUR 24,000. The 24 products are spread across domains as Sales 5, Catalogue 4, Fulfilment 5, Customer 4, Finance 3 and Marketing 3. Use the same figures in every report.
11. Adoption roadmap
| Wave | Period | Domains | Platform capabilities needed | Exit criteria |
|---|---|---|---|---|
| 0 (Example) | YYYY-Qn | None | PLT-01, PLT-05 | Fit assessment approved, global policies POL-G-01 to POL-G-03 agreed |
| 1 (Example) | YYYY-Qn | DOM-01, DOM-03, DOM-05 | PLT-02 to PLT-04, PLT-06 | Five products active, MET-02 at 100% for pilot products |
| 2 (Example) | YYYY-Qn | DOM-02, DOM-04 | PLT-07 | MET-01 below 15 days |
| 3 (Example) | YYYY-Qn | DOM-06 | PLT-08 | Central team reduced to enablement and platform roles |
| [N] | [Period] | [Domains] | [Capabilities] | [Criteria] |
12. Risks and anti-patterns
| Risk ID | Risk or anti-pattern | Likelihood | Impact | Mitigation | Owner |
|---|---|---|---|---|---|
| RSK-01 (Example) | Domains publish tables without consumers or service levels | Medium | Medium | Acceptance tests in 4.1, MET-03 | [@governance-chair] |
| RSK-02 (Example) | Platform lags behind domain needs, domains build their own tooling | High | High | Platform roadmap reviewed with domains every quarter | [@platform-lead] |
| RSK-03 (Example) | Global policies grow until the governance group becomes a central bottleneck | Medium | High | Global test in 6.1; policy count reviewed yearly | [@governance-chair] |
| RSK-04 (Example) | Duplicate products for the same concept in two domains | Medium | Medium | Catalogue search before Proposed; ownership rules OWN-01 to OWN-03 | [@data-architect] |
| RSK-05 (Example) | Domain teams lack data engineering skills | High | High | Enablement team, wave sequencing, funded roles | [@cdo] |
| RSK-[NN] | [Risk] | [L] | [I] | [Mitigation] | [@owner] |
13. Decisions and traceability
13.1 Decisions
| ADR ID | Decision | Date | Status |
|---|---|---|---|
| ADR-D01 (Example) | Adopt ODPS v1.1.0 and ODCS v3.2.0 for product and contract metadata | YYYY-MM-DD | Accepted |
| ADR-D02 (Example) | Keep Marketing central until wave 3 | YYYY-MM-DD | Accepted |
| ADR-[NN] | [Decision] | YYYY-MM-DD | [Status] |
13.2 Traceability
| Driver | Principle | Design elements | Policies | Metrics |
|---|---|---|---|---|
| DRV-01 (Example) | Domain ownership, self-serve platform | Section 3.1, PLT-01, PLT-02 | POL-G-01 | MET-01, MET-03 |
| DRV-02 (Example) | Data as a product, federated governance | Section 4.1, PLT-03, PLT-04 | POL-G-01, POL-G-03, POL-G-04 | MET-02, MET-04 |
| DRV-03 (Example) | Domain ownership | OWN-01 to OWN-03 | None | MET-01 |
| [Driver] | [Principle] | [Elements] | [Policies] | [Metrics] |
14. Glossary and references
14.1 Glossary
| Term | Meaning in this document |
|---|---|
| Data mesh | A socio-technical approach where business domains own and publish analytical data as products on a shared platform under federated governance |
| Domain | A business area with its own language, systems and team, usually aligned with a bounded context |
| Data product | Data plus code, metadata, contracts and service levels, owned by a domain and offered to consumers through ports |
| Output port | A versioned interface through which consumers read a product |
| Data product owner | The person accountable for a product's value, roadmap and promises |
| Self-serve data platform | Shared capabilities that let domain teams build and run products without specialist tickets |
| Federated computational governance | Governance by a group of domain and specialist representatives, with policies enforced automatically by the platform |
| Global policy | A policy that applies to every product because inconsistency would break interoperability, security or compliance |
| Source aligned, aggregate, consumer aligned | Product types by closeness to a source, combination of sources, or fit to one family of uses |
14.2 References
| Reference | Version or date checked | Use |
|---|---|---|
| Zhamak Dehghani, "Data Mesh Principles and Logical Architecture", martinfowler.com/articles/data-mesh-principles.html | Published 3 December 2020, checked 2026-10-30 | Names of the four principles, earlier platform plane names (no text used) |
| Zhamak Dehghani, "How to Move Beyond a Monolithic Data Lake to a Distributed Data Mesh", martinfowler.com/articles/data-monolith-to-mesh.html | Published 20 May 2019, checked 2026-10-30 | Names of data product qualities (no text used) |
| Zhamak Dehghani, Data Mesh: Delivering Data-Driven Value at Scale, O'Reilly, 2022 | Book, cited by name | Platform plane names and two added quality names (no text used) |
| Bitol Open Data Product Standard (ODPS), github.com/bitol-io/open-data-product-standard | v1.1.0, released 2026-09-08, checked 2026-10-30 | Product type values and product metadata |
| Bitol Open Data Contract Standard (ODCS), github.com/bitol-io/open-data-contract-standard | v3.2.0, released 2026-09-08, checked 2026-10-30 | Contract validation and service levels |
| Matthew Skelton and Manuel Pais, Team Topologies | Book, cited by name | Team type names in section 9 |
Related templates: data/data-product-specification, data/data-contract, data/data-governance-operating-model, data/data-quality-standard, data/data-classification-policy, data/data-retention-deletion-standard, architecture/data-dictionary, architecture/data-platform-architecture, architecture/context-map, architecture/team-api | Current versions | Detail for each part of the design |
Standard and licence note
Structure aligned with the four data mesh principles named by Zhamak Dehghani in "Data Mesh Principles and Logical Architecture" (martinfowler.com, 3 December 2020) and her book Data Mesh (O'Reilly, 2022): domain-oriented decentralized data ownership and architecture, data as a product, self-serve data infrastructure as a platform, and federated computational governance. The principles, quality names and platform plane names are cited by name only; no text, figures or tables from the article or the book are reproduced. Product and contract metadata refer to the Bitol Open Data Product Standard v1.1.0 and Open Data Contract Standard v3.2.0, published by the Bitol project under the Apache License 2.0. Team type names follow Team Topologies by name only. All explanatory text, tables and examples are original. Corvid Commerce is fictional. Check the current versions of each standard before use. Template licence: MIT.
Related templates
Master Data Management Design Template (MDM Hub, Match and Merge)
MDM styles (registry, consolidation, coexistence, centralised), golden record, CRUD matrix, match/merge sizing, survivorship, stewardship, KPIs
ArchitectureAnalytics and BI Solution Design Template (Dimensional Model, Semantic Layer)
BI solution design: KPIs, bus matrix, dimensional model, semantic layer (MetricFlow, Ossie status), security, performance, dashboard standards
ArchitectureAPI Design Guidelines Template (Company Style Guide)
Company API style guide: naming, methods, status codes, RFC 9457 errors, pagination, versioning, security, webhooks, governance