Every migration you will ever do is a Ship of Theseus problem. The ancient Greeks had a paradox: if you replace every plank of a ship one by one, is it still the same ship?

We face this every day, except the ship is in production :)

The naive version of a migration is a full cutover: stop the old system, start the new one. It almost never works at scale. What actually happens is a slow, plank-by-plank replacement.

Let me give you some examples…

Database migrations are the clearest example. Moving from MySQL to PostgreSQL takes time. You run both databases in parallel, write to both (dual-write), and slowly shift small portions of reads to Postgres while monitoring for inconsistencies. Then, you gradually port the entire codebase.

Language migrations follow the same pattern. You never rewrite everything from one language to another and flip the switch. It is also done on a piece-by-piece basis. A similar strategy is followed during monolith-to-microservices migrations.

So, if you are planning something big, consider breaking it into planks and changing one at a time until your entire ship is new.

Pro tip: use this analogy to sound smart in meetings and discussions :) It always works.

Arpit Bhayani

Principal Engineer II at Razorpay - building Agent Studio, Ex-staff engg at GCP Memorystore & Dataproc, Creator of DiceDB, ex-Amazon Fast Data, ex-Director of Engg. SRE and Data Engineering at Unacademy. I spark engineering curiosity through my no-fluff engineering videos on YouTube and my courses