Financial infrastructure · 6 October 2026 · 5 min read

Why a ledger should hold balances and nothing else

Most payment systems that lose money do not lose it to fraud. They lose it to a schema where the balance and the business logic live in the same table.

There is a design decision near the start of every wallet, every payment switch and every marketplace that decides how much pain the next five years contain. It is whether the ledger is a component or a consequence.

The consequence version

In the consequence version, the balance is a column. An order updates it, a refund updates it, a promotion updates it, a nightly job corrects it. Each of those paths was written by a different person in a different quarter. The balance is whatever the last writer said it was, and the only way to find out whether it is right is to replay the business logic — which is to say, you cannot find out.

The symptom is familiar: a reconciliation process that runs overnight, takes hours, produces a list of discrepancies, and is manually adjusted by someone who has learned which differences are "normal".

The component version

In the component version the ledger is a separate service with one job: record immutable double-entry transactions and derive balances from them. It knows about accounts, entries, and the rule that every transaction sums to zero. It does not know what a refund is, what a promotion is, or what a user is.

Everything else — the wallet product, the marketplace, the ERP — becomes a client that posts transactions. The business logic gets to be as messy as the business genuinely is, and the money stays provable, because a balance is no longer a stored opinion. It is a derivation from an append-only record that cannot be edited.

What you get in exchange for the extra service

An audit that is a query, not a project. Any balance at any past instant is a sum over entries up to that instant.

Reconciliation that converges. Differences against a bank or mobile-money partner resolve to specific entries with specific references, not to a net figure nobody can decompose.

A clean regulatory story. A supervisor asking how float is segregated gets an answer in terms of accounts and entries, which is the vocabulary they already use.

Blast radius. A bug in the promotions engine posts a wrong transaction. It does not silently corrupt a balance column, and the correction is a reversing entry that leaves both the error and the fix visible.

The cost, stated honestly

It is more moving parts on day one, and it is slower to prototype. Teams under deadline pressure choose the column, every time, and the choice is invisible until the first serious reconciliation dispute. The honest framing is not "the ledger is better architecture" — it is that the column defers work to the point where it is most expensive, under a regulator's deadline, with real customer money in dispute.

Read next

Talk to the right team

Enquiries are routed by country, enquiry type and solution to a named owner. You receive a reference number.

Contact Pareza