A Tech PM's walkthrough of how a cloud data-warehouse migration is actually run.
Legacy SQL Server EDW at end-of-life — capacity-bound at peak, expensive to keep licensed, and nightly batch runs eating into business hours.
A wave-based hybrid Waterfall/Agile migration to Snowflake — rationalized scope, zero-tolerance reconciliation, and change management from day one.
Program scope & impact
Conflict resolution & governance
Every program has moments where competing priorities collide. Here are two illustrative scenarios — one with peers, one with executives — the governance tool I reach for, and what it protects.
Sales & Marketing domain leads demanded immediate Wave 1 prioritization for their functions.
Enforced dependency-first sequencing — shared dimensions before the facts that depend on them.
Dependency Matrix & RACI.
Zero upstream rework; a foundational, stable Wave 1 the rest of the program built on.
Week 2 of the dual-run surfaced a trailing-12-month renewal discrepancy — a UTC/timezone offset between on-prem SQL Server and the cloud ingestion layer — on the critical path to a cutover set before quarter close.
Held the Go/No-Go gate, root-caused it in the transformation layer, patched the timezone handling, and re-ran the dual-run to exact parity before greenlight.
4-week dual-run reconciliation · ARR & renewal parity sign-off.
Financial parity on ARR and renewals restored — and the planned cutover date held.
Every ambiguous call gets logged once — context, stakeholders, who's accountable, the governing artifact, and the resolution — so nothing gets re-litigated when timelines tighten.
| ID | Context | Stakeholders | RACI | Governance artifact | Final resolution & impact |
|---|---|---|---|---|---|
| DEC-014 | Wave sequencing | Sales / Marketing leads | A: Program Lead · C: Leads | Dependency Matrix | Sequencing logic enforced; prevented rework. |
| DEC-022 | Go/No-Go quality gate | Executive Committee | A: Program Lead · I: Execs | Zero-Tolerance Standard | Patch deployed; audit integrity secured. |
Beyond these two, conflict on a program this size is a signal of unaligned risk, ambiguous ownership, or resource contention. These are the plays I run, matched to the kind of conflict.
| When the conflict is… | The framework I use | How it plays out |
|---|---|---|
| Ambiguous authority or governance | RACI + Decision Log | Roles fixed in the charter; every ambiguous call logged with context, options, and the signing exec — so nothing gets re-litigated when timelines tighten. |
| Data vs. opinion on scope or design | Objective trade-off analysis | I reframe from preference to cost, risk, and schedule — full scope with a slip vs. a phased MVP on time — and let business priorities pick. |
| Cross-team dependency or resource contention | RAID escalation | Log the dependency and its impact, then escalate on metrics — "Team X's delay pushes Phase 2 by three weeks" — not on personal friction. |
| Competing executive agendas | 20-minute pre-conferences | Align Legal, Finance, and Engineering one-on-one before the steering meeting, so the group sign-off is a formality, not a debate. |
Go deeper on how I managed stakeholders, scored risk, and what I'd do differently — Stakeholder, Risk & Lessons Learned →
The mental model
Strip away the tooling and every EDW cloud migration is three tracks running in parallel — data, reporting, and people. Here's each one, source to target.
The lifecycle
The program moves through Waterfall phase gates — you can't cut over before you've built and reconciled — while build and test happen in Agile sprints inside each wave. Click into any phase.
How I map a 1,200-object inventory, establish governance, and build the wave strategy.
Translating legacy SQL to Snowflake and designing robust automated verification systems.
Running 5 waves across a delivery team while keeping legacy operations running.
Running zero-tolerance financial checks and managing executive sign-offs.
Transitioning the reporting user base, turning off legacy infrastructure, and controlling cloud cost creep.
The artifact library and the reusable principles behind running any migration.
How to read this
Rather than a tour of every object, this case study follows a single field — the Sales/Revenue close amount — through all five phases: how it's discovered, mapped, built, reconciled, cut over, and adopted. One thread makes an abstract lifecycle concrete.
The thread
dbo.FactOpportunity.CloseAmt → SALES.FACT_OPPORTUNITY.CLOSE_AMOUNT_USD
MONEY → NUMBER(19,4), normalized to USD. Owned by a Sales Finance SME. Watch for it in the green callouts on each phase page.