Recovering ERP programmes · Part 3 of 5
The ERP was fine. The integration wasn't.
Payroll didn't run. Invoices didn't go out. Orders sat in the warehouse. The ERP was fine. The integration wasn't.
Everyone wants composable ERP: best-of-breed payroll, billing, tax and EPM around a clean core. It only works if those components can talk to each other.
When integration breaks, the core keeps running. Everything downstream doesn't. Staff are paid incorrectly. Customers aren't billed. Orders don't ship. Tax returns and group reporting stop matching the ledger.
The cause is usually dozens of point-to-point interfaces, working off different versions of the same data, or failing silently. Nike learned this in 2000: two systems applied different business rules and stored data in incompatible formats, and orders were ignored, duplicated or deleted, with over $100 million in lost sales.
The instinct is to rip it all out and start again. Having designed integration strategies and canonical data models for global multi-ERP estates, I can say you usually don't need to.
1. Find the clusters
Pull the incident and defect logs and group them by interface. Failures cluster. A handful of interfaces usually cause most of the pain.
Rank them by business impact, not volume. Ten wrong payslips matter more than a thousand rejected address updates. That's your hit list.
2. Move the high-risk ones onto a platform
Rebuild those interfaces on an iPaaS. Failed messages retry, then go to a dead-letter queue with an owner and an alert.
Validate data before it posts: valid tax codes, bank details present, addresses validated. Most integration failures are bad data delivered successfully.
3. Know when to rebuild
The test is simple. If failures cluster, fix the clusters. If they're persistent and spread across the estate, an integration rebuild is required.
Rebuild the integration on a platform with a canonical data model: one definition of customer, supplier, employee and invoice, each fed from a single source of truth. A channel adapter for each system converts its data to that model.
Every system then works off the same data. Replace a component later and you rebuild one adapter, not every interface.