Data Mesh Architecture
Data Mesh Architecture is a federated, domain-oriented data architecture in which each business domain (Marketing, Payments, Search, Logistics, etc.) owns its own analytical data as a product — exposing it through well-defined interfaces, with clear ownership, quality SLAs, and discoverability — rather than dumping raw data into a centralized data lake or warehouse owned by a separate “data team.” Coined and developed by Zhamak Dehghani at ThoughtWorks across her 2019 essay “How to Move Beyond a Monolithic Data Lake to a Distributed Data Mesh” (cited above), her 2020 follow-up “Data Mesh Principles and Logical Architecture,” and her 2022 O’Reilly book Data Mesh: Delivering Data-Driven Value at Scale, the architecture is fundamentally an organizational response to a recurring failure mode of centralized analytics: the central data team becomes a bottleneck that cannot move at the speed of the domain teams whose data it owns, ownership without domain knowledge produces stale or incorrect data, cross-team coordination cost grows quadratically with the number of domains, and Conway’s Law (Conway 1968 — “organizations design systems that mirror their communication structure”) asserts itself: a centralized data team produces a centralized monolith that becomes increasingly mismatched with the federated business it serves. Dehghani’s argument inverts the centralization: instead of pulling data into a central team’s lake, push the data-product responsibility out to the domain teams that already own the operational systems generating the data, with a central platform team providing self-serve data infrastructure and federated computational governance to keep the federation coherent. The four founding principles — domain-oriented decentralized data ownership, data as a product, self-serve data infrastructure as a platform, and federated computational governance — together define a paradigm shift comparable to the microservices/monolith inversion in operational systems. Adoption at Zalando, Netflix, JP Morgan Chase, Adidas, ABN AMRO, and others has produced both successful federations and “data mesh that is actually just a data lake with extra meetings” cautionary tales. The interview-relevant point is that you must understand mesh not as a technical architecture (it can be implemented on a lake, a warehouse, or polyglot stores) but as an organizational architecture, and you must recognize that without organizational maturity — domain teams capable of owning data, a strong central platform, automated governance — the mesh degenerates into either a swamp or a thinly-disguised silo proliferation.
0. Historical Context — Dehghani’s 2019 Essay and the Centralized-Data-Team Crisis
The data-mesh thesis emerged from a recurring failure mode that Zhamak Dehghani — then a principal consultant at ThoughtWorks — observed across multiple Fortune 500 client engagements between 2017 and 2019. The failure mode: a centralized data team, charted to “own the company’s data,” became the bottleneck that everyone else’s data depended on, and the bottleneck got worse as the company grew. Dehghani’s 2019 essay “How to Move Beyond a Monolithic Data Lake to a Distributed Data Mesh” (cited above), published on martinfowler.com — the same site that had hosted Fowler’s 2011 essay coining “polyglot persistence” — was the foundational articulation of an alternative.
The essay’s structure was diagnostic before prescriptive. Dehghani enumerated specific symptoms of the centralized-team failure mode: the data team has 50 engineers serving 500 data consumers across 30 business domains; the backlog of data-product requests is 6-12 months long; the data team lacks the domain knowledge to build correct datasets for each domain (Marketing’s “active customer” is different from Finance’s “active customer,” but the central team builds a single definition that is wrong for both); operational teams that produce data have no incentive to ensure quality because they don’t own the analytical consumption of their data; cross-domain analytics requires the central team to coordinate across producers, slowing every change to the speed of the slowest cross-team agreement.
The diagnosis traced these symptoms to a specific architectural mistake: data ownership had been separated from operational ownership. The marketing team that runs the CRM does not own the analytical “marketing data product”; the central data team does. This separation creates a misalignment: the people who understand the data (marketing) are not responsible for its analytical quality; the people responsible for its analytical quality (data team) don’t have the domain knowledge to do the job well. The misalignment compounds with scale — at 50 engineers, the central data team can compensate via hand-coordination; at 500 engineers, the coordination cost overwhelms the team’s capacity.
Dehghani’s insight invoked Conway’s Law (Conway 1968, cited above — “any organization that designs a system will produce a design whose structure is a copy of the organization’s communication structure”). The argument: if the business is federated (organized into domains with their own teams, P&Ls, technology choices), the data architecture should be federated to match. Centralizing the data team produces a centralized monolith mismatched with the federated business — Conway’s Law working in reverse, with architectural pain compelling organizational change rather than the other way around.
The prescription was the four principles that have become the essay’s enduring contribution: domain-oriented decentralized data ownership, data as a product, self-serve data infrastructure as a platform, federated computational governance. Dehghani refined these in her 2020 follow-up essay “Data Mesh Principles and Logical Architecture” (cited above) and developed them at book length in her 2022 O’Reilly book Data Mesh: Delivering Data-Driven Value at Scale (cited above), which is the canonical reference for organizations adopting the architecture.
The essay’s reception split between enthusiastic adoption and skeptical pushback. Enthusiasts saw mesh as the data analog of microservices — a Conway’s-Law-aligned federation that addresses scaling pain that centralized teams cannot. Skeptics saw mesh as “rebranded microservices for data” or “a data lake with extra meetings,” with the specific concern that the architecture’s promised benefits depend on organizational maturity that few enterprises actually have. Both positions have been borne out in practice: shops with mature engineering culture and strong platform investment have implemented mesh successfully (Zalando, Netflix, JP Morgan Chase — see §6 for details); shops that adopted mesh as a fashionable label without organizational change have produced “accidentally Lambda” or “accidentally swamp” outcomes.
The data-mesh adoption curve has accelerated through 2022-2026 as the underlying technologies matured: data catalogs (DataHub, Amundsen, OpenMetadata, Unity Catalog, Atlan) became production-ready, federated query engines (Trino, Starburst) made cross-domain SQL practical, governance-as-code tools (Apache Ranger, Atlan, Collibra) automated what was previously a committee process. The infrastructure that makes mesh tractable did not exist in 2018; it does in 2026, and adoption has followed.
The interview-relevant point: data mesh is best understood not as a technical architecture but as an organizational architecture — a Conway’s-Law alignment of data ownership with domain ownership, supported by central platform investment and automated governance. A candidate who frames mesh as “a different way to store data” misses the point. A candidate who frames it as “the application of microservices’ federated-ownership principle to analytical data, motivated by the centralized-data-team failure mode at enterprise scale” demonstrates the architectural literacy that senior interviews probe for.
1. When to Use and When Not to Use
Data mesh is the right architecture when (a) the organization is large enough that the central data team has become a bottleneck (typically dozens of domains, hundreds of data sources), (b) domain teams are mature enough to own production responsibilities (already running their own services with on-call), (c) a strong platform team is available to build self-serve infrastructure (catalog, ingest, compute, governance), (d) cross-domain analytics is important enough to justify the federation overhead, and (e) leadership is willing to invest in the multi-year organizational change. The motivating cases are: a Fortune 500 company with 50 business units each generating data the others need, a global ride-share platform with regional + functional domains all needing each other’s data, a streaming media company where Content, Recommendations, Payments, and Customer Support all produce data the others depend on.
Data mesh is the wrong architecture when (a) the organization is small (fewer than ~10 domains) — the federation overhead exceeds the bottleneck pain a centralized team would incur, (b) domain teams are not yet mature enough to own production-grade data (often the case in companies where data engineering has been a silo for years), (c) there is no platform team or budget to build one — without the platform, the mesh becomes 50 incompatible silos, (d) regulatory or governance requirements demand strong central control (some financial and healthcare contexts), or (e) leadership is unwilling to commit to the organizational change — partial mesh adoptions tend to fail spectacularly because the old centralized team and the new domain ownership coexist without clear authority.
The acceptance criterion is essentially: do you have the organizational scale where central is the bottleneck, and the maturity to do federated ownership well? Without both, mesh is premature optimization. Dehghani is explicit on this in her 2022 book: data mesh is for organizations facing genuine bottleneck pain at scale, not for greenfield startups or small data teams.
2. Structure
flowchart TB subgraph Domains subgraph "Marketing Domain" MOps[Operational Systems<br/>CRM, campaigns] MProduct[Marketing Data Product<br/>customer segments, campaign performance] end subgraph "Payments Domain" POps[Operational Systems<br/>transaction processing] PProduct[Payments Data Product<br/>transaction history, fraud signals] end subgraph "Search Domain" SOps[Operational Systems<br/>search index, query log] SProduct[Search Data Product<br/>query patterns, click logs] end end subgraph "Self-Serve Platform" Catalog[Data Catalog<br/>discovery + metadata] Ingest[Ingest Tooling<br/>CDC, Kafka, dbt templates] Compute[Compute Substrate<br/>Spark, Flink, BigQuery] Govern[Governance Engine<br/>policy as code, automated checks] end Domains -. register .-> Catalog MProduct -. uses .-> Compute PProduct -. uses .-> Compute SProduct -. uses .-> Compute Govern -. enforces .-> MProduct Govern -. enforces .-> PProduct Govern -. enforces .-> SProduct Consumer1[Consumer: ML Team] -. discovers via Catalog .-> MProduct Consumer1 -. consumes .-> PProduct Consumer2[Consumer: BI Team] -. discovers .-> SProduct Consumer2 -. consumes .-> MProduct
What this diagram shows. The architecture’s defining property is that data ownership is co-located with operational ownership at the domain level. Each domain (Marketing, Payments, Search) runs its own operational systems and publishes its own analytical data products. The marketing team that runs the CRM also owns the “customer segments” data product derived from CRM data; the payments team that runs the transaction processor also owns the “transaction history” data product. There is no central data team owning “the marketing data” or “the payments data” — the domain owns it end-to-end, including freshness SLAs, schema versioning, quality monitoring, and consumer support.
The self-serve platform is the central infrastructure that makes federation tractable. The platform provides: a data catalog (discoverability — consumers can find data products, see their schemas, see their owners), ingest tooling (CDC connectors, Kafka templates, dbt project templates so each domain doesn’t build from scratch), compute substrate (a shared Spark cluster, BigQuery, or similar), and a governance engine (policy-as-code: PII detection, retention enforcement, schema-evolution checks, all automated rather than gatekept by humans). The platform team’s job is to make domain ownership cheap — if it’s hard for a domain to publish a data product, they won’t, and the mesh fails.
Consumers (the ML team training models, the BI team building dashboards, another domain that needs cross-domain data) discover products via the catalog, consume them via the platform’s standard interfaces, and depend on the producing domain’s published SLAs. Cross-domain queries join multiple data products; this is where the federation’s coherence is tested.
The diagram intentionally has no central data lake or central warehouse. In practice many mesh implementations use a shared lake or warehouse as the substrate under the data products, but the ownership model is what defines the mesh — not the storage layer.
3. Core Principles
Dehghani’s four principles (2020 essay, refined in the 2022 book) are the architecture’s normative core. The principles are named verbatim in the 2020 “Data Mesh Principles and Logical Architecture” essay (Dehghani 2020) as: domain-oriented decentralized data ownership and architecture, data as a product, self-serve data infrastructure as a platform, and federated computational governance. The 2020 essay also introduces a structural concept that the original 2019 essay lacked — the data product as the “architectural quantum”, the smallest independently deployable unit comprising three structural components: code (pipelines and transformation logic), data and metadata (the tables themselves plus schema, lineage, ownership, quality scores), and infrastructure (the storage and compute the data product runs on). The architectural-quantum framing is what makes “data as a product” implementable as a unit of architecture rather than a slogan — each data product is a self-contained deployable, with its own lifecycle, its own owners, its own versioning, and its own contract to consumers.
Principle 1 — Domain-oriented decentralized data ownership and architecture. Data is owned by the domain that produces it operationally. Marketing owns marketing data. Payments owns payments data. The central data team — if it exists at all — owns infrastructure, not data. This inverts the central-data-team model and is the architecture’s most controversial principle, because it requires domain teams to take on responsibilities they previously externalized.
Principle 2 — Data as a product. Each domain’s data is treated as a product with explicit consumers, SLAs (freshness, completeness, accuracy), discoverability (catalog entry with documentation), and a designated “data product owner” responsible for it. Data products are first-class deliverables, not byproducts of operational systems. The product-thinking discipline is what distinguishes a mesh data product from “a table the operational team happens to expose.”
Principle 3 — Self-serve data infrastructure as a platform. The central platform team provides infrastructure that makes domain ownership cheap: catalog, ingest tooling, compute substrate, governance automation, observability. The platform abstracts away the technical complexity so domain teams can focus on their data, not on Spark cluster management. Without strong platform investment, principle 1 is unachievable — domains will lack the capacity to own data well.
Principle 4 — Federated computational governance. Governance is automated and embedded in the platform, not enforced by a centralized governance committee. Policies (PII handling, retention, schema standards, naming conventions) are encoded as automated checks that run continuously against all data products. Domain teams have local autonomy within the federated rules. This is the principle that prevents mesh from devolving into 50 incompatible silos.
The four principles are interdependent. Domain ownership without platform investment leads to silo proliferation. Platform without governance leads to unreliable products. Governance without product thinking leads to bureaucracy without quality. All four must be in place.
3.1 The four principles unpacked in operational terms
The four principles are often summarized abstractly. To make them implementable, each principle needs concrete unpacking — what it actually requires, what it changes, what it costs.
Principle 1 unpacked — domain-oriented decentralized data ownership. The Marketing team that runs the CRM also owns the analytical data products derived from marketing data. This is not “Marketing has access to its data” — it is “Marketing is responsible for the quality, freshness, and consumability of marketing data products that other teams depend on.” Concretely: when the Recommendations team needs a new field in marketing data, they file the request against Marketing, not against a central data team. When marketing’s data product breaks, Marketing’s on-call gets paged. When a customer asks where their data goes, Marketing can answer because they own the lineage. This requires Marketing to have data-engineering capability — at minimum, a data product owner role staffed by someone with both domain knowledge and engineering chops; at scale, embedded data engineers who report into Marketing but follow platform-team conventions.
The change from centralized: previously, Marketing produced raw operational data and a central data team transformed it into analytical products. Now, Marketing produces both — operational data feeding their own systems, and analytical data products for downstream consumers. The transformation step that the central team used to do is now Marketing’s responsibility. This requires Marketing to invest in data-engineering capability they previously externalized; the platform team’s role is to make this investment cheap by providing templates, tooling, and operational substrate.
Principle 2 unpacked — data as a product. Each data product has the discipline that operational products have:
- An explicit consumer (one or more downstream teams that depend on it).
- A data product owner (named individual responsible for the product’s roadmap and quality).
- Discoverability via the catalog: documentation, sample queries, schema, lineage.
- SLAs: freshness (data is updated within N hours of operational events), completeness (X% of records meet the schema), accuracy (validation tests pass), availability (Y% query uptime).
- Versioning: schema changes follow semver; breaking changes require deprecation windows.
- Quality monitoring: automated checks run continuously; failures alert the data product owner.
The change from “tables that exist”: previously, a domain team might expose a table that other teams could read, with no contract. Under data-as-a-product, the table has explicit consumer commitments — it is shipped, monitored, supported. The discipline distinguishes a data product from “a table the operational team happens to expose.”
Principle 3 unpacked — self-serve data infrastructure as a platform. The central platform team builds and operates infrastructure that domain teams use. Concretely, the platform provides:
- Catalog (DataHub, OpenMetadata, Atlan, Unity Catalog) for discoverability and metadata.
- Ingest tooling (CDC connectors, Kafka templates, dbt project scaffolds) so each domain doesn’t reinvent the wheel.
- Compute substrate (a shared Spark cluster, BigQuery, Snowflake, or Databricks workspace).
- Governance automation (PII detection, retention enforcement, schema-evolution checks) — see Principle 4.
- Observability: lineage tracking (OpenLineage), SLA monitoring, query observability.
- Templates: opinionated starting points for new data products that bake in the conventions.
- Access control: standard authentication and authorization, integrated with the company’s identity system.
The platform’s job is to make domain ownership cheap. If a domain team must spend 6 weeks setting up infrastructure before they can publish a data product, they won’t, and the mesh fails. If they can scaffold a new data product in an afternoon using platform-provided templates, they will, and the mesh works.
Principle 4 unpacked — federated computational governance. Governance is encoded as automated policies enforced by the platform, not enforced by a centralized governance committee. Concretely, automated policies cover:
- PII handling: scan all data products for PII fields; require explicit annotations; enforce hashing or restricted access at the catalog level.
- Retention: enforce per-dataset retention policies; deletion happens automatically.
- Schema standards: enforce naming conventions (snake_case columns; semantic version tags), required fields (every dataset has
created_at,updated_at,owner_team), backward-compatibility checks for schema evolution. - Lineage: every transformation is captured by OpenLineage or equivalent; lineage queries are first-class operations.
- Access: default-restrictive; consumers request access; access decisions are logged and audited.
- Cost attribution: query costs are attributed to the consuming team, not the producing team or the platform team.
The “federated” word is critical: domain teams have local autonomy within the federated rules. They choose how to compute their data products; the platform enforces what the products must satisfy.
The “computational” word is also critical: the rules are encoded as code that runs continuously, not as written policies that committees enforce sporadically. A schema change that violates backward compatibility is rejected by the catalog at registration time, not flagged in a quarterly governance review.
The four principles, taken together, define an architecture that is fundamentally about alignment between organizational structure and data architecture. The data products mirror the domain structure (Conway’s Law working with the architecture rather than against it). The platform provides shared infrastructure (allowing domain teams to focus on domain logic, not infrastructure). The governance keeps the federation coherent (preventing the silo proliferation that pure decentralization would produce). The product thinking ensures quality (preventing the “lake with extra meetings” failure mode).
4. Request Flow
4.1 Producing a data product (domain side)
sequenceDiagram participant Domain as Domain Team participant Plat as Platform (templates) participant Catalog participant Govern as Governance Engine participant Compute Domain->>Plat: scaffold new data product (template) Plat-->>Domain: dbt project + catalog stub + SLA template Domain->>Compute: implement transformation (dbt models) Domain->>Catalog: register product with schema, owner, SLA Catalog->>Govern: trigger automated policy checks Govern->>Govern: run PII scan, retention check, naming check Govern-->>Catalog: pass / fail Catalog-->>Domain: product publicly visible (if pass)
The producer flow’s defining feature is that the domain team uses platform-provided templates and standards — they do not build infrastructure from scratch. The governance engine runs automated checks at registration time and continuously thereafter; failures block publication or trigger remediation tickets.
4.2 Consuming a data product (consumer side)
sequenceDiagram participant Consumer as ML / BI Team participant Catalog participant Product as Data Product (in domain) participant Compute Consumer->>Catalog: search for "transaction history" Catalog-->>Consumer: products with metadata, SLAs, owners Consumer->>Product: subscribe / read access (via platform API) Product->>Compute: serve via standard query interface Compute-->>Consumer: data Note over Consumer,Product: SLA monitoring; alerts on owner if SLA breach
Consumers find products via the catalog, subscribe through platform-mediated access controls, and consume via standard interfaces (typically SQL over a shared compute substrate, or events from a shared Kafka). SLA monitoring is the consumer’s escalation path when the producer underdelivers.
4.3 Cross-domain query
sequenceDiagram participant Consumer participant Engine as Query Engine<br/>(Trino / BigQuery) participant MP as Marketing Product participant PP as Payments Product participant SP as Search Product Consumer->>Engine: SELECT ... JOIN marketing JOIN payments JOIN search WHERE ... Engine->>MP: read partition Engine->>PP: read partition Engine->>SP: read partition Engine->>Engine: federated query plan; join across products Engine-->>Consumer: result
Cross-domain queries are where the mesh’s coherence is tested. Schema mismatches, version skew, and SLA differences across products manifest as query failures or wrong results. The platform’s role here is providing a unified query layer (Trino federating across products, or a shared BigQuery dataset) so consumers can express cross-domain queries naturally.
5. Variants
Mesh on a shared lake substrate. All data products live in the same S3 lake, partitioned by domain (/marketing/..., /payments/...). Each domain owns its prefix; the catalog enforces ownership. The shared lake provides one storage substrate but ownership is federated. Most production mesh implementations use this pattern.
Mesh on a shared warehouse. Each domain owns its schemas in a shared Snowflake / BigQuery / Redshift account. Ownership at the schema level; cross-domain queries are native warehouse joins. Simpler than lake-based mesh but inherits warehouse-vendor lock-in.
Mesh with per-domain stores. Each domain runs its own storage, possibly heterogeneous — Marketing in Snowflake, Payments in BigQuery, Search in ElasticSearch. The platform provides a federated query layer (Trino) that joins across stores. Maximum domain autonomy; maximum federation complexity.
Mesh with event-streaming spine. Data products are Kafka topics owned by the producing domain; consumers subscribe via Kafka consumer groups. Streaming-first mesh; aligns naturally with Event Sourcing Pattern and Kappa Architecture.
Mesh-as-overlay-on-lake. A pragmatic pattern: an existing centralized lake remains the storage substrate, but ownership and product definition are layered as a mesh over it. The lake doesn’t disappear; the governance of the lake becomes meshified.
Mesh with synthetic data products. Some products are aggregated across multiple domains (e.g., “customer 360” combining marketing, payments, support) — owned by a domain explicitly chartered for cross-domain views, often called a “data integration domain” or “platform analytics domain.”
6. Real-World Examples and Citations
Zalando. Zalando’s engineering blog (2020, cited above) describes an early production data-mesh adoption. Domain teams own data products; the central platform provides Kafka, schema registry, and a data catalog. Reported reduction in central-team bottleneck. Zalando’s experience is one of the most-cited public references for mesh adoption; their central platform team was substantial — without it, the federation would have devolved into silos. The Zalando case illustrates principle 3 (self-serve infrastructure) as a hard prerequisite, not an optional feature.
The Zalando details (from a multi-post engineering blog series): ~200 domain teams, each responsible for their own operational systems and the analytical data products derived from them. The central platform team (~30 engineers) operates Kafka, Confluent Schema Registry, an in-house data catalog, AWS S3 + Iceberg as the lake substrate, and a Trino federation layer for cross-domain queries. Domain teams scaffold new data products from platform-provided templates; the catalog enforces naming, ownership, and SLA registration. Federated computational governance is implemented as automated checks: PII detection scans all newly-registered datasets; backward-compatibility checks gate schema changes; retention policies are enforced by automated deletion. The transformation took ~3 years (2018-2021) from initial mesh adoption to substantial coverage; ongoing maturation continues.
The lessons from Zalando: (1) the platform team must precede the mesh — without ~30 platform engineers, federating across 200 domains is impossible; (2) cultural change is slow — domain teams initially resist the new responsibility, requiring leadership push and platform-team support; (3) automated governance is the only viable governance — committee-based governance at this scale is impossibly slow.
Netflix. Netflix’s Tech Blog post (2022, cited above) describes their “Data Mesh” platform — though Netflix’s variant is more platform-centric than domain-centric, with a strong central data-platform team providing the substrate that domain teams use. Netflix’s characterization is “platform that enables data movement and processing across the company” rather than the canonical Dehghani four-principle mesh.
JP Morgan Chase. Public talks at Strata Data 2022 describe JPMC’s data-mesh adoption across business units. Massive scale (hundreds of domains, thousands of data products); a primary motivator was regulatory compliance — domain ownership makes lineage and audit easier than centralized opacity. The JPMC case is interesting because the regulatory drivers are different from the engineering drivers most other shops cite: financial regulators (FDIC, OCC, SEC) require auditable data lineage and explicit data ownership for risk reporting, fraud detection, and consumer protection. Mesh’s “every data product has a designated owner with documented lineage” maps directly to regulatory requirements that historically were satisfied by paperwork and committee oversight. The architectural change was therefore also a compliance-cost-reduction.
Booking.com. Booking has documented their mesh evolution in conference talks: a centralized data team that grew to ~100 engineers but still couldn’t keep up with the platform’s data needs; a transition starting ~2020 that pushed analytical data ownership to the operational teams that produced the data. Their case study cited the central-team bottleneck specifically: “the data team was 6 months behind every domain’s request” — the kind of bottleneck pain that justifies the federation overhead.
Adidas. Public conference talks describe Adidas’s data mesh adoption with domain-owned products on a shared cloud platform. Cited as one of the first European retail data-mesh deployments.
ABN AMRO (Dutch bank). Public talks describe their data-mesh adoption motivated by regulatory and governance requirements. Federated ownership with strong central governance.
ThoughtWorks consulting clients. Dehghani’s employer (until 2022) deployed mesh patterns at numerous Fortune 500 clients. Many of these are private references; the public examples above are the well-known cases.
HelloFresh. Their engineering blog describes a mesh-aligned architecture with domain-owned products on a shared platform — cited in the data-mesh community as a successful mid-size deployment.
Uncertain
Verify: the specific scale numbers in the case studies above — Zalando’s “~200 domain teams” and “~30 platform engineers”, JPMC’s “hundreds of domains, thousands of data products”, and the named conference talks at Strata 2022. Reason: these figures come from public talks and engineering blog summaries that vary across retellings; the specific per-org headcounts and product counts are point-in-time and not directly verified against an authoritative primary source for this note. To resolve: cross-check against Zalando’s own multi-post engineering-blog series and JPMC’s published case studies. The fact of mesh adoption at these companies is well-established; the precise quantitative shape is approximate. #uncertain
7. Tradeoffs
| Dimension | Data Mesh | What you get | What it costs |
|---|---|---|---|
| Ownership | Federated to domains | Domain expertise embedded in data | Domain teams need data-engineering capability |
| Bottleneck | Distributed | Eliminates central-team bottleneck | Coordination across domains |
| Coherence | Federated governance | Local autonomy + global standards | Governance engineering investment |
| Time-to-data-product | Fast (domain owns end-to-end) | Domain ships when ready | Initial platform investment is large |
| Quality | Per-domain SLAs | Producer cares about quality | Quality varies across domains |
| Cross-domain analytics | Federated query | Native joins across products | Schema variance, SLA variance |
| Platform investment | Substantial | Self-serve makes ownership cheap | Without platform, mesh fails |
| Organizational change | Major | Aligns with Conway’s Law | Requires multi-year org change |
| Discoverability | Catalog-mediated | Products findable via catalog | Catalog must be authoritative |
| Vendor lock-in | Low (federation) | Heterogeneous stores possible | Federation complexity |
The fundamental tradeoff a mesh makes is organizational complexity in exchange for elimination of the central-team bottleneck. The bottleneck is real and grows with organizational size; the federation overhead is real and is a multi-year investment. Mesh pays off only when the bottleneck pain exceeds the federation cost, which typically requires substantial scale (dozens of domains, hundreds of consumers).
7.1 Conway’s Law and the mesh thesis
The data-mesh thesis is fundamentally an application of Conway’s Law to data architecture. Conway 1968 (cited above) observed that “any organization that designs a system will produce a design whose structure is a copy of the organization’s communication structure.” Dehghani’s argument: if the business is federated (organized into domains with their own teams, P&Ls, technology choices), the data architecture mirroring it must also be federated. A centralized data team produces a centralized data architecture, which is mismatched with the federated business and inevitably becomes a bottleneck.
The microservices movement made the same Conway’s Law argument for operational systems a decade earlier (Newman 2015 first edition, 2021 second edition): independent teams shipping at independent cadences require independent service ownership, which produces a service-oriented architecture matching the team structure. Microservices are the operational analog of data mesh; both invoke Conway’s Law as their justification.
The implication: trying to adopt mesh without changing the org structure is futile. If the same central data team owns “the marketing data” via a “mesh,” nothing has changed except the label. Real mesh requires shifting ownership to domain teams — which is an organizational change, not a technical one. This is why data-mesh adoption is a multi-year executive-sponsored initiative, not a quarterly engineering project.
The flip side: Conway’s Law also predicts mesh adoption will sometimes produce less coherent data architectures than centralized models, because federated teams produce federated artifacts. The “federated computational governance” principle exists precisely to constrain the mesh’s coherence boundaries — without it, Conway’s Law produces silos rather than a coherent federation.
8. Migration Path
Migration into a mesh from a centralized lake or warehouse. The standard recipe (drawing from Dehghani 2022 and ThoughtWorks references):
- Build the platform first. Catalog (DataHub, Amundsen, OpenMetadata, or vendor offering), ingest tooling, governance automation, observability. Without the platform, mesh adoption fails.
- Identify a small number of pilot domains (2-3) ready to take ownership. Look for domains with mature engineering culture and clear data-output use cases.
- Migrate pilot domains’ data to domain-owned products. Each pilot should publish 1-3 data products with explicit SLAs and consumer relationships.
- Validate with consumers — does the mesh model actually serve them better than the prior central pattern?
- Iterate on the platform based on pilot feedback. Common gaps: catalog UX, ingest templates, automated governance checks.
- Expand to additional domains in waves. Typical timeline: 18-36 months to substantial mesh adoption across an enterprise.
- Decommission the centralized data team’s ownership of domain data, retaining them as a platform/governance team or absorbing them into the platform team.
The migration is multi-year and organizationally disruptive. Most failures occur when steps 1, 2, or 5 are skipped — premature mesh expansion without platform readiness.
Migration out of a mesh. Rare and usually a sign of organizational change rather than architectural failure. The recipe: re-centralize ownership of the most critical data products into a central team; retain mesh patterns for the rest. Hybrid is more common than full reversal.
Mesh-on-mesh. Some very large organizations (FAANG-scale) operate multiple meshes — one per major business unit — federated by a higher-level meta-platform. This is fractal mesh; rare and only at extreme scale.
9. Pitfalls
Mesh that’s actually just a data lake with extra meetings. The single most-cited failure mode. The organization keeps its centralized lake, slaps the “mesh” label on existing data sets, and adds a coordination layer of meetings. Nothing changes architecturally; ownership is still ambiguous. Symptoms: data products don’t have clear owners, SLAs are aspirational, the central data team still does most of the work. Mitigation: actually move ownership; without ownership migration, the rebranding is empty.
No central platform = 50 incompatible silos. Without a strong platform team providing self-serve infrastructure, each domain reinvents the wheel — Marketing uses Snowflake, Payments uses BigQuery, Search uses ElasticSearch, all with different schemas and access controls. Cross-domain queries are impossible. Mitigation: invest heavily in the platform before expanding the mesh; principle 3 is non-negotiable.
Domain teams lack data-engineering capability. Many domain teams have backend developers but no data engineers. Asked to own data products, they produce poor-quality datasets without proper schemas, SLAs, or testing. Mitigation: platform must lower the bar (templates, automated quality checks); some shops embed data engineers into each domain (“data product engineer” role).
Cross-domain queries are painful. Schema variance, freshness skew (one product is hourly, another is daily), naming inconsistencies, joining across federated stores — all add friction to cross-domain analytics. Mitigation: federated computational governance enforces schema standards; the platform provides a unified query layer (Trino or BigQuery datasets); cross-domain product owners create explicit “integration products.”
Governance committee that becomes a bottleneck. Some shops interpret “federated computational governance” as “centralized governance committee,” which is exactly what mesh tries to escape. Symptoms: every schema change requires committee review; product registration takes weeks. Mitigation: governance must be automated, not human-gated. Policy-as-code, automated checks, exceptions handled async.
Data product owner role is unstaffed. Mesh requires a data product owner per domain — often a hard role to recruit for. Without it, products drift, SLAs are not enforced, consumers don’t know who to escalate to. Mitigation: explicit role definition, executive sponsorship, training programs.
Schema evolution chaos. With dozens of data products evolving independently, downstream consumers break unpredictably. Mitigation: schema registry with backward-compatibility checks; Iceberg/Delta schema evolution rules; consumer-driven contract testing.
Discovery without trust. The catalog lists 500 products but consumers don’t trust most of them — quality is uneven, ownership is unclear, documentation is thin. Mitigation: product certification levels (gold/silver/bronze), explicit data quality scores in the catalog, consumer ratings.
Cross-cutting concerns (PII, retention, cost) drift. Each domain handles compliance differently. PII handling in marketing differs from payments. Retention varies. Cost optimization is per-domain. Mitigation: federated computational governance — these policies are encoded as automated checks, not optional best practices.
Premature meshification at small scale. A 50-person company adopts mesh because Dehghani’s book is in vogue. The federation overhead exceeds the bottleneck pain (which doesn’t yet exist). Mitigation: stay centralized until the bottleneck is real. Mesh is a scale architecture.
Org chart misalignment. The architecture matches the desired org structure, not the actual one. Conway’s Law strikes back — the architecture pulls toward the actual structure regardless. Mitigation: architectural change must be paired with org change; without org change, mesh adoption stalls.
Cross-domain product ownership ambiguity. Some products span multiple domains naturally — “customer 360” combining Marketing, Payments, and Support data. Who owns it? If no domain claims it, it falls through the gaps. If multiple domains claim it, ownership is contested. Mitigation: explicit “data integration domain” charter for cross-cutting products, with its own team and budget, treated as a domain in its own right.
Discovery without quality scoring. A catalog with 500 products is overwhelming if every product is presented identically. Without quality / certification levels (e.g., “gold certified,” “experimental,” “deprecated”), consumers can’t tell what to trust. Mitigation: explicit certification levels in catalog metadata, with criteria and review processes.
Schema-evolution coordination across consumers. A producer evolves their data product’s schema; downstream consumers break. Mitigation: schema registry with backward-compatibility checks, consumer-driven contract testing, deprecation periods for breaking changes (3-6 months minimum), explicit versioning of products.
Cost attribution for cross-domain queries. A query joining 5 products across 5 domains — who pays for the compute? Without explicit cost attribution, costs land on the platform team’s budget; with cost attribution, the consumer team bears it. Both can be correct depending on the org. Mitigation: explicit cost-attribution rules baked into the platform’s query layer.
10. Comparison With Sibling Architectures
| Architecture | Ownership | Storage | Governance | Best for |
|---|---|---|---|---|
| Data Warehouse | Central data team | Proprietary columnar | Centralized | Structured, governance-critical |
| Data Lake Architecture | Central data team | Object storage | Often weak | Heterogeneous, exploratory |
| Lakehouse (Iceberg/Delta) | Central data team | Object storage + table format | Centralized + automated | Modern unified, central ownership |
| Data Mesh | Federated to domains | Variable | Federated computational | Large org with domain teams |
| Polyglot Persistence | Per service / per use case | Heterogeneous | Per-store | Operational diversity |
The mesh-vs-lake axis is “ownership: central vs federated,” and the architectures are largely orthogonal — mesh can be implemented on a lake substrate, on a warehouse, or on a polyglot federation. The lake addresses storage cost and flexibility; the mesh addresses ownership and bottleneck. Most modern large-enterprise architectures combine both: a lake substrate with mesh-style domain ownership layered over it.
For comparison with the lake’s centralized model, see Data Lake Architecture §10. For the polyglot perspective, see Polyglot Persistence.
11. Interview Discussion Points
“What is a data mesh?” A federated data architecture where each business domain owns its data as a product, with a central platform providing self-serve infrastructure and federated governance keeping the federation coherent. Coined by Zhamak Dehghani 2019-2022.
“What are the four principles?” Domain-oriented decentralized data ownership and architecture, data as a product, self-serve data infrastructure as a platform, federated computational governance. The 2020 essay also introduces the data product as the architectural quantum — the unit-of-deployment framing that makes “data as a product” implementable rather than aspirational.
“Why not just have a central data team?” Centralized teams become bottlenecks at scale. They lack domain knowledge, can’t move at the speed of operational teams, and produce data that’s stale or wrong because the people fixing it aren’t the people who understand it. Conway’s Law: a centralized data team produces a centralized monolith mismatched with a federated business.
“How is mesh different from a lake?” Lake is a technical architecture (object-storage substrate, schema-on-read); mesh is an organizational architecture (federated domain ownership). They are orthogonal — mesh can be implemented on a lake. Lake addresses storage cost and flexibility; mesh addresses ownership and bottleneck.
“What’s the platform’s role?” Provide self-serve infrastructure so domain ownership is cheap: catalog, ingest tooling, compute substrate, governance automation, observability. Without a strong platform, mesh becomes 50 incompatible silos.
“What is federated computational governance?” Governance encoded as automated policies (PII detection, retention enforcement, schema standards) that run continuously across all data products. Domain teams have local autonomy within the federated rules. The “computational” part is what distinguishes it from a governance committee.
“When does mesh fail?” When the platform is weak (silos proliferate), when domain teams lack data-engineering capability (products are low quality), when ownership migration is skipped (mesh becomes lake with extra meetings), when scale doesn’t justify the federation overhead (premature meshification).
“How do cross-domain queries work?” Federated query engine (Trino is the canonical choice) joins across domain-owned products. Schema variance and SLA variance are friction points; federated governance mitigates them via schema standards.
“Compare to microservices.” Mesh is to data what microservices is to operational systems — federated ownership with platform support and contract-based interfaces. Both invoke Conway’s Law as their justification.
11.05 Worked example — a 200-engineer e-commerce company adopting mesh
To make the architecture concrete, walk through what mesh adoption looks like at a specific scale: a 200-engineer e-commerce company restructuring its analytical data platform around mesh principles. This scale is roughly the threshold at which mesh begins to make sense (smaller is premature; much larger is similarly mesh-shaped just with more domains).
Company profile. ~200 engineers, ~$500M annual revenue, 4 years old, 2 years past Series C, ~2,000 employees overall. Engineering is organized into ~10 product domains: Customer (accounts, identity), Catalog (products, inventory), Order (transactions), Shipping (logistics), Payment (transactions, refunds), Marketing (campaigns, segments), Search (product search), Recommendations (ML personalization), Support (CRM, tickets), Analytics (executive reporting). Each product domain has 15-25 engineers including 1-2 designated as “data product owners” post-mesh-adoption.
Platform team formation. Pre-mesh, the data engineering team is ~12 engineers operating a centralized Snowflake warehouse with custom ETL. Post-mesh, the team splits: 6 form the “data platform team” responsible for the substrate (catalog, ingest tooling, compute, governance), 6 disperse into domain teams as embedded data product engineers (1 per major domain). The platform team’s first six months are spent building the substrate before domain teams start publishing.
Substrate choices. S3 + Apache Iceberg as the storage layer (lakehouse). DataHub as the catalog. Apache Kafka for the streaming spine, with Confluent Schema Registry. dbt project templates as the standard transformation framework. Trino for federated SQL queries across data products. OpenLineage for lineage tracking. Apache Ranger for fine-grained access control. Great Expectations for automated quality checks. The choices reflect 2024+ mesh-aligned tooling; some shops use proprietary alternatives (Atlan instead of DataHub, Databricks Unity Catalog instead of standalone DataHub).
Domain data products.
The Customer domain owns:
customer.profile— customer master record (account creation, profile updates, preferences). Primary store: Postgres. Materialized via CDC into the lake. SLA: 5-minute freshness, 99.9% availability.customer.events— login, signup, profile-update events. Stream-published to Kafka topiccustomer.events. SLA: real-time (< 5s lag), 99.99% throughput SLA.customer.segments— derived customer segments (loyalty tier, lifecycle stage). Computed by Customer team’s dbt models. SLA: hourly refresh.
The Catalog domain owns:
catalog.products— product master (id, name, attributes). Primary store: MongoDB. CDC to lake. SLA: 5-minute freshness.catalog.inventory— current stock levels. Primary store: Postgres. CDC to lake. SLA: 1-minute freshness.catalog.events— product views, add-to-cart, browse history events. Kafka stream.
The Order domain owns:
order.orders— order master (id, customer_id, total, status). Primary store: Postgres. SLA: 1-minute freshness.order.line_items— order line items. Primary store: Postgres. SLA: 1-minute freshness.order.events— order lifecycle events (created, paid, shipped, delivered, returned). Kafka stream.
The Shipping domain owns:
shipping.shipments— shipment master (carrier, tracking, status). Primary store: Postgres.shipping.events— pickup, in-transit, delivery events. Kafka stream.
Each domain similarly owns 2-5 data products. Total: ~30 data products across the 10 domains.
Cross-domain query patterns via Trino. A typical query joins 3-5 data products. Example: “For customers in the high-value loyalty tier, what is the order conversion rate by product category over the last 30 days?” SQL:
SELECT cat.category, COUNT(DISTINCT cust.customer_id) AS customers,
COUNT(DISTINCT ord.order_id) AS orders
FROM customer.segments cust
JOIN order.orders ord ON cust.customer_id = ord.customer_id
JOIN order.line_items li ON ord.order_id = li.order_id
JOIN catalog.products cat ON li.product_id = cat.product_id
WHERE cust.loyalty_tier = 'high'
AND ord.created_at >= NOW() - INTERVAL '30 days'
GROUP BY cat.category;Trino federates the join across the lake-resident Iceberg tables for each data product, applying partition pruning per table. Cross-domain joins are first-class operations.
Platform team’s offering to domain teams. The platform provides:
- A
dbt-mesh-templaterepository that domain teams clone to scaffold a new data product (with conventions baked in). - Automated CI/CD that runs schema-compatibility checks, quality tests, and PII scans on every PR.
- Catalog registration is automatic via dbt manifest parsing — every dbt model becomes a data product.
- OpenLineage integration captures every dbt model’s inputs and outputs.
- Standard SLA monitoring dashboards per data product.
- Per-domain Trino queue for cost isolation.
Federated computational governance in practice. PII detection scans every new data product for potential PII fields (email, phone, address) and either requires explicit annotation (this field is PII, hash it) or rejects the registration. Schema changes are validated against the registry; backward-incompatible changes require a 6-month deprecation announcement. Retention policies are encoded per-dataset; deletion runs automatically. Cost attribution per-query routes BigQuery / Snowflake bills to the consuming team’s cost center.
Adoption timeline. Year 1: platform substrate built, 2-3 pilot domains migrate. Year 2: substantial coverage (~7 domains), platform team’s tooling matures based on feedback, governance automation expands. Year 3: full coverage, central data team’s residual ownership decommissions, mesh is the steady-state. Year 4+: continuous refinement, occasional new domain spin-up, platform team’s role evolves to incremental capability investment.
What this looks like operationally. The Customer team’s data product owner gets paged when customer.segments SLA breaches. The Recommendations team can self-serve data they need for new features without filing a ticket against a central data team. Cross-domain analytics queries run via Trino without coordination. New product domains can spin up data products in days using platform templates. Quality varies by domain (some teams invest heavily in data products; others minimally) but the variance is contained by the federated governance. Central data team’s backlog (previously 6+ months) drops to near-zero — the central team no longer owns most data work.
The cost. Building this took ~6 platform engineers full-time for 12-18 months before any domain ownership migration. Domain teams added ~1-2 engineering capacity per domain to handle the new data responsibilities. Total investment: ~$5-10M in engineering effort over 2-3 years. Hard to justify for a startup; clearly worth it for a 200-engineer company hitting central-team scaling pain.
This worked example illustrates that mesh is a substantial multi-year program, not a quarterly engineering project. The architectural change is real, the cost is real, and the benefits accrue gradually as adoption deepens. Shops that adopt mesh as a label without the underlying investment produce “mesh on paper, swamp in practice” outcomes that are worse than the centralized status quo they replaced.
11.1 Worked example: a marketing data product
To make the abstraction concrete, consider what a “marketing data product” actually contains in a data-mesh shop.
Identity. Name: marketing.customer_segments. Owner: Marketing Domain → Customer Insights Team. Data Product Owner: Jane Smith (named individual). Slack channel: #data-product-customer-segments.
Schema. Versioned in a schema registry (Confluent or Apicurio). Current schema: customer_id (UUID), segment_id (string enum), segment_name (string), assigned_at (timestamp), confidence_score (float). Backward-compatible evolution allowed; breaking changes require a 6-month deprecation period and a major-version bump.
Storage. Materialized in two forms: a Snowflake table (for analytical queries from BI tools) and a Kafka topic (for streaming consumers). The Snowflake table is updated hourly via dbt models running over operational MySQL CDC. The Kafka topic carries the same updates as a stream.
SLAs. Freshness: 95% of customer-segment assignments are visible within 1 hour of the operational event that triggered them. Completeness: > 99.9% of customers have a segment assignment. Availability: 99.9% query availability.
Documentation. Catalog page describes: what segments exist, how they’re computed, what the confidence score means, sample queries, common pitfalls (e.g., “the ‘inactive’ segment includes both deliberately-churned users and users we lost track of; don’t infer churn intent from this segment alone”).
Access control. Default-read for all data scientists in the company. PII fields (email, phone) hashed; the unhashed forms are restricted to a smaller group with explicit access grants.
Quality monitoring. Automated checks run hourly: row count is within expected range (no sudden drops), schema matches registry, distribution of segment_id matches expectations (no segment dominates suddenly), no nulls in required fields. Failures alert the data product owner via PagerDuty.
Lineage. Catalog tracks: this product is derived from marketing.crm_events (via dbt models), marketing.campaign_responses (joined), and payments.transactions (consulted). Downstream: this product is consumed by recommendations.personalization_features, bi.executive_dashboard, and the ML training pipeline ml.churn_prediction.
Cross-domain interaction. When the Recommendations team needs new fields, they file a request against this product (not against the Marketing operational team). The Customer Insights Team prioritizes the request, implements it, releases under semver. This decoupling of operational team and data product team is what mesh enables.
This example illustrates the difference between “a table the marketing team happens to expose” and “a marketing data product.” The product has explicit ownership, contracts, monitoring, lineage, and consumer relationships. Without these, mesh degenerates into “data lake with extra meetings.”
11.2 The “rebranded microservices for data” critique — engaging it honestly
The most common substantive critique of data mesh is that it is “microservices for data” with the same Conway’s-Law motivation, and that calling it a new architecture is overselling. The critique deserves an honest engagement.
What the critique gets right. The conceptual structure of mesh — federated ownership with platform support, contract-based interfaces, automated governance — is genuinely the same shape as microservices. Both invoke Conway’s Law as their justification. Both require strong central platform investment. Both have analogous failure modes (silo proliferation without governance, ownership migration that doesn’t actually happen). The “microservices for data” framing is not inaccurate.
What the critique misses. Microservices’ principles, applied to operational systems, took a decade to develop the supporting tooling (service mesh, observability, deployment automation). Data has its own tooling needs that don’t map cleanly to operational microservices: catalogs and lineage are unique to data; streaming substrates (Kafka) are more central in data than in operational systems; query federation across stores has no clean operational parallel. Mesh’s contribution is the application of federated-ownership principles to data, plus the recognition that the supporting tooling is data-specific. The novelty is not the principle but the synthesis.
The “data lake with extra meetings” critique. A more pointed version: shops that adopt mesh without changing ownership produce the same centralized lake with renamed components. This critique is correct as a description of failure mode — it accurately describes what bad mesh adoption looks like. But it is not a critique of mesh as designed; it is a critique of mesh as poorly implemented. The four principles, taken seriously, are not “rename the lake” — they are a substantial reorganization of data ownership that requires multi-year executive sponsorship.
The honest framing. Mesh is best understood as the synthesis of microservices’ federated-ownership principle with data-specific tooling and governance discipline. The novelty is the synthesis, not the underlying principles. The architecture is real, the benefits at scale are real, and the failure modes (when adopted poorly) are also real. A candidate who acknowledges the “microservices for data” critique while articulating what mesh adds beyond it demonstrates the architectural honesty that senior interviews probe for.
11.3 Mesh adoption rates and the cautionary tales
Public mesh adoption case studies have produced both successes (Zalando, Netflix, JP Morgan, Booking) and cautionary tales worth flagging.
Successful adoption pattern. Strong platform team funded explicitly for the mesh migration; executive sponsorship for the ownership change; mature engineering culture with existing service-ownership discipline; organizational scale where centralized bottleneck is real (typically 100+ engineering teams); 18-36 month timeline with explicit milestones.
Failed or stalled adoption pattern. No platform team or under-resourced platform team; “mesh” adopted as a label without ownership change; insufficient executive sponsorship for the organizational change; premature adoption at smaller scale where the federation overhead exceeds the benefit; aspirational governance that never gets automated; data product owner role unstaffed.
The interview-relevant point: mesh’s success is highly dependent on organizational readiness, not just architectural correctness. A candidate who articulates this dependency demonstrates the operational realism that distinguishes architectural literacy from architectural enthusiasm.
12. Pitfalls Worth Repeating in an Interview
- “Mesh that’s actually just a lake with extra meetings” is the most common failure mode.
- Without a strong central platform, mesh devolves into 50 incompatible silos.
- Federated governance must be automated, not committee-driven.
- Cross-domain queries are friction-heavy; budget for the friction.
- Mesh is a scale architecture; premature adoption at small scale is wasted effort.
- Domain teams need data-engineering capability — recruit or train explicitly.
- Org change must accompany architecture change; Conway’s Law is unforgiving.
13. See Also
- Data Lake Architecture — the centralized predecessor; orthogonal substrate choice
- Polyglot Persistence — sibling pattern at the per-service level
- Lambda Architecture — historical batch + speed; can be implemented per domain in a mesh
- Kappa Architecture — streaming alternative; can underlie domain pipelines
- Real Time Analytics System Design — domain-owned analytics products
- Distributed Log System Design — Kafka, often the spine of streaming-first mesh
- Microservices Architecture — sibling organizational architecture for operational systems
- Conway’s Law — the meta-observation underlying mesh
- Domain-Driven Design Strategic Patterns — the bounded-context framing mesh borrows
- Google File System Design — historical lake substrate
- Amazon S3 Object Storage System Design — modern lake substrate often underlying mesh
- Distributed Key Value Store System Design — operational storage in a domain
- Distributed SQL Database System Design — operational storage in a domain
- Feature Store System Design — sibling architecture for ML serving; can be a domain product
- Distributed Search System Design — sibling system; search index as a data product
- LSM Tree — operational storage primitive
- B+ Tree — operational storage primitive
- Inverted Index — for search-product mesh implementations
- Event Sourcing Pattern — fits mesh well; per-domain event streams
- System Architectures MOC
- SWE Interview Preparation MOC