Worked example · anonymised and illustrative · the shape of an engagement, not a past result

Data platforms · Gulf retail group

Lakehouse migration: a dozen legacy marts to one Iceberg catalogue, with zero reporting downtime as the gate.

Many marts, several owners, no lineage, a compute bill nobody can explain. The plan is the lineage map; the gate for every cut-over is a signed reconciliation report; the number we would be paid on is reporting outages during the parallel run, which must be zero.

Sector
Retail
Setting
United Arab Emirates
Duration
12 weeks
Team
Both founders
Commercials
Fixed price, milestone-billed

0 outages
during the parallel run: the gate for every cut-over
≥ 99.9%
row-level reconciliation match required before a mart is decommissioned
AED ∕ mo
monthly warehouse compute, measured before and after, with a target agreed at gate 2

12-week plan

  • Discovery & lineage map: build weeks 1–2
  • Iceberg catalogue & IAM: build weeks 2–4
  • Mart migration, dependency order: build weeks 4–8
  • Parallel-run reconciliation: verify weeks 5–10
  • Cost governance & alerts: build weeks 7–8
  • Cut-over & decommission: cutover weeks 10–11
  • Handover & on-call shadow: build weeks 11–12
  • Gates: sign-off weeks 2, 4, 6, 10, 12

Build Verify Cut-over Sign-off

The situation this is written for

Reporting that runs on a dozen or more marts accreted over years across two warehouse vendors. Month-end close depends on a chain of scheduled jobs nobody can draw on a whiteboard, and the compute bill has doubled without anyone deciding that it should.

How we would run it

Two weeks of discovery produce the first lineage map the group has had: every mart, every upstream job, every downstream report, with owners. That map is the migration plan and the costed proposal. We stand up an Apache Iceberg catalogue with IAM mapped to the existing finance, merchandising and supply-chain roles, then migrate marts in dependency order.

Every migrated mart runs in parallel with its predecessor before it is cut over, the earliest for six weeks and the last for at least two. A reconciliation job compares row counts, checksums and a sample of business-level aggregates nightly and publishes the result to a dashboard the finance director can read. Cut-over for each mart requires a signed-off reconciliation report; nothing is decommissioned on a verbal yes.

What you would be left with

Budget alerts per domain and a weekly FinOps note your platform lead writes themselves, a decommission schedule your team executes while we are on call, and an exit review that records what the lineage map got wrong.

Start with a two-week discovery sprint.

Same people scope and build. Numbers agreed up front, measured weekly, published at exit.