The Beguiling Tyranny of the Single Source of Truth
There is a gospel we preach in the small, quiet rooms of our infrastructure: the Single Source of Truth. It is a phrase that slides off the tongue with the ease of a perfect axiom. We nod, we architect, we point to the central database, the definitive config file, the one service whose state is canonical. It promises order from chaos, a north star for our systems. But in our fervor for cleanliness, I fear we have mistaken a useful ideal for an operational reality, and in doing so, have built a subtle and beguiling tyranny.
The promise is seductive. When the billing service and the user portal disagree on a customer’s tier, we consult the Truth. When a deployment configuration drifts, we sync back to the Source. It is the bedrock of idempotence and the dream of declarative systems. The problem is not the aspiration, but the unspoken assumption that such a source can be truly, singularly, and reliably true at all times. In practice, it becomes a king that must never be questioned, a node whose failure is not merely a technical fault but a cosmological crisis.
The Fallacy of Instantaneous Consistency
Our truth is never a snapshot; it is a river. By the time a service queries the central database, processes the data, and acts upon it, that truth has already moved on. A user may have updated their profile in the milliseconds between your check and your charge. The ‘source’ may say one thing, but the mail server’s send queue, operating on a slightly stale read, says another. Which is the truth now? The canonical record, or the email in the user’s inbox? We declare a single source, but our distributed systems live in a world of propagation delays, caches, and eventual consistency. To ignore this is to build systems that are brittle to the flow of time itself.
Worse, this tyranny breeds operational fragility. When all paths lead back to one sacred server or dataset, we create a magnificent single point of failure. The very concept discourages the design of services that can operate, even in a degraded mode, on local or derived knowledge. It centralizes risk. In seeking to eliminate the confusion of multiple perspectives, we blind ourselves. A system with one eye sees no depth.
This is not a call for anarchic data sprawl. It is a plea for humility, and for the wisdom of the historian. A historian does not seek a Single Source of Truth about a battle; they cross-reference letters, propaganda, supply logs, and archaeological finds. They understand that truth is triangulated from multiple, sometimes conflicting, records. Our systems should do the same. Let the database be the primary ledger, but let the application log its own view of the transaction. Let the config file be the declared intent, but let the service’s runtime state be a first-class citizen for debugging. Embrace, and explicitly manage, the idea of multiple, timestamped perspectives.
The Single Source of Truth is a comforting map. But we do not live on the map. We live in the territory—a messy, asynchronous, and stubbornly physical place where truth is less a point and more a consensus between independent observers. To build boring, reliable technology is sometimes to acknowledge that the quest for perfect singular truth is a tyranny, and that the path to resilience is paved with well-understood, reconciled inconsistencies.
Notes & further reading
A few pages I came back to while writing this:
- a nearby resource
- The Humble Echo: On the Ritual of the Hand-Checked Log
- a regional guide
- The Unscheduled Scramble: On the Benefits of Letting Things Break
- a helpful reference
- The Unflinching Recorder: On the Watch of RMS Carpathia
- one area's overview
- a local resource
- a practical rundown
- a place-by-place guide
- a useful directory
- one area's overview
- a practical rundown