Two of our systems disagree about the same job. Which one wins?
Decide per field, not per system. The system where a fact is created and edited by the people responsible for it is the system of record for that fact - spend belongs to the ad platform, revenue to the operational system, call outcomes to the phone system. Write the assignment down. Conflicts nobody assigned in advance get settled by whoever built the most recent report.
Ownership belongs to fields, not to platforms
The common mistake is declaring one platform the source of truth for everything. No platform deserves that. Your field service system knows revenue and job status better than anything else and knows nothing reliable about ad spend. Your ad platform knows spend precisely and knows nothing about whether the job was completed.
Build a one-page table: field, owning system, who edits it, how often it changes. It takes an hour and it prevents most future arguments about which number is right, because the answer becomes a lookup rather than a debate.
Last write wins is a bad default
Most sync tools default to letting the most recent update overwrite the older one. In practice that means an automated job silently overwrites a correction a human made ten minutes earlier, and the human watches their edit disappear. It happens twice and they stop trusting the system.
A better rule: automated writes never overwrite a field that a human has edited since the last sync. Where the platform exposes modification metadata, use it. Where it does not, keep your own record of the last value you wrote, and skip the write when the current value differs from it - because that difference means a person changed it.
Reconcile and report instead of overwriting
When two systems disagree on something that matters, the instinct is to pick a winner and overwrite the loser. That destroys the evidence. Keep both values, compute the delta, and put the delta in a variance report.
Persistent variance is information about your operation, not noise to be suppressed. A location whose invoiced revenue and job-completion records diverge steadily has a process issue worth finding. If you overwrite, you have hidden it. This is why revenue reporting built properly shows the reconciliation rather than only the result.
The unmatched bucket belongs in the report
Every join leaves residue: calls that never matched a job, jobs with no identifiable source, spend that produced nothing traceable. The honest presentation shows that residue as its own line rather than distributing it proportionally across the categories that did match, which is a quiet way of manufacturing precision that does not exist.
Ask of any dashboard you are shown: what is excluded from this number, and where does the unmatched portion appear? A system that cannot answer is asserting rather than measuring. That single question is the fastest way to evaluate reporting produced by any integration.
Topics: system of record · data conflicts · reconciliation · governance
Have a version of this question about your own business?
The useful answer usually depends on which systems you run and how they're connected. That's a conversation, not a blog post.