⏱ 19 min read
There is a particular smell to legacy data platforms. If you have spent any time around large enterprises, you know it. It is the smell of nightly batch jobs nobody wants to touch, warehouses fed by pipelines with names that outlived the people who built them, and business teams arguing over whose number is “right” while the architecture team pretends the issue is data quality. It usually is not. It is ownership quality.
That is the uncomfortable truth. Most data estates do not fail because ETL is technically weak. They fail because the model of responsibility is wrong. We took domain truth, stripped it out of the systems that understood it, pushed it through a maze of transformations, and hoped a central platform team could restore meaning at the other end. They cannot. Semantics do not survive arbitrary extraction.
So when people say “replace ETL,” I think they often aim at the wrong target. The enemy is not transformation. Every serious enterprise needs transformation, reconciliation, enrichment, and history management. The real shift is this: data platforms must be organized around domain ownership topology, not around pipeline mechanics. Domain-driven data platforms are not anti-ETL. They are anti-orphaned meaning.
That distinction matters.
The modern version of this idea often arrives wrapped in discussions of event streaming, Kafka, data products, lakehouses, microservices, and operational analytics. Those are useful tools. But the heart of the architecture is simpler and older: put business semantics under the control of the people who actually understand the business, and design the platform so those semantics travel intact. This is classic domain-driven design applied to data. Bounded contexts stop being just a software design concern and become the backbone of the information architecture.
If that sounds obvious, good. The best enterprise architecture usually sounds obvious after you have suffered enough.
Context
Traditional enterprise data platforms were built in an era of scarcity. Compute was expensive, storage was precious, and integration was centralized because it had to be. A small number of specialists extracted data from operational systems, transformed it into common shapes, and loaded it into a warehouse optimized for reporting. The model worked well enough when change was slow and the number of source systems was tolerable.
Then the estate sprawled.
A handful of applications became hundreds. SaaS joined packaged systems. Microservices appeared, at first at the edge, then in the center. Real-time expectations arrived before organizations were ready. Suddenly the “single enterprise model” looked less like a strategic asset and more like a diplomatic fiction. Sales, billing, underwriting, fulfillment, service, and finance all used the same words for different things. “Customer” was a frequent liar. “Order” was not much better.
This is where domain-driven design earns its keep. In DDD, a bounded context is the boundary within which a model is consistent and a term has a precise meaning. That is a powerful corrective to enterprise data architecture, which too often tries to force one canonical model across domains that should never have shared one in the first place. enterprise architecture with ArchiMate
A domain-driven data platform accepts that there is no universal truth model. There are domain truths, related through explicit contracts, translation, and policy.
That does not weaken governance. It makes governance real. EA governance checklist
Problem
Centralized ETL creates a dangerous illusion: that data can be made enterprise-ready far away from the source domain, by people who are structurally detached from the business decisions encoded in the data.
Sometimes they can. Usually they can only approximate.
Consider what happens in a classic hub-and-spoke integration model. Source systems emit tables or files. A central data engineering team maps them into staging, applies transformations, harmonizes keys, and lands them in a warehouse or lake. Over time, the warehouse becomes the place where the “real” enterprise definitions live. That sounds rational until the upstream domain changes a rule. Then three bad things happen.
First, the semantic change is discovered late because the central team sees structure before meaning.
Second, the impact ripples unpredictably because downstream consumers depend on derived data whose lineage is technically documented but conceptually obscure.
Third, accountability dissolves. Source teams say “we published what we had.” Platform teams say “we transformed according to the spec.” Consumers say “the number is wrong.” Everyone is correct and nobody is responsible.
The result is familiar: reconciliation teams proliferate, data quality dashboards bloom like weeds, and architecture diagrams get cleaner while operations get messier.
The root problem is not merely technical debt. It is that enterprise data movement has been designed as if ownership were incidental. It is not incidental. Ownership is topology. It determines where decisions are made, where invariants are enforced, and where failure is detected.
Forces
This architecture lives in tension with several forces that deserve honesty rather than slogans.
Need for domain semantics
The people closest to the business process understand the meaning of the data. They know what makes a policy active, when an order is considered fulfilled, why a claim can be reopened, and which customer status is provisional versus regulatory. Semantics belong near the domain.
Need for enterprise interoperability
The enterprise still needs cross-domain analytics, regulatory reporting, customer journeys, planning, and machine learning. Domain autonomy cannot become domain isolation. Data must compose.
Need for speed
Business teams want changes in days, not release trains measured in quarters. Centralized ETL turns every schema change into a coordination exercise. That does not scale.
Need for control
Security, privacy, retention, lineage, and audit are not optional. Decentralization without guardrails becomes entropy with a budget.
Legacy gravity
Core systems are old, politically protected, and often not event-native. Any target architecture that assumes greenfield behavior is architecture theatre.
Reconciliation reality
Different domains will disagree, and sometimes they should. Finance closes books on one set of rules; operations look at live state; customer service uses a practical snapshot. A mature data platform does not eliminate reconciliation. It makes reconciliation explicit, traceable, and owned.
These forces push against each other. Good architecture does not make them disappear. It arranges them into a shape the enterprise can live with.
Solution
The solution is a domain-driven data platform with ownership topology as the primary organizing principle.
That phrase carries a lot of weight, so let’s unpack it.
A domain-driven data platform structures data production, publishing, transformation, and consumption around bounded contexts. Domains publish data products that express domain events, state, and reference entities with clear semantics and contracts. Platform capabilities provide the common substrate: storage, streaming, cataloging, lineage, access control, policy enforcement, observability, and self-service tooling.
Ownership topology means the architecture makes it obvious who owns which truth, who is allowed to derive what, and where translation is expected. Instead of one giant ETL machine pulling data out of everything, each domain becomes accountable for exposing its data in forms fit for consumption. Some transformations remain local to the domain. Some happen in shared analytical spaces. But the ownership map is clear.
This is not the same as “every team dumps events onto Kafka and calls it done.” Event streams without semantic stewardship are just faster confusion. event-driven architecture patterns
A practical domain-driven platform usually has three data layers:
- Operational domain data products
Published by domains, close to source semantics. These may be event streams, CDC feeds, APIs, or curated tables. They are the authoritative representation of business facts within a bounded context.
- Cross-domain integration and reconciliation products
Built where multiple bounded contexts meet. These products do not overwrite source truth. They model enterprise relationships, survivorship, reference resolution, and policy-based reconciliation.
- Consumption-oriented products
Optimized for reporting, analytics, AI features, finance close, or regulatory submissions. These are downstream and explicit about derivation.
That layered model replaces monolithic ETL with a network of owned data products and platform-mediated composition.
The high-level topology
Notice what is absent: a single central team interpreting every source system on behalf of the enterprise. The platform team builds roads, not cargo. Domains move their own freight.
Architecture
A domain-driven data platform works when several architectural ideas reinforce each other.
1. Bounded contexts define data responsibility
The first design step is not choosing Kafka versus CDC versus batch. It is identifying bounded contexts and their information responsibilities.
For example:
- Sales owns quote, order intent, pipeline progression, and sales hierarchy semantics.
- Billing owns invoice, payment, tax treatment, and receivables semantics.
- Fulfillment owns shipment, inventory allocation, and delivery status semantics.
- Customer service owns cases, complaints, SLA breaches, and remediation semantics.
Each domain is responsible for publishing data products that represent these concepts in language the domain stands behind. That usually means versioned schemas, business metadata, data quality assertions, and named owners.
This is DDD in action. The ubiquitous language is not a workshop artifact. It shows up in topic names, table contracts, API documents, and lineage records.
2. Data products instead of raw extraction
A raw table dump is not a data product. It is a cry for help.
A data product should have:
- a clear purpose
- explicit ownership
- semantic description
- quality expectations
- access policy
- lifecycle management
- backward-compatible contract strategy where possible
This does not mean every product must be beautiful. Enterprises are messy. Some products will be coarse CDC streams from a mainframe mirror. But even then, the product needs declared meaning and stewardship.
3. Streaming where time matters, batch where economics matter
Kafka and event streaming are useful because they preserve order, support near-real-time propagation, and let multiple consumers subscribe without endless point-to-point integration. They are especially strong for operational visibility, domain events, audit trails, and incremental materialization.
But not every data movement problem deserves a stream. Historical backfills, daily finance extracts, and heavyweight analytical reshaping often remain batch-oriented. The right architecture is mixed-mode.
If a team insists everything must be event-driven, they are usually designing for conference slides. Enterprises pay for invoices, not aesthetics.
4. Reconciliation as a first-class capability
Cross-domain truth is rarely a simple join. It is policy.
Customer identity resolution, order-to-cash alignment, and financial close all require reconciliation rules. A domain-driven platform should make these explicit. Reconciliation products consume source products, apply survivorship or policy logic, and publish derived outputs with lineage back to source facts.
That is important because reconciliation is where hidden power often accumulates. In legacy ETL, the “business logic in the middle” becomes inscrutable. In a domain-driven platform, those rules are elevated into named, governed products.
One source fact, several legitimate enterprise views. That is not inconsistency. That is the enterprise telling the truth about its own complexity.
5. Platform as enablement, not central semantic authority
The central platform team still matters enormously. In many firms, it matters more after this shift, not less. But its role changes.
The platform team should provide:
- streaming infrastructure and connectors
- lakehouse or warehouse storage patterns
- schema registry and contract tooling
- metadata catalog and lineage
- access control and privacy enforcement
- quality monitoring and SLOs
- standardized publishing templates
- self-service provisioning
- cost controls and usage transparency
What it should not do is become the de facto owner of every business definition. Governance belongs in federated decision structures with domain accountability. ArchiMate for governance
6. Consumer-aligned projection models
Consumers need shapes that suit their work. Data scientists want feature-ready tables. Finance wants periodized, controlled datasets. Operations wants current-state views. Executives want aggregates with stable dimensions.
Those should be projection models downstream of domain data products, not excuses to erode source semantics. The source stays meaningful; the projections become useful.
Migration Strategy
No enterprise replaces ETL in one move. Any plan that suggests otherwise is either naïve or trying to sell a program.
The migration path is progressive strangler migration: surround the legacy ETL estate, replace slices of value, and gradually move authority outward toward domains and platform capabilities.
Stage 1: Map ownership before moving pipelines
Start by creating an ownership topology map:
- critical data entities
- bounded contexts
- source systems of record
- key downstream consumers
- current transformation hotspots
- known reconciliation pain points
Do not begin with tool selection. Begin with who knows what and who should own what.
Stage 2: Identify high-value seams
Look for seams where the current ETL estate is especially painful:
- repeated semantic disputes
- brittle hand-coded transformations
- long lead times for source changes
- heavy reconciliation effort
- operational use cases blocked by batch latency
Good candidates often include customer, order, shipment, claim, payment, and subscription lifecycles.
Stage 3: Publish domain data products alongside legacy ETL
This is the strangler move. Do not rip out the warehouse feed first. Instead, have selected domains publish authoritative products in parallel:
- Kafka topics for events
- CDC-curated tables for state changes
- domain-owned reference datasets
- versioned schemas with metadata
Legacy ETL can continue consuming those products or source extracts for a period. The key is that semantic authority starts moving toward the domain.
Stage 4: Build explicit reconciliation products
Once domain products exist, create enterprise reconciliation products for cross-domain processes. Make policy visible. This often reduces hidden logic buried in ETL jobs and stored procedures.
Stage 5: Redirect downstream consumers incrementally
Move consumer workloads one by one:
- operational dashboards first
- selected analytics marts next
- regulatory or finance workloads last, after confidence grows
Parallel run is essential. Reconcile old and new outputs, investigate variances, and decide whether differences are defects or corrected semantics.
Stage 6: Retire legacy transformations selectively
Some ETL jobs can be retired quickly. Others become historical backfill or archive logic. Be ruthless but not ideological. If a stable nightly batch still serves a low-volatility reporting use case economically, leave it alone until there is a reason to move.
Reconciliation during migration
This deserves special attention. During migration, reconciliation is not just a business capability; it is a migration discipline.
You need at least three kinds of reconciliation:
- technical reconciliation: row counts, completeness, freshness, duplicates
- semantic reconciliation: same business concept, old versus new definition
- financial or regulatory reconciliation: signed-off variance thresholds and exception handling
Too many programs discover late that the “new platform mismatch” is actually the first time anyone examined a legacy definition closely.
Enterprise Example
Consider a global insurer modernizing claims and policy analytics.
The insurer had:
- a policy administration platform in one region
- separate claims systems by line of business
- a billing package for premium and collections
- a CRM for customer interactions
- a large enterprise warehouse fed by nightly ETL
The warehouse team owned hundreds of mappings. “Active policy” had seven variants. Claims severity calculations were partly in source systems, partly in ETL, partly in BI tools. Every quarter, finance and operations spent weeks reconciling earned premium and open claims exposure.
The first instinct was to build a bigger lakehouse and rehost ETL. That would have preserved the same failure with better marketing.
Instead, the insurer reorganized around bounded contexts: Policy, Claims, Billing, Customer Interaction, and Partner Distribution. Each domain appointed data product owners alongside application owners. The platform team rolled out Kafka for event transport where available, CDC for packaged systems, a schema registry, catalog, lineage tooling, and standardized quality checks.
Policy published:
- policy issuance events
- endorsement events
- cancellation events
- current policy state snapshots
Claims published:
- claim opened, reserved, adjusted, settled events
- claim state and reserve position products
Billing published:
- premium invoice and payment products
- delinquency state
A separate reconciliation product for policy-to-premium-to-claims exposure was built with finance and actuarial stakeholders. Crucially, it was not declared “the truth” for all purposes. It was the truth for specified reporting and planning contexts under explicit policy rules.
What changed?
Lead time for introducing a new policy attribute into downstream analytics dropped from months to days in the policy domain. Claims reporting became more trustworthy because claims semantics stopped being reverse-engineered by a warehouse team. Finance still used periodized views, but those views were now derived with lineage and signed policy rules rather than opaque ETL logic.
The migration took two years, not two quarters. Several legacy marts survived. But the architecture changed shape: ownership became visible, and disputes moved from “whose extract is wrong?” to “which policy rule should apply?” That is a healthier argument.
Operational Considerations
This style of platform is elegant on paper and demanding in production. The hard work is operational.
Data contracts and versioning
Domains must evolve schemas safely. Breaking changes need clear version policy, consumer communication, and in some cases compatibility windows. Without this, domain autonomy turns into consumer fragility.
Observability
You need more than pipeline uptime. Watch:
- freshness
- completeness
- schema drift
- volume anomalies
- quality rule failures
- consumer lag for streaming platforms
- reconciliation variance trends
A green job status with semantically wrong data is still an outage. Just a political one.
Security and privacy
Federated ownership does not mean decentralized discretion over compliance. Central policy enforcement for PII, retention, masking, consent, and cross-border controls is essential. Good platforms make secure behavior the easy path.
Metadata discipline
If the catalog is optional, it will rot. Metadata capture should be embedded in publishing workflows. Ownership, business glossary links, lineage, and quality assertions are part of the product, not supplementary paperwork.
Cost management
Streaming, duplication, and multiple projections can create serious cost sprawl. Teams should see the cost of their products and consumers. Otherwise the platform becomes a distributed landfill.
Operating model
The hardest part is often organizational. Domain teams need product management skills for data. Platform teams need empathy for business semantics. Governance boards need to make policy quickly enough not to become a veto committee.
Tradeoffs
There is no free architecture. This one buys some things dearly.
What you gain
- better semantic fidelity
- clearer accountability
- faster local change
- improved lineage and explainability
- reduced hidden transformation logic
- better fit for event-driven and operational analytics use cases
What you pay
- more coordination on contracts
- duplicated effort across domains if platform standards are weak
- steeper metadata and governance burden
- more explicit reconciliation work
- organizational resistance from entrenched central teams
- need for stronger product thinking in technical teams
A centralized ETL shop is often inefficient, but it is legible. A federated data platform can be more adaptive, but only if the platform discipline is strong. Without that discipline, decentralization becomes an expensive form of ambiguity.
Failure Modes
Architectures usually fail in recognizable ways. Better to name them now.
1. Event theater
Teams publish low-quality events with poor semantics, no ownership, and no contract discipline. Kafka fills up. Trust drains out.
2. Domain fragmentation
Every microservice claims to be a domain and publishes its own “truth.” This confuses service boundaries with business boundaries. DDD is about bounded contexts, not class diagrams with budgets.
3. Platform weakness
The enterprise announces federated ownership but underinvests in tooling, lineage, security, and self-service. Domains are then asked to become data engineers by improvisation. They resent it, rightly.
4. Reconciliation denial
Leaders pretend domain autonomy eliminates the need for enterprise harmonization. It does not. It simply moves harmonization into named products and policies. Refuse this and shadow logic will return.
5. Governance relapse
A central body reasserts control by mandating a giant canonical model. The old ETL mindset returns dressed as standards.
6. Migration fatigue
The organization starts strong, then stalls with parallel worlds running indefinitely. Costs rise, confidence falls, and the architecture is blamed when the real issue was lack of retirement discipline.
When Not To Use
Not every organization needs this architecture.
Do not use a domain-driven data platform if:
- your environment is small, stable, and served perfectly well by a modest warehouse
- your domains are weakly differentiated and semantic disputes are rare
- you lack the organizational maturity for federated ownership
- your primary need is periodic reporting, not rapid change or operational data flow
- your source systems cannot practically support productized publication and there is no appetite to improve them
In a mid-sized company with a handful of core systems and one competent data team, a straightforward warehouse with well-managed ETL may be entirely adequate. Architecture should solve actual pain, not signal modernity.
Also, if the business will not assign real ownership, stop. Domain-driven data without domain ownership is just ETL with optimistic branding.
Related Patterns
Several patterns sit naturally beside this approach.
Data mesh
This architecture overlaps heavily with data mesh, particularly around data-as-a-product and federated ownership. The distinction I care about is emphasis: ownership topology anchored in bounded contexts and explicit semantic authority.
Event-driven architecture
Useful for propagating facts in near real time, especially with Kafka. But event-driven design is a transport and interaction style; domain-driven data is an ownership and semantics model.
CQRS and materialized views
Very relevant for building consumer-specific projections without corrupting source semantics.
Change Data Capture
Often the practical bridge for legacy systems. CDC is not elegant, but it is invaluable during migration. With stewardship, it can become a respectable transitional product.
Master data and reference data management
Still important. But in this architecture, MDM becomes one type of reconciliation and reference resolution product, not a magical source of universal truth.
Strangler fig migration
Essential. Replace capability slice by slice, not in one heroic cutover. Heroic cutovers mostly create heroic incident reports.
Summary
The old ETL-centered model asked a central team to do too much semantic heavy lifting too far from the business. It created warehouses full of data and organizations short on accountability. Replacing ETL is not about abolishing transformation. It is about relocating meaning.
A domain-driven data platform organizes data around bounded contexts, domain semantics, and ownership topology. Domains publish authoritative data products. Platform teams provide the roads: Kafka where real-time matters, lakehouse or warehouse storage where economics fit, governance, lineage, observability, and policy controls everywhere. Cross-domain truth is built through explicit reconciliation products, not hidden magic in the middle.
The migration is progressive, strangler-shaped, and unglamorous. It relies on parallel run, reconciliation, and ruthless clarity about who owns which business concept. Done well, it shortens lead times, improves trust, and turns enterprise data from an archaeological site into an operating model.
That is the real replacement for ETL: not a tool, but a topology.
Frequently Asked Questions
What is a data mesh?
A data mesh is a decentralised data architecture where domain teams own and serve their data as products. Instead of a central data team, each domain is responsible for data quality, contracts, and discoverability.
What is a data product in architecture terms?
A data product is a self-contained, discoverable, trustworthy dataset exposed by a domain team. It has defined ownership, SLAs, documentation, and versioning — treated like a software product rather than an ETL output.
How does data mesh relate to enterprise architecture?
Data mesh aligns data ownership with business domain boundaries — the same boundaries used in domain-driven design and ArchiMate capability maps. Enterprise architects play a key role in defining the federated governance model that prevents data mesh from becoming data chaos.