Migration with proof, not hope
Every migration proposal promises zero downtime. What separates them is whether anyone can demonstrate, row by row, that the target matches the source before the old system is switched off.
Migrations fail in predictable ways. Scope is estimated from a table count rather than from the logic embedded in stored procedures. Business logic that lived in the old platform is discovered halfway through. Nobody validates row-level equivalence, so a subtle difference in null handling or date truncation goes unnoticed until a quarterly report disagrees with last year. And the cutover is a weekend event with no rehearsal and no rollback plan.
We approach migration as a verification exercise that happens to involve moving data. The moving part is largely mechanical; the value is in proving equivalence and in handling the hundreds of small semantic differences between platforms that determine whether the numbers still match.
We migrate warehouses — Redshift or on-premise Teradata to Snowflake, BigQuery or Databricks — as well as transactional databases, Oracle to PostgreSQL, on-premise to cloud, and lake reorganisations from raw file dumps to governed Iceberg or Delta tables.
The commercial driver is usually cost or capability. Legacy warehouses with fixed node pricing cost the same at 3 AM as at 3 PM; modern platforms charge for what you use, and the median reduction we see is around 41% once queries have been tuned for the new engine. But the capability gain is often larger: semi-structured data handled natively, elastic concurrency during month-end, and data sharing without building an export pipeline.
Discovery: finding the logic nobody documented
The first phase is inventory, and it goes deeper than counting tables. We catalogue every object, but more importantly we profile actual usage: which tables are queried, by whom, how often, and which have not been touched in a year. In a typical estate, thirty to forty per cent of objects are dead — migrating them is pure cost, and identifying them early is one of the largest savings in the project.
Then we find the logic. Stored procedures, views, materialised views, scheduled jobs, external ETL, and — invariably — some transformation that happens in a spreadsheet after the report is exported. Each carries semantics that must be reproduced, and each may be subtly wrong today in ways that need a decision rather than a translation.
We also profile the data itself: row counts, cardinality, null rates, date ranges, distribution of key columns. This becomes the baseline for validation and frequently surfaces quality problems the organisation did not know it had.
The semantic differences that break migrations
Platforms differ in ways that look trivial and are not. Date and timestamp handling — time zones, truncation behaviour, what happens at daylight boundaries in source data collected internationally. Numeric precision and rounding, which changes financial totals in the third decimal and therefore in the annual figure. Null handling in aggregates and joins. String collation and case sensitivity, which changes join results. Empty string versus null, which Oracle famously conflates and PostgreSQL does not.
Each of these produces a small, plausible, wrong number. We handle them by cataloguing the differences relevant to your source and target pair up front, writing explicit translation rules, and then testing against real data rather than assuming.
This is also where we find that the old platform was wrong. On a recent Redshift-to-Snowflake project, a revenue figure differed by 0.3% and investigation showed the legacy query had been double-counting a category of returns since 2019. The migration did not create that problem; it exposed it. Handling that discovery well — surfacing it, letting the business decide, documenting the change — is part of the job.
In practice
Every engagement starts with a conversation, not a proposal template.
Thirty minutes with a senior engineer. You leave with an architecture sketch and an honest cost range, whether or not you hire us.
Dual running: the only credible way to prove equivalence
Both systems run in parallel for six to fourteen weeks. Data flows into both. Queries run against both. And an automated reconciliation compares outputs continuously — row counts by partition, control totals on financial measures, and full row-level comparison on critical tables.
Reconciliation results are published to a dashboard the business can see, so trust is built by evidence rather than assertion. A difference is investigated and either fixed or explicitly accepted with a documented reason. Cutover happens only when reconciliation has been clean for a defined period, typically three consecutive full reporting cycles.
We also shadow queries where possible: production queries are replayed against the target and results compared automatically. This catches the long tail of report-specific differences that table-level reconciliation misses, and it is what allows us to say with confidence that switching the BI tool over will not change any number on any dashboard.
Cutover criteria, agreed in writing
Before the project starts we agree exactly what must be true to cut over: row parity thresholds, control totals matching to a defined tolerance, query shadowing pass rate, performance benchmarks and a tested rollback. Cutover is then a decision against criteria rather than a judgement call under pressure.
Keeping the target in sync while you migrate
During dual running, both systems must stay current. For warehouses this usually means running ingestion into both targets from the same source pipelines, which is straightforward if your pipelines are well-built and painful if they are not — a common reason migration projects also become pipeline modernisation projects.
For transactional database migrations we use change data capture: an initial bulk load followed by continuous replication of changes, so the target is never more than seconds behind. Cutover then becomes a matter of stopping writes to the source for a brief window, letting replication drain, verifying, and pointing the application at the target. On our last fourteen migrations that window has been under four minutes, which for most businesses is indistinguishable from zero.
| Migration type | Sync method | Typical cutover window |
|---|---|---|
| Redshift → Snowflake | Dual ingestion from source pipelines | Minutes — repoint BI tools |
| On-prem Oracle → PostgreSQL | Bulk load + logical CDC replication | Under 5 minutes |
| SQL Server → Cloud managed | Backup restore + transaction log shipping | 5–15 minutes |
| File dumps → Iceberg lakehouse | Backfill + parallel new-data writes | No cutover — additive |
| MongoDB → PostgreSQL | Bulk transform + change stream tail | 10–20 minutes |
Tuning for the new platform
A straight lift-and-shift almost always performs worse and costs more than it should, because query patterns that suited the old engine are wrong for the new one. Distribution keys that made sense on Redshift are irrelevant on Snowflake, where clustering keys and micro-partition pruning govern performance. Oracle hints do not translate to PostgreSQL. Spark jobs written for one file layout perform badly on another.
So tuning is part of the project, not a follow-up. We benchmark the heaviest queries before and after, restructure the physical layout for the target engine, right-size compute with aggressive auto-suspend, and materialise the aggregations that get computed repeatedly. The cost reduction we quote comes from this work as much as from the pricing model.
“The reconciliation dashboard was what sold it internally. Our finance team could watch the two systems agree, every day, for two months. Nobody had to take anything on faith.”
Rollback, and what happens if it goes wrong
Every migration we run has a tested rollback. For warehouse migrations that means the legacy platform stays running and current for a defined period after cutover — usually thirty days — so reverting is a matter of repointing BI tools. For database migrations, replication is reversed so changes made on the new system flow back, which keeps rollback viable for the first days rather than only the first hours.
We rehearse cutover at least twice against production-scale data before the real one. The rehearsal produces a timed runbook, and it invariably finds two or three things that would have gone wrong — which is exactly why it is worth doing.
Every engagement starts with a conversation, not a proposal template.
Thirty minutes with a senior engineer. You leave with an architecture sketch and an honest cost range, whether or not you hire us.
What is actually included in data & warehouse migration
Each of these is something we have shipped and still support in production — not a list of things we could do if asked.
Warehouse migration
Redshift, Teradata, Netezza, SQL Server DW to Snowflake, BigQuery, Databricks or Redshift Serverless.
Database migration
Oracle to PostgreSQL, SQL Server to managed cloud, MySQL upgrades, MongoDB to relational.
Lake reorganisation
Raw file estates restructured into governed Iceberg or Delta tables with catalogue and lineage.
On-premise to cloud
Full estate lift with network, security and identity handled alongside the data.
Logic translation
Stored procedures, views and jobs translated and verified against real outputs.
Reconciliation framework
Continuous row, total and query-level comparison with a dashboard the business can watch.
Performance tuning
Physical layout, clustering, compute sizing and materialisation for the target engine.
Cutover management
Rehearsed runbook, agreed criteria, tested rollback and post-cutover hypercare.
The stack we actually use for this
Chosen for what your team can maintain in three years, not for what looks impressive in a proposal.
Sources
- Redshift
- Teradata
- Oracle
- SQL Server
- MySQL
- MongoDB
Targets
- Snowflake
- BigQuery
- Databricks
- PostgreSQL
- Iceberg
- Delta Lake
Replication
- Debezium
- AWS DMS
- GoldenGate
- Snowpipe
- Custom CDC
Verification
- dbt tests
- Great Expectations
- Custom reconciliation framework
From first conversation to something in production
Two-week slices, a demo you can share every alternate Friday, and no phase where you are waiting without seeing progress.
Inventory and profiling
Every object catalogued, usage profiled, dead objects identified, data baselined.
Logic extraction
Procedures, views, jobs and spreadsheet steps documented with their semantics.
Translation and build
Schema, logic and pipelines built on the target with explicit difference rules.
Dual run
Both systems live, reconciliation continuous, differences investigated and resolved.
Tuning and rehearsal
Performance work on the target, plus at least two full cutover rehearsals.
Cutover and hypercare
Go-live against agreed criteria, legacy retained for rollback, thirty days hypercare.
Everything hands over. No lock-in, ever.
Source code in your Git organisation, infrastructure in your cloud account, domains in your name and documentation written for the next team rather than for us. If you part ways with us in year three, a competent engineer should be able to take over in a fortnight.
Deliverables checklist
- Object inventory with usage and dead-object analysis
- Documented semantic difference catalogue
- Translated schema, logic and pipelines
- Reconciliation framework and live dashboard
- Query shadowing results
- Performance benchmark before and after
- Timed cutover runbook with tested rollback
- Post-migration cost and performance report
What this typically costs
Real ranges from real projects. The variable is almost always scope and integration count — the calculator will get you closer in two minutes.
Migration assessment
₹2,80,000
Know the real scope before committing.
- Full object inventory
- Usage profiling
- Semantic difference analysis
- Effort and cost estimate
- Target platform recommendation
Warehouse migration
₹14,00,000 – ₹55,00,000
Complete migration with dual run and verification.
- Schema and logic translation
- Pipeline rebuild
- Reconciliation framework
- Dual run and tuning
- Cutover and hypercare
Database migration
₹8,00,000 – ₹30,00,000
Transactional database with CDC and near-zero downtime.
- Bulk load and CDC
- Application compatibility work
- Rehearsed cutover
- Reverse replication rollback
- Hypercare
All figures exclude GST. Fixed-price options available on defined scope. Build your own estimate →
The questions clients actually ask
Including the ones where the honest answer is that you may not need us. If your question is not here, call +91 70033 91355 — you will speak to an engineer, not a call handler.
For a mid-sized estate — a few thousand tables, a few hundred pipelines, a hundred or so reports — expect four to seven months end to end, of which six to fourteen weeks is dual running. The build is rarely the long pole; verification and the business's confidence-building are. Anyone quoting six weeks for a full warehouse migration is either working with a very small estate or planning to skip verification.
They should not, and query shadowing is how we prove it: production queries replayed against both systems with results compared automatically. Where a difference appears, it is almost always a semantic difference we then translate explicitly, or an error in the legacy system that we surface for the business to decide on. Any accepted change is documented and communicated before cutover rather than discovered afterwards.
Usually yes, and it is often better. Subject area by subject area, with both platforms serving different domains during the transition and a federation layer if a report needs to span both. It takes longer and reduces risk considerably. The main constraint is reports that join across domains — those either wait for both sides to move or use a temporary federated view.
It happens on roughly half of our migrations, and the way it is handled matters. We surface it with evidence, quantify the impact, and let the business decide whether to correct going forward, restate history, or accept the legacy behaviour deliberately. What we will not do is quietly reproduce a known error to make reconciliation look clean, or fix it silently and let someone discover the change in a board meeting.
Across our completed migrations the median platform cost reduction is 41%, but the range is wide and depends on how badly the legacy platform was sized and how much tuning the target receives. We build a cost model during assessment with your actual query patterns and volumes, and we present the pessimistic case as well as the optimistic one. Cost is also not always the main driver — elastic concurrency during month-end and native semi-structured handling are frequently worth more than the saving.
Yes. Repointing Power BI, Tableau, Looker or Metabase, adjusting any platform-specific SQL in reports, retesting dashboards, and managing the user communication. This is a routinely underestimated part of the work — a warehouse migrated perfectly still fails the users if forty dashboards break on cutover day.
Why being local to you matters here
Several large groups headquartered in Kolkata run legacy warehouses purchased a decade ago on fixed-capacity licensing, paying for peak capacity around the clock. Migration is usually justified on cost alone, and the capability gain is treated as a bonus. Being local means our engineers can sit with your finance and MIS teams through the dual-run period, which is when confidence is actually built.
For data warehouse and database migration services in Kolkata and across India, call +91 70033 91355 or WhatsApp us. The assessment gives you a real scope and a real number.
Services that pair with this
View everythingTell us what is slowing your business down.
A 30-minute call with a senior engineer — not a salesperson. You leave with an architecture sketch and an honest cost range, whether or not you hire us.
Direct line
+91 70033 91355Mon–Sat · 9:30 AM – 7:30 PM IST · Sealdah, Kolkata