Why your numbers never agree
Ask three people in a growing business how much you sold last month and you will often get three answers. Sales quotes the figure from the order system. Finance quotes the books. The dashboard someone built last year shows a third number that nobody fully trusts but everybody screenshots.
The usual response is to find out who is wrong. Usually nobody is. Each number is correct for the system it came from. The trouble is that the systems were never asked to agree.
Same word, different meaning
Most disagreements start with a word that sounds settled and isn't. "Sales" can mean orders placed, orders shipped, invoices raised or cash received. "Customer" can mean an account, a contact or a delivery address. "Last month" can run on the order date, the invoice date or the payment date, and in different time zones.
Each system picks one meaning, quietly, and builds everything on it. Put two of them side by side and the gap looks like an error. It's a definition.
So the first piece of work in any integration we do isn't technical. It's writing down, in plain language, what each number means and which system is allowed to decide it. That page settles more arguments than any amount of code.
Copies drift
The second cause is copying. Somebody exports a list from one system, cleans it up in a spreadsheet, and pastes it into another. It works on the day. Then the source changes, the copy doesn't, and from that point the two drift a little further apart every week.
Manual copies also pick up small, invisible edits: a renamed product, a merged customer, a corrected price that only got corrected in one place. None of it is wrong on its own. Together it means the same thing now has two names, and nothing downstream can match them.
One owner per fact
The fix is less glamorous than a new platform. Every fact gets one system that owns it. Product details live in one place. Prices live in one place. Customer records live in one place. Everything else reads from the owner, automatically, instead of keeping its own copy.
That sounds obvious, and it is. It is also the step most businesses skip, because each tool arrived to solve a local problem and came with its own little database. Nobody sat down and decided who owns what, so everyone owns everything.
Once ownership is clear, the integration work becomes simple to describe: move each fact from its owner to the places that need it, keep the IDs that link records across systems, and flag anything that doesn't match instead of quietly guessing.
Make the gaps visible
Some disagreement is legitimate. An order placed on the last day of the month and paid on the first of the next belongs to different months in different systems, and should. The goal isn't to force every number to match. It's to explain every difference.
A good reconciliation shows the gap and its reasons: these orders are not yet invoiced, these invoices are not yet paid, these three records don't match anything and need a person. When the difference is explained, people stop arguing about the number and start acting on it.
Where to start
If your numbers don't agree, pick the one that causes the most arguments and trace it end to end:
- Write down what it is supposed to mean, in one sentence.
- List every system that holds a version of it.
- Decide which one owns it.
- Find every manual copy between them.
That short exercise usually shows where the money is. The manual copies are where the hours go, and the undecided ownership is where the trust goes. Fix those two and the dashboard tends to fix itself.