Illustrative Engagement · Platform & Integration

Unifying Three Disconnected Systems Behind One API Layer

A growth-stage company's CRM, billing, and product analytics lived in three separate systems that didn't agree with each other. Here's how a composable integration layer replaced the reconciliation spreadsheet.

The situation

Each system had its own idea of who a given customer was and what state their account was in. The CRM tracked deal stage. Billing tracked plan and payment status. Analytics tracked usage events under a slightly different customer identifier than either of the other two. Before any leadership review, someone manually reconciled all three into a spreadsheet — a process that was slow, error prone, and stale the moment it was finished.

The instinct in situations like this is often to replace one or more of the systems. That would have meant months of migration risk to fix what was, underneath, a data-consistency problem rather than a tooling problem.

The approach

We designed a composable integration layer that sits between the three systems rather than replacing any of them. It defines explicit contracts for what a "customer," a "subscription," and a "usage event" mean across all three systems, and maintains a single source of truth for customer state that each system reads from and writes to through that contract — instead of each system pushing its own version of the truth outward.

Getting the contracts right mattered more than the integration code itself. We spent real time with each team — sales, finance, and product — to agree on shared definitions before writing any integration logic, because most of the original disagreement between systems traced back to different teams quietly meaning different things by the same word.

The layer was built to be extendable rather than a one-time fix: adding a fourth system later means implementing the same contract, not renegotiating the whole architecture.

The outcome

Teams now work from one consistent customer record instead of reconciling spreadsheets before every leadership review. Sales, finance, and product see the same numbers because they're reading from the same source, which also removed a recurring source of internal disagreement that had nothing to do with the underlying business and everything to do with which system's export someone happened to trust that week.

Systems that don't agree with each other?

Let's talk through what a single source of truth would need to look like for your stack.