Migration rarely fails because the tooling was wrong. It fails because nobody decided what to bring, nobody owned the clean-up, and the reconciliation happened after go-live instead of before it.
Decide what not to bring
The instinct is to migrate everything. Every dead item code and duplicate customer you carry across becomes a permanent tax on every report and every search, forever.
| Data | Bring | Leave behind |
|---|---|---|
| Customers | Active in last 24 months, deduplicated | Dormant duplicates |
| Items | Stocked or sold in last 12 months | Codes with no movement |
| Open documents | All open POs, SOs and invoices | Closed detail beyond policy |
| Balances | Opening balances at cut-off | Historic journal detail |
| History | Summary by period if needed | Line-level history nobody queries |
Reconcile before anyone celebrates
- Agree the cut-off date in writing with finance.
- Load into a test environment first, never straight into production.
- Reconcile trial balance to sub-ledgers, line by line.
- Have the person who owns each balance sign it off by name.
- Keep the source extracts. You will want them in month two.
Do a full dry run
Run the entire cutover once, on a normal working day, against a copy. You will find the step nobody documented, the file that takes four hours, and the permission nobody had. Finding those on a rehearsal is cheap. Finding them on go-live weekend is not.
The rule we keep
No go-live without a signed reconciliation. It has never once been the popular decision, and it has never once been the wrong one.