Alex Merced's Data, Dev and AI Blog

Article

The Decoupled Data Lakehouse: Multi-Engine Freedom with Open REST Catalogs

Cross-posted. This article's canonical home is iceberglakehouse.com.

Every few years a data team discovers, mid-contract-renewal, exactly how much of their platform they do not control. The data sits in the vendor's format. The metadata lives in the vendor's catalog. The security policies exist only in the vendor's console. Moving any workload means moving all of it, and the vendor's pricing team knows that better than anyone. The technical name for this position is coupling, and the commercial name for it is the renewal quote.

The decoupled lakehouse is the architecture that ends that position, and it is buildable today with boring, shipping technology: open file formats on commodity object storage, an open table format on top, an open catalog protocol coordinating everything, and compute engines that come and go as workloads deserve. The piece that completed the picture, later than the others and more consequentially, is the Apache Iceberg REST catalog specification, which turned the catalog from the last point of lock-in into the interface that makes engine plurality practical.

This article is the architecture in full: what each layer decouples and why, why the catalog is the linchpin, what the REST protocol standardizes and what it deliberately leaves open, how security works when no single engine owns it, how to run multiple engines against one estate without chaos, and what decoupling honestly costs. A disclosure up front: I work at Dremio, a query engine vendor whose Open Catalog is built on Apache Polaris, a catalog project Dremio co-created with Snowflake, and I co-authored O'Reilly books on both Iceberg and Polaris. I am arguing for an architecture in which my employer's product is replaceable, which is either credibility or irony, and I will take either.

The Coupling Tax, Itemized#

To value decoupling accurately, price its absence. The classic data warehouse, cloud or on-premise, bundles five things that have no technical reason to be one product: storage of the bytes, the format of the bytes, the metadata describing the tables, the compute that queries them, and the governance controlling access. The bundle is genuinely convenient, one vendor, one bill, one console, and the convenience compounds into four taxes that platforms pay for years.

The first is the migration tax, and it prices everything else. When data lives in a proprietary format readable only by the vendor's compute, every future architectural choice includes the cost of exporting, converting, and revalidating the estate. That cost grows with the data, which means the bundle gets stickier every day it runs, which is not an accident of the business model.

The second is the workload tax. No single engine is best at everything, and the bundle bills every workload at the bundled engine's rates regardless of fit. Interactive BI, batch transformation, streaming ingest, ad-hoc data science, and now AI retrieval have different performance profiles and wildly different economics, and a bundled platform flattens them into one price sheet. Teams see this most vividly the first time they run a small experimental workload and pay warehouse rates for it.

The third is the innovation tax. New engines, new acceleration techniques, and new workload types appear constantly, and a coupled platform adopts them at its vendor's pace or not at all. The last few years made this tax visible to everyone: the AI wave produced new consumers of analytical data, native libraries, agent frameworks, embedded engines, and coupled estates watched from behind their export APIs while open estates just pointed the new tools at their tables.

The fourth is the governance tax, the subtle one. Policies defined inside one vendor's console govern only that vendor's access paths. The moment a second system needs the data, governance either duplicates, with drift as a permanent condition, or the second system tunnels through the first, paying its rates and inheriting its limits. Security teams end up defending N copies of the truth about who reads what.

None of this says bundled platforms are irrational purchases. It says the bundle has a price beyond the invoice, the price is architectural optionality, and for a decade there was no credible way to decline it. The decoupled stack is the credible way.

The Stack, Layer by Layer#

The decoupled lakehouse separates the warehouse bundle into layers with open interfaces between them, and the discipline that makes it work is simple to state: every layer is replaceable because every seam is a standard.

Layer Role Open standard at the seam
Object storage Durable, cheap bytes S3-compatible APIs everywhere
File format Columnar data encoding Apache Parquet
Table format Tables, snapshots, schema, statistics Apache Iceberg
Catalog Table discovery, commits, access Iceberg REST catalog protocol
Compute Query, transform, ingest Any engine speaking the layers below
Semantics Metrics, models, meaning Views, semantic layers over the same tables

One more decoupling belongs in the picture even though it sits between layers rather than in one: getting data in without copying it around. The estates that go furthest pair the open stack with federation, querying operational databases and external systems in place and joining them against lakehouse tables, so that data enters the estate when it earns permanence rather than because a pipeline exists. Zero-copy access patterns, external tables in both directions between warehouses and the lakehouse, and catalog federation across business units all serve the same principle from different angles: the fewer copies of data an architecture requires, the fewer synchronization problems, staleness windows, and governance duplications it carries. Decoupling is usually described as freedom to swap components, and its quieter benefit is freedom from moving data to satisfy them.

Storage decouples first and easiest: object stores are commodities with compatible APIs across clouds and on-premise systems, and the economics of that commodity, durability at fractions of a cent per gigabyte, is the foundation everything above rents.

The file and table formats decouple the data from any engine. Parquet means every tool on earth parses the bytes. Iceberg means every tool sees the same tables: the same snapshots, the same schema history, the same statistics for pruning, with atomic commits and time travel as format properties rather than engine features. This pair is what makes the data itself neutral ground, and their war is over: Iceberg's ecosystem spans every major vendor, including the ones that fought it.

The remaining format question, Iceberg beside Delta Lake in mixed estates, is resolving in the same open direction: cross-format catalog support exists today, and the format communities' own convergence discussions point toward shared metadata structures in future versions. Architecturally the guidance is unchanged either way, because the decoupled stack's contract is at the seams, and both formats live behind the same catalog protocol in current implementations.

The catalog decouples coordination from compute, and the next section gives it the attention the linchpin deserves.

Compute, once the layers below are open, stops being an allegiance and becomes a portfolio. Engines attach to the catalog, do their work, and detach, and the estate persists untouched underneath. This is the freedom the article's title promises, and it is worth being precise that the freedom is bidirectional: adding an engine is cheap, and removing one is possible, which changes vendor conversations more than any single technical feature.

Semantics deserve their line in the stack because meaning is the next thing worth decoupling: metric definitions, business models, and governed views that live above any single engine, so that "revenue" computes identically everywhere. The semantic layer is younger as a decoupled standard than the rest, and it is where the same pattern is now playing out, driven hard by AI consumers that need meaning, not just bytes.

Why the Catalog Is the Linchpin#

For years the lakehouse pitch had a quiet weakness that practitioners knew and slides omitted. Open formats made data readable by every engine, and coordination still lived somewhere, and that somewhere was fragmented: a Hive Metastore here, a cloud-specific catalog there, each engine shipping its own connector for each catalog type, and the connector matrix growing multiplicatively. Worse, the catalog is where the estate's most valuable coordination happens, and whoever owned it owned the real switching costs. Openness at the format layer with coupling at the catalog layer was lock-in with extra steps.

Understand what the catalog actually does and the stakes become obvious. The catalog answers "where is the current metadata for this table," which sounds clerical and is everything: it is the atomic pointer swap that makes commits safe, the arbiter when two engines write concurrently, the namespace that makes tables discoverable, and, in its modern form, the authority that decides who accesses what and hands out the credentials to do it. Every engine's correctness depends on agreeing with every other engine about the current state of every table, and the catalog is the agreement.

That is why the REST catalog specification is the most consequential piece of Iceberg infrastructure since the format itself. It standardizes the coordination layer as an HTTP protocol: any engine implementing the client speaks to any catalog implementing the server, and the connector matrix collapses from engines-times-catalogs to engines-plus-catalogs. The catalog becomes a component you choose, run, and, when justified, replace, with the tables never moving. Practitioners have demonstrated exactly that swap, the same tables on the same object storage served through different catalog implementations in succession, queries returning identical answers while only the coordination layer changed underneath. Five years ago that sentence described science fiction.

The clearest measure of the protocol's victory is who implements it now, and the answer is: the platforms that had the most to lose. The major clouds expose Iceberg REST interfaces over their native table services. The warehouse vendors that once treated open formats as exports now read and write Iceberg through open catalog integrations, with cross-vendor interoperability, one platform's engines querying another platform's tables through standard REST connection strings, shipping as production features rather than press releases. When the strongest bundles in the industry expose the open seam because their customers demand it, the seam has become table stakes, and an architecture standardized on it inherits interoperability with all of them at once.

The decoupling argument lands here with its full weight: the catalog is the last layer where lock-in can hide, so the catalog protocol is where openness had to win for the rest of the stack's openness to mean anything. It won. The remaining questions are what the protocol covers and how to architect on it, which is the rest of this article.

What the REST Protocol Standardizes, and What It Leaves Open#

Architecting on a standard requires knowing its edges precisely, because the edges are where vendors differentiate and where your portability planning has to look hardest.

The protocol standardizes the operational core. Namespace and table lifecycle: listing, creating, dropping, renaming. Metadata resolution: loading a table's current state. The commit path: engines propose changes, the catalog arbitrates and applies them atomically, including multi-table commits in current spec versions, which turned a long-standing warehouse advantage into an open capability. View definitions. And, most consequentially, the storage access handshake covered in the next section. An engine implementing this client surface gets the entire estate: that is the contract, and the ecosystem's breadth proves it, from distributed engines through embedded databases to Python libraries in serverless functions, all first-class citizens of the same catalog.

Two newer protocol capabilities show the direction of travel: the catalog absorbing work engines used to duplicate. Server-side scan planning lets an engine hand the catalog a query's requirements and receive the pruned file list, moving metadata traversal, and the caching of it, to the one component that serves every engine, a meaningful gift to lightweight clients that lack sophisticated planning layers. And pagination, statistics endpoints, and commit deconfliction features harden the protocol for estates with enormous tables and many concurrent writers. The catalog is becoming the lakehouse's control plane in the full sense, and the protocol is how that happens without re-coupling.

Now the deliberate silences, because they are load-bearing. The specification does not standardize authorization models: role-based access control, column masking, row filters, and policy grammars are implementation territory. It does not standardize lineage, audit formats, discovery experiences, or catalog federation. This is a reasonable scoping choice, standards that try to standardize governance philosophy tend to die of committee, and it has a consequence you must architect around: your policy definitions are the least portable part of your catalog choice. Switching catalog implementations moves your tables trivially and your governance rules manually. The mitigation is process, not protocol: keep policies as code in version control, expressed as declaratively as your catalog allows, so that a future translation is a compiler problem rather than an archaeology project.

The honest summary for decision-makers: the protocol guarantees your engines and your tables stay portable. Your governance configuration is a commitment to an implementation, made with eyes open, managed as code.

Security Without a Center: Credential Vending and Remote Signing#

The question security teams ask first about multi-engine architectures is the right one: if five engines touch the data, do five systems hold storage keys? The catalog-centric answer is no, and the mechanism is worth understanding because it inverts how lakehouse security worked for a decade.

The old model granted engines standing storage access: IAM roles or keys with broad, long-lived permissions on warehouse buckets, one grant per engine, reviewed annually and understood by nobody. Governance then lived inside each engine's SQL layer, which is exactly the N-copies-of-truth problem, and direct storage access quietly bypassed all of it.

Credential vending inverts the flow. Engines hold no storage credentials at all. When an engine loads a table through the catalog, the catalog checks its policy for that principal on that table, and, if access is granted, returns short-lived, tightly scoped storage credentials alongside the metadata, tokens good for this table's location, for minutes, minted through the cloud's temporary-credential machinery. The engine reads and writes with them, they expire, and the audit trail of who touched what accumulates in one place: the catalog. Policy lives once, enforcement covers every engine including the ones that do not exist yet, and the storage bucket's own permissions lock down to nearly nothing.

Remote signing extends the model for the sharpest requirements. With vending, an engine briefly holds a table-scoped token. With remote signing, it holds nothing: every individual storage request is pre-signed by the catalog, scoped to one file and one operation, so even a compromised engine process possesses no reusable credential. The cost is a catalog round trip per request, which is why this mode is reserved for the data that justifies it, and the ecosystem is converging on standard configuration for it, with signer endpoint properties aligning across catalog implementations so engines set it up uniformly.

Identity itself deserves one paragraph, because vending presumes the catalog knows who is asking. The pattern that works: every engine, job, and human authenticates to the catalog as a distinct principal through the organization's identity provider, service principals for machines, federated identity for people, with client credentials from a secret manager rather than baked into configuration. The principal-per-consumer discipline is what makes the audit trail mean something, "the Spark batch role read the orders table" instead of "the shared service account did everything," and it costs nothing extra at setup time and a re-onboarding project if retrofitted later. Set it up right on day one and the security review of every future engine addition becomes a form, not a meeting.

Step back and notice what happened architecturally: security decoupled from compute. The property that made the bundled warehouse defensible to security teams, one enforcement point, survived the unbundling by moving to the catalog, and it arrived improved, because the catalog enforces on every access path rather than only the SQL one. This, more than any performance argument, is what makes multi-engine architectures approvable in serious organizations, and it is the feature to scrutinize hardest when choosing a catalog implementation.

The Seam Nobody Draws: Views and Semantics Across Engines#

One seam deserves its own honesty section because it is where multi-engine estates actually leak, quietly and early: shared logic, not shared data.

Data sharing across engines is solved, and the sections above are the solution. Logic sharing is harder. SQL views defined in one engine's dialect do not execute identically in another's, and the Iceberg view specification, which stores view definitions with dialect awareness in the catalog, is the format-level answer, with engines progressively supporting it. It carries views a long way and cannot repeal the fact that dialects differ: a view leaning on one engine's functions is a view with a compatibility footprint, and estates should know which views travel and which do not.

Above views sit metrics and models, the definitions of revenue, active customer, and margin that the business actually argues about, and this is where the decoupling pattern is still being built out in the open. The practical guidance while it settles: define shared logic at the lowest layer that all consumers reach, prefer catalog-stored views in portable SQL for logic every engine needs, put engine-specific optimization in the engine that needs it while keeping the definition portable, and treat the semantic layer, wherever you host it, as the single source for metric definitions, with everything else referencing rather than redefining. The estates that skip this discipline discover it as a reconciliation project later, when two dashboards disagree about revenue and both are correctly computing their own definition.

The reason to face this seam early doubled recently: AI consumers are logic consumers. An agent answering business questions needs the governed definition of the metric, not just scan access to the table, which is exactly why semantic layers moved from BI convenience to architectural layer, and why the definitions you centralize now are the ones your future agents inherit instead of hallucinate.

Multi-Engine in Practice: A Portfolio, Not a Zoo#

Engine freedom degenerates into engine sprawl without a working theory of which engine earns which workload. The theory is short: match the engine to the workload's shape, let the catalog keep them honest, and review the portfolio like any portfolio.

The workload map that recurs across healthy deployments looks like this. Interactive analytics and BI concentrate on a warehouse-scale SQL engine with acceleration and a semantic layer, because dashboards need consistent sub-second answers and governed meaning, and this is where engines with reflections, caching, and semantic modeling earn their place. Heavy batch transformation runs on Spark or similar, because a decade of pipeline tooling and distributed shuffle maturity is not sentiment, it is capability. Streaming ingest belongs to Flink and its kin, committing continuously to the same tables the other engines read. Ad-hoc exploration, local development, and CI validation increasingly run on embedded engines like DuckDB, attaching to the same catalog from a laptop, which quietly became one of the pattern's biggest quality-of-life wins. Python-native pipelines and services use PyIceberg and native libraries directly for mechanical reads and writes that never needed SQL. And the newest column, AI retrieval and agent workloads, reads through whichever governed surface fits, semantic layers over the catalog for meaning-sensitive access, direct scans for bulk feature retrieval.

Portfolios also get reviewed, and the estate makes the review measurable in a way bundles never did. Because every engine attaches through the same catalog, per-workload cost and performance are comparable on the estate's own tables rather than on vendor benchmarks: run the candidate engine against the real workload with a read-only principal, measure, decide. An annual portfolio review with that method, each major workload re-validated against its engine and one credible alternative, keeps the mapping honest and keeps every vendor aware it is kept honest. Most reviews conclude with no changes, and the concluding is the negotiating power.

Three disciplines keep the portfolio from becoming the zoo.

Write topology is explicit. Any engine reading everything is free, and that is the point. Writing is assigned: each table has a designated writer type, streaming tables their stream jobs, batch tables their pipelines, with concurrent writers to one table being a designed decision, not an accident. Iceberg's optimistic concurrency makes concurrent writes safe, and safe is not the same as coordinated: two heavy writers fighting over commit order on one table is a performance problem you design away by assignment.

Maintenance is owned once. Compaction, snapshot expiration, and cleanup run under one owner per table, through a table maintenance service or a scheduled job, and never as a side effect of whichever engine noticed slowness. Multi-engine estates without this rule develop dueling compaction jobs within a quarter.

Capability skew is tracked. Engines adopt format features at different speeds, deletion vectors, newer types, view dialects, and the estate's format-version and feature decisions move at the pace of the slowest engine that matters. A one-page compatibility matrix, versions of each engine, format versions they read and write, updated when anything upgrades, converts an entire category of incidents into a lookup. This is the tax collected by the freedom, and it is small if paid deliberately and vicious if ignored.

The result, running well, is unremarkable in the best way: each workload on cost-appropriate compute, no engine bottlenecking another, additions trialed against real tables in an afternoon, and retirements executed without a migration project. The estate outlives every engine decision made against it.

What Decoupling Honestly Costs#

An architecture argued only by its benefits should not be trusted, so here is the bill, itemized by who pays it.

Integration ownership lands on the platform team. The bundled vendor's convenience was real: someone else made the pieces fit. In the decoupled stack, you choose the catalog, wire the engines, and own the seams, and while the REST protocol shrank that work enormously, shrank is not eliminated. The mitigation is that the seams are standards, so the work is configuration rather than connector development, and managed offerings exist at every layer for teams that want the architecture without the operations.

Governance sophistication becomes your project. The bundle shipped an opinionated governance experience. The open stack gives you enforcement machinery, vending, policies, audit, and leaves the opinions to you: what roles exist, how policies map to your organization, what the review process is. Teams migrating from mature warehouse governance feel this gap first, and closing it is organizational work no vendor sells.

The paradox of choice is real. Every layer having options means every layer having a decision, and decision quality varies with team maturity. The defense is the boring one: default hard to community standards at every seam, treat exotic choices as requiring justification, and remember that the architecture's whole point is that a wrong choice at any single layer is correctable.

And some capabilities genuinely trail the best bundles. The tightest vertical integrations, a vendor's engine exploiting its own catalog's private hints, automatic optimization loops tuned across the whole bundle, exist because coupling enables them, and the open stack reproduces them a beat later through protocol evolution, server-side planning being the current example. If a bundled capability is decisive for your workload today, that is a real argument, to be weighed against the taxes from the first section with actual numbers.

The honest total: decoupling trades vendor dependence for platform responsibility. That trade is a bargain for organizations with platform engineering capacity and a deliberate choice to defer for those without it, and the managed-open middle path, open formats and protocols underneath, vendor operations on top, exists precisely because the trade should not be all-or-nothing.

Who should make which choice follows from the bill. Organizations with a platform engineering function and multi-year data gravity, most mid-size and larger companies, come out ahead on the open stack, usually within the first renewal cycle, and the managed-open path lets them phase in the operational ownership. Small teams without platform capacity are better served buying a bundle deliberately, with one adjustment that costs nothing: prefer bundles that store in open formats and expose the open catalog seam, because that choice converts a future migration into a future configuration change. The worst position is the unexamined one, paying decoupling's integration costs while accreting coupling's dependencies, and the yearly what-breaks-if-we-replace-this audit is the instrument that detects it.

Standing It Up: The Reference Shape#

Concreteness beats architecture diagrams, so here is the minimal working shape: one catalog, one warehouse of tables, three very different engines attached, everything speaking the same protocol.

Spark, carrying the batch pipelines, attaches through its catalog configuration:

spark.sql.catalog.lakehouse=org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.lakehouse.type=rest
spark.sql.catalog.lakehouse.uri=https://catalog.example.com/api/catalog
spark.sql.catalog.lakehouse.warehouse=prod
spark.sql.catalog.lakehouse.credential=SPARK_CLIENT_ID:SPARK_SECRET
spark.sql.catalog.lakehouse.header.X-Iceberg-Access-Delegation=vended-credentials

DuckDB, serving laptops and CI, attaches to the identical estate:

CREATE SECRET lakehouse_auth (
    TYPE iceberg,
    CLIENT_ID 'DUCKDB_CLIENT_ID',
    CLIENT_SECRET 'DUCKDB_SECRET',
    OAUTH2_SERVER_URI 'https://catalog.example.com/api/catalog/v1/oauth/tokens'
);
ATTACH 'prod' AS lakehouse (
    TYPE iceberg,
    ENDPOINT 'https://catalog.example.com/api/catalog'
);
SELECT count(*) FROM lakehouse.sales.orders;

And a Python service reads and writes through PyIceberg with the same handshake, as the serverless ingestion patterns elsewhere in my writing show in full.

Read what the sameness means. Three radically different engines, a JVM cluster, an in-process C++ database, a Python library, and one estate, one identity model, one policy surface, with each engine's principal granted exactly its role's access and every byte flowing through vended credentials. The BI engine and the streaming writer attach the same way with their own principals. Adding engine number six is a credential grant and a configuration block, and trialing it against production tables, read-only principal, real data, zero copies, takes an afternoon. That afternoon is the decoupled architecture's entire pitch made tangible: evaluation without migration, adoption without commitment, and an estate that treats engines as clients rather than owners.

The catalog behind that endpoint is a choice with real options, self-hosted open source implementations, managed offerings from multiple vendors, cloud-native services, and the architecture above does not change with the choice, which is the point of making the protocol the requirement. My detailed comparisons of the implementations live in separate articles, and the durable advice compresses to one sentence: require the full REST protocol including credential vending, keep your policies as code, and you have preserved the ability to revisit everything else.

A Worked Example: Unbundling Without a Big Bang#

The architecture reads as an end state, and nobody builds end states. Here is the incremental path, a composite of migrations I have watched succeed, with no invented benchmark numbers, because the sequencing is the transferable part.

The starting point is familiar: a cloud warehouse carrying everything, BI through transformation through exports, with costs growing faster than usage and an AI initiative generating new demands the export APIs handle badly. The team's constraint is the honest one, no downtime for the business, no big-bang cutover, and the warehouse itself stays for whatever it remains best at.

Move one stands up the open foundation beside the warehouse, not in place of it: object storage, a REST catalog with identity wired to the company's provider, and policies as code from the first table. New data lands here first, an ingestion feed or two that never enters the warehouse at all, and the first consumer is deliberately low-stakes, a data science team reading through an embedded engine. Nothing migrated yet, and the pattern is proven on real data.

Two practices from move one deserve emphasis because they compound silently. First, the policies-as-code habit starts with table one: every grant, role, and namespace in version control, applied through automation, reviewed like application code. The habit is nearly free at the start and unpurchasable later, and it is the mitigation for the protocol's governance silence discussed earlier. Second, naming and namespace conventions get decided before the second team arrives, domains as namespaces, environments separated, ownership recorded in table properties, because estates inherit their first month's conventions forever, and the decoupled estate's discoverability depends on the catalog being navigable rather than merely functional.

Move two puts the warehouse and the lakehouse on speaking terms, and this is where the last two years changed the game. The major warehouses and cloud platforms now read and write Iceberg through open catalog interfaces themselves, external tables, catalog integrations, and interoperability paths that were announcements in 2024 and are production features in 2026. Shared datasets move to Iceberg once and serve both worlds during the entire transition: the warehouse queries them as external Iceberg tables while open engines read them natively. The migration stops being a cutover and becomes a center-of-gravity shift, table by table, with rollback being "point the job back" rather than a restore.

Move three migrates workloads in cost order. Batch transformation moves to right-sized engines first, because it is the easiest to validate, outputs compare exactly, and typically the largest line item. Exploration and development move to embedded engines, mostly by developers voting with their laptops. BI moves when the semantic layer over the lakehouse reproduces the governed metrics, which is the workload where the semantic decoupling earns its place in the stack. Streaming ingestion arrives on its own engine, writing tables everything else reads. Each move is independent, reversible, and measured against the baseline captured before it.

The end state, several quarters later, is the portfolio from earlier sections, with the warehouse still present, smaller, doing the workloads where it genuinely wins, attached to the estate as one engine among several rather than as the landlord. The renewal conversation that eventually follows happens with the option to decline, which changes its arithmetic regardless of the outcome. And the AI initiative that started the whole reconsideration reads governed tables through the catalog like everything else, which is the quiet lesson of the whole exercise: the architecture was justified by flexibility toward futures nobody predicted, and the first unpredicted future arrived on schedule.

Failure Modes of Decoupled Estates#

Direct storage access, the original sin. Someone grants a job direct bucket permissions to unblock a deadline, and the estate now has a governance bypass that works perfectly and appears in no audit. Every access flows through the catalog is the architecture's one commandment, and it is enforced with storage bucket policies that deny everything except the catalog's vending machinery, verified quarterly, no exceptions culture required because the bucket policy is the culture.

The unowned catalog. The catalog is the estate's most important service and the newest, and platform teams sometimes run it with less rigor than they run a message queue. It deserves production treatment in full: high availability appropriate to the fact that all writes stop without it, backup and recovery of the metadata store rehearsed, upgrades tested against the engine matrix, and monitoring on commit latency and vending errors. Reads of already-planned data continue through most catalog outages, and the honest statement is that the catalog is a tier-one dependency, priced accordingly.

Version skew wearing a performance costume. An engine falls behind on format features, starts misreading or refusing tables, and the symptom shows up as user complaints in one tool. The compatibility matrix from the portfolio section is the entire cure, plus the rule that format-version upgrades are fleet decisions with a canary period.

Policy drift across implementations. A team runs two catalogs, on purpose or through acquisition, and policies diverge because the definitions live in incompatible grammars. Policies as code mitigates, federation-capable catalogs and meta-catalogs address discovery, and the strategic fix is fewer catalogs: the architecture wants one coordination point per estate, and every additional one should justify itself annually.

The migration that stalls at eighty percent. The final decoupling failure is incompletion: the easy workloads move, the hard fifth remains on the old platform indefinitely, and the organization pays both platforms' full operational costs forever, which is worse than either endpoint. The defense is set at the start: every workload gets a disposition, move, retire, or deliberately remain, with "remain" being a decision with an owner and an annual review rather than a default. An estate is decoupled when every coupling left in it is one somebody chose on purpose and can name the reason for.

Optionality theater. The subtlest failure: an organization adopts the open stack and then rebuilds coupling on top, proprietary transformations only one engine runs, semantics defined inside one tool, operational dependence on one vendor's extensions, while the slideware still says decoupled. The audit is one question asked yearly per layer: what breaks if we replace this? If the answer at any layer is "everything," that layer has quietly re-coupled, and naming it is most of the fix.

The Strategic Argument, Plainly#

Strip the technology away and the decoupled lakehouse is a position about time. Data outlives engines. The average large organization's data estate will outlive every compute vendor relationship it currently has, most of the tools that will eventually query it have not shipped yet, and the workloads that will matter most in ten years are unknown by definition. Architecture cannot predict any of that, and it can choose whether the estate meets the future as an open surface or as an export project.

The last three years are the argument's evidence. Nobody's 2022 platform roadmap included AI agents as first-class data consumers, and when they arrived, open estates pointed the new tools at their catalogs while coupled estates started negotiations. The next surprise consumer is equally unscheduled, and the architecture that absorbed the last one without a migration is the architecture that absorbs the next one.

The argument extends past clouds and vendors to jurisdictions, which is where a growing share of architecture decisions now start. Data residency requirements, sovereignty regulation, and air-gapped environments all reduce to the same architectural question: does the estate run wherever it must, on whatever infrastructure the requirement dictates? The decoupled stack answers structurally: S3-compatible storage exists on-premise, the catalog implementations run anywhere a container runs, and the engines follow, so the same architecture deploys in a sovereign region, a private data center, or a disconnected enclave with the components swapped and the design intact. Coupled platforms answer with their availability roadmap for your region. For organizations facing these constraints, and their number grows yearly, decoupling stops being a preference and becomes the prerequisite, which is a topic large enough that I treat it separately in my writing on air-gapped lakehouse deployments.

The commercial version is shorter. Every vendor in a decoupled estate, my employer included, retains your business by being currently best at something, because the cost of replacing any of them is a configuration change and a validation period. That is the correct relationship between a platform and its vendors, it is measurably reflected in how such customers are priced and treated, and it is available for the price of standardizing your seams.

Conclusion#

The decoupled lakehouse is what the warehouse bundle looks like after every layer learned to stand alone: commodity storage, open file and table formats, a standard catalog protocol carrying coordination and security, engines as a portfolio matched to workloads, and semantics rising above all of it. The REST catalog completed the picture by opening the one layer where lock-in still hid, and credential vending made the whole thing governable to a standard the bundles never actually met.

It costs what it costs, integration ownership, governance as your own project, discipline at the seams, and it buys the only durable thing in this industry: an estate that outlives its tools. Build the foundation beside what you run today, shift the center of gravity table by table and workload by workload, hold the one commandment about catalog-mediated access, and audit your optionality yearly. The engines will change. That is the design working.

Keep Going#

If this piece was useful, I go much deeper on every layer of this architecture in my books. Apache Iceberg: The Definitive Guide and Apache Polaris: The Definitive Guide from O'Reilly cover the table format and catalog layers in full, and Architecting an Apache Iceberg Lakehouse from Manning covers the platform decisions this article compresses. You can find every book I have written, across lakehouse architecture, Apache Iceberg, Apache Polaris, and AI, at books.alexmerced.com.

Newsletter

Get new posts in your inbox

Deep dives on Apache Iceberg, lakehouse architecture and applied AI. No spam, unsubscribe anytime.

Subscribe

Menu

Search

Type at least two characters.