The summary.
DECIDE WHICH SYSTEM IS AUTHORITATIVE FOR EACH KIND OF DATA
Without that, conflicting updates produce inconsistency nobody can resolve. Avoid bidirectional synchronisation with no clear owner.
AN INTEGRATION THAT STOPS SILENTLY LOOKS IDENTICAL TO ONE WITH NO DATA
Monitor volume against expectation, never discard failed messages silently, and make every message idempotent — delivery gets retried.
Establish who owns each integration before it fails, because nobody does until then.
MIGRATE THE MINIMUM, AND KEEP THE OLD SYSTEM READ-ONLY FOR HISTORY
Effort and risk scale with volume, and transforming history into a structure it does not fit is rarely worth it. Check statutory retention before retiring anything.
RUN AT LEAST THREE TRIAL MIGRATIONS, AND TIME THEM ON FULL VOLUME
Cutover happens in a window, and overrunning it is serious.
RECONCILE FINANCIAL TOTALS EXACTLY, AND HAVE FINANCE SIGN OFF FORMALLY
Never proceed to go-live with unexplained differences — small ones indicate systematic problems.