Takeoff was delayed by an hour. I used the time for prep work - first-principles design specs, a focus group of assumptions to challenge, and mapping out the repo. Once we were finally airborne, all seven layers shipped through Claude Code. From event-sourced to double-entry. Never any inherited assumptions.
Before writing a single line of code, we ran a simulated focus group - not with real people, but with AI-generated profiles representing the voices that would normally be in the room when a core banking system gets designed. Each profile brought a different lens, a different set of biases, and a different definition of "good enough."
We put seven inherited semi-sacred beliefs in front of them - the kind every core banking system carries like excess luggage full of winter clothes on a Maldives trip. We listed the things the industry takes for granted about how a bank's core should work, then asked a simple question for each one: is this fundamentally true, or is it just how we have always done it? The principles that survived became our architecture, everything else got canned.
This exercise shaped every major decision in the system. It is the reason we event-source instead of storing state, the reason reconciliation is continuous instead of nightly, and the reason settlement is a pluggable adapter rather than a monolith bolted to the side.
| Old Assumption | New Reality | What It Informed |
|---|---|---|
| State is stored in rows | Events are truth. State is derived. | The entire event-sourcing architecture. Balances are never stored - they are computed from the event log on every read. The log is the system. Decisions 09, 12, 13 |
| Reconciliation runs overnight in batch | Continuous. Real-time. Always. | Layer 4 - the reconciliation engine. Any account balance is verifiable against full event history at any moment. SHA-256 hash chain detects tampering instantly. Decision 18 (trial balance per currency) |
| Settlement is a separate system | Settlement is native to the core. | Layer 6 - the pluggable settlement bridge. Settlement adapter pattern means mock, EVM, Solana, SWIFT, or SEPA slot in without touching core logic. The interface is the product. Decision 04 |
| The audit trail is a log file somewhere | The event log IS the audit trail. | Immutable, append-only events with hash chain integrity. No separate audit system needed. Every state is derivable. Every mutation is traceable. Decisions 12, 14 |
| Currency means fiat. Period. | Fiat, stablecoin, CBDC, token. All native. | Multi-currency from day one. CBDC modeled as asset class with currency-like behavior. Per-currency trial balances. No retrofitting needed when digital dirham arrives. Decisions 02, 05, 18 |
| Business logic lives in middleware | Logic lives at the ledger layer. | Posting rules are pure projections. Overdraft policy is pluggable at the engine level. Compliance subscribes to events - core never knows it exists. No middleware dependency. Decisions 03, 06, 15 |
| Floats are fine for money if you round | Floats are never fine for money. Ever. | Decimal.js with 38-digit precision and banker's rounding throughout. Mixed-currency operations throw, never coerce. Amounts stored as string representations in the event log. Decision 11 |
Where banking innovation meets first-principles thinking. Subscribe on LinkedIn.
Subscribe