Almost every system we have been asked to fix rather than build had the same underlying shape: two places that both believe they hold the correct version of a fact, and no agreed rule for which one wins.
How it happens
Nobody designs a second source of truth on purpose. It arrives as a shortcut: a spreadsheet kept "just for now" alongside the database, a cached copy that was supposed to be read-only and quietly became writable, a mobile app that stores its own edits offline and syncs them later without a clear precedence rule. Each individual decision was reasonable. The sum is a system that lies to someone eventually.
The symptom is always the same
A customer's address is right in one screen and wrong in another. A stock count matches the warehouse system and not the storefront. Nobody can say with confidence which number is current, so people start keeping their own private notes to compensate, which creates a third source of truth on top of the first two.
- Pick the owner — one system is authoritative for a given fact, always, and every other copy is explicitly a cache with an expiry.
- Write through one door — if a value can be written from two places, work stops until there is one write path and the second is made read-only.
- Make staleness visible — a cached figure should say when it was last confirmed, not present itself as current.
Why this is expensive to leave
The tax is not a single bug. It is every future feature paying interest: a new report has to decide which of the two figures to trust, a new integration has to guess which system is current, and every incident review starts with "which one is actually right" before anyone can even diagnose the problem.
A second source of truth does not get cheaper to remove over time. It gets more places that depend on it existing.
What untangling it actually looks like
We pick the fact that causes the most support tickets, not the one that is architecturally interesting, and fix that one first — usually customer identity or order status. Migrating one fact at a time, with the old copy made read-only immediately rather than deprecated gradually, is slower to plan and faster to finish than trying to unify everything at once.
The reassurance worth giving a client
This work rarely needs new features to justify it. The business case is the hours currently spent reconciling two numbers by hand, which is usually a bigger sum than anyone had added up before we asked.
