Back to blog

The Lakehouse Lie: You Changed the File Format, Not Who Owns the Schema

Sep 10, 2026
Series · Day 6
Data & Retrieval Engineering in 30 Days
View all lessons →
The Lakehouse Lie: You Changed the File Format, Not Who Owns the Schema

Day 6: The Lakehouse Migration That Didn't Change Who Owns the Schema

Here's the part nobody puts in the migration retro: eighteen months after cutting over to Iceberg, a product team asks for one new column on an events table — and it still takes two weeks, still routes through the same central team, still needs the same sign-off it needed on the old Hive warehouse. Iceberg didn't break that. It also didn't fix it, and that's the uncomfortable bit. A lakehouse is supposed to let many teams read and write independently. That's an ownership change, not a file-format change. Swap the storage engine and leave the org chart untouched, and you haven't built a lakehouse — you've built a faster warehouse with a better architecture diagram.

The ticket that survived the migration

I've watched this exact sequence play out at more than one company. A product team needs one new column on an events table. Before the migration: a Jira ticket to the data platform team, a schema review, a backfill plan, a two-week wait. Then comes the migration — new catalog, new open table format, a genuinely nice architecture diagram everyone's proud of. Eighteen months later, the same request goes to the same team, waits the same two weeks. The only thing that changed is the ticket now says 'Iceberg' instead of 'Hive.'

The bait-and-switch

Every lakehouse vendor pitch — Iceberg, Delta Lake, Hudi, take your pick — sells the same core idea: decouple compute from storage, adopt an open table format, let many teams write to the same data safely. That's the pitch. Here's what actually ships in most migrations:

  • Sold: any engine — Spark, Trino, Flink, DuckDB — can read and write the same table. Shipped: one team's Spark jobs still write it; everyone else reads through their API.
  • Sold: an open, engine-agnostic table format anyone can adopt. Shipped: the format is open, but the process to actually change a table isn't.
  • Sold: domain teams own their data as products. Shipped: domain teams file tickets to the same central team they filed tickets to before.
  • Sold: schema evolution is a first-class, safe operation baked into the format. Shipped: it's safe for the engine, sure — but still gated by a human process built for the old warehouse.

Why this happens: it's scoped as an infra project

Migrations get planned as a technical swap: move Parquet-in-a-warehouse to Iceberg-on-S3, cut over the ETL jobs, validate query parity, decommission the old cluster. That plan has a migration lead, a cutover date, a rollback strategy. It does not have a line item for 'who is allowed to add a column to table X.' Ownership is invisible in a migration plan, so nobody reopens the org-chart question. And if it's not on the plan, it doesn't get budget, doesn't get a decision-maker, doesn't happen. You end up with a brand-new storage engine wired to the exact same RACI chart you had in 2019.

The tell: one question exposes it

Skip the architecture diagram. Ask this instead: 'Who can add a column to this table without asking me?' If the honest answer is still 'nobody, they all go through my team,' you bought new storage for the old bottleneck. A genuinely decentralized lakehouse means a domain team can evolve their own table's schema, register it in the catalog, and ship — with governance guardrails, not a gatekeeper signing off on every single change.

What decentralized ownership actually requires

None of this lives in a Spark config or a catalog feature flag. It's a management decision, and it has three concrete parts:

  • Schema contracts per domain — each team publishes a contract (fields, types, compatibility guarantees) for the tables they own, so downstream consumers depend on the contract instead of tribal knowledge of one team's internals.
  • A catalog with real per-table ACLs — Unity Catalog, Polaris, Nessie, or whatever your platform offers — access and write permissions granted at the table or domain level, not 'everyone talks to the central team's service account.'
  • A team willing to give up gatekeeping — the hardest part by far. The central data team has to trade 'approve every change' for 'define the guardrails and audit compliance.' That's a role change, and role changes get resisted, because gatekeeping is also how that team currently proves it matters.

The AI-era twist: your bottleneck just got more expensive

This used to be tolerable because writing the migration PR, the backfill script, and the schema doc was itself slow — the human bottleneck on the authoring side roughly matched the human bottleneck on the review side. That symmetry is gone now. A coding agent can draft a schema migration, generate the backfill job, and open the PR in minutes. If your review process is still one team eyeballing every change by hand, you've just widened the gap between how fast a change can be proposed and how fast it can be approved. The queue gets longer, not shorter — agents are extremely good at generating tickets for a bottleneck that can't process them any faster. The fix isn't a smarter agent. It's the same fix as before: push the decision rights to the table owner, let the agent open a PR against a contract with automated compatibility checks, not a human gate. This is exactly why the multi-agent systems research I work on treats 'who owns this piece of shared state' as a first-order design question, not an implementation detail. An agent fleet writing to a shared store hits the identical failure mode as a data team: decoupled compute, centralized approval, same wait.

Where this is going next: Day 7

Fix the ownership problem and you've earned yourself a new one: multiple teams — increasingly, multiple agents — writing to the same tables concurrently, with no single team coordinating who writes when. Iceberg and Delta both give you optimistic concurrency control, but that's a mechanism, not a policy. Tomorrow: what happens when you actually get the many-writers world you asked for, and how to govern concurrent writes without quietly recreating the gatekeeper you just got rid of.

Run this diagnostic on your own org today

Find the last schema change that shipped on a table you don't own. Ask who approved it, and whether they actually needed to. If the honest answer is 'the same central team, out of habit, not necessity,' your lakehouse migration changed the file format and left the org chart exactly where it was.

Flashcards
Check yourself

Extend your knowledge

  • Read the access-control model docs for whichever catalog you run (Unity Catalog, Apache Polaris, or Nessie) and check whether your org actually uses per-table grants or just one shared service account.
  • Look up 'data mesh' by Zhamak Dehghani — the org-design vocabulary (domain ownership, data as a product, federated governance) maps directly onto this lesson's fix.
  • Audit your last five schema-change tickets: who approved each one, and could the requesting team have self-served with a contract plus automated compatibility check instead?
  • Come back for Day 7 on governing concurrent writers once ownership is decentralized — the problem this fix creates next.
Test yourself on this lesson

Discussion

Chat with Chi Cong (AI) about this article. Your conversation is private to you — you can publish a summary for others when you're done.

Ask me anything about “The Lakehouse Lie: You Changed the File Format, Not Who Owns the Schema” — trade-offs, decisions, or the story behind it.