Why Ledgers Are More Than Data Warehouses of Money
And why integrity, not double-entry, is the foundation of financial software
Data warehouses are poor implementations of ledgers.
You may think that, since all a ledger does sometimes is store money data, you can do away with all the complexity that ledgers require (namely, append-only tables) and use a data warehouse to store all your company’s financial data.
This is a mistake. The purpose of a ledger isn’t simply to store financial data.
A ledger that only stores data is doomed to fail because, in finance, the history is as important as the end state. When auditors and financial analysts look at a company’s finance, they want to make sure that the numbers don’t simply look good, but also tell a good story.
A bad history with a good look has a name: fraud.
The purpose of a ledger isn’t to store money data, but to store its history. We call that integrity: the ability to see what the ledger looked like, and query its accounts’ balances, now and at any point in the past.
Actually, accountants often get this backwards: it is integrity that leads to double-entry, not the other way around.
Ledgers, first, have integrity, and then they enforce double-entry.
This is The Payments Engineer Playbook, the only newsletter on Earth tailor-made for engineers of money software. Every week, more than 2,000 subscribers from companies like Stripe, Coinbase and Modern Treasury get a dive deep on how to build software that moves money around. Not to pass interviews, but to do their job exceptionally well.
When money is on the line, stakes are sky high and the margin for error is razor thin.
In The Payments Engineer Playbook, we investigate the technology that transfers money. All to help you become a smarter, more skillful and more successful payments engineer. And we do that by cutting off one sliver of it and extracting insights from it.
Here’s what you can expect in today’s article:
Why immutability is a tool to verify integrity
Why double entry is its natural consequence
How to achieve consistent historic reads even when you apply compensating entries
Enough intro, let’s dive in.




