Ledger and balance architecture
Immutable double-entry postings, a documented chart of accounts, and balances derived from entries so every figure traces to the event that produced it.
- Double-entry
- Idempotency
- Point-in-time balances
We build payment, lending, and wealth systems on a ledger you can audit, with controls that hold up when volume, regulators, and partner banks all arrive at once.

Double-entry
ledger at the core, not a reporting view
Exactly once
payment effects under retries and replays
T+0
reconciliation against provider statements
Financial products run across processors, banks, ledgers, and compliance vendors that rarely agree in real time. A retry becomes a double charge, a webhook arrives twice, a provider restates yesterday. We design one transaction model across all of it, with idempotency, reconciliation, approval controls, and evidence built into the flow rather than bolted on before an audit.
Processors, banks, and card networks settle on different clocks. Without a canonical model, support teams arbitrate balances by hand and month-end becomes a negotiation.
Approval limits, segregation of duties, and monitoring get added once a regulator asks. Retrofitting them into a live money path is far more expensive than designing them in.
Network timeouts are normal. Without idempotency keys and a durable state machine, a routine retry becomes a duplicated payout that someone has to claw back.
Each area below is something we have built into production and can take ownership of end to end.
Immutable double-entry postings, a documented chart of accounts, and balances derived from entries so every figure traces to the event that produced it.
Provider-agnostic payment orchestration with routing, retries, disputes, and refunds handled as explicit states rather than exception branches.
Identity, sanctions, and business verification wired into a case workflow that analysts can actually work, with decisions and evidence retained.
Rules and models scoring transactions in the request path, with reason codes surfaced to operators and every decision reproducible after the fact.
Automated matching against provider files, aged break reporting, and a workflow for the exceptions that genuinely need a human.
Regulatory and financial reporting generated from the same ledger the product runs on, so operations and compliance never diverge.
Chosen for correctness under concurrency, durable workflows, and evidence that survives an audit.
Interfaces that make money state legible
Correctness under concurrency
Durable movement between systems
Evidence that controls are working
We map accounts, entries, and every state a transaction can occupy, including the unhappy ones, before writing service code.
Property tests and simulated provider failures confirm balances stay correct through retries, partial failures, and out-of-order webhooks.
Limits, approvals, segregation of duties, and monitoring go into the transaction path with the evidence trail they will later be audited against.
We run shadow reconciliation against live provider files before cutover, so day one differences are understood rather than discovered.
A provider reports its view of your money, not your product's obligations to each customer. Once you hold balances, split fees, or settle across more than one provider, you need your own double-entry record. It is far cheaper to start with one than to reconstruct history later from provider exports.
Tell us where balances, payments, or reconciliation are costing you time. We will come back with an architecture and a first slice worth shipping.