Metaxia
Engineering

Why We Moved to Event Sourcing for Financial Systems

Most financial systems start their life as a straightforward CRUD application. A row represents an account balance, a transaction updates that row, and everything works fine until the business needs an audit trail, multi-currency support, or the ability to replay history after a bug. That is roughly the point where teams start looking at event sourcing, and it is exactly where one of our fintech clients found themselves last year.

The Problem With Mutable State

When you only store the current balance, you have thrown away the story of how you got there. Reconciliation becomes a forensic exercise, because nothing in the database explains why a number is what it is. Every "quick fix" — a manual balance correction, a one-off script to patch a bad migration — quietly erodes trust in the ledger, because there is no record of what actually happened.

Event sourcing flips this around. Instead of storing current state, you store an append-only log of everything that happened, and current state is a projection computed from that log. A balance is never edited directly; it is the sum of all deposit and withdrawal events for that account. This sounds like more work, and it is, but it buys you something CRUD cannot: a complete, tamper-evident history that your compliance team will actually thank you for.

What We Learned Shipping It

The hardest part was not the write path — appending events is simple. The hard part was building fast, reliable read models, because nobody wants to replay a million events every time they load an account page. We solved this with materialized projections that update asynchronously as events land, backed by a reconciliation job that recomputes projections from scratch on a schedule to catch drift early.

The second hardest part was cultural, not technical. Engineers used to updating a row directly had to unlearn that instinct, and it took a few incident postmortems before the team trusted the new model enough to stop reaching for manual overrides. Six months in, the ledger has processed tens of millions of transactions without a single unexplained balance discrepancy, and every one of those transactions can be traced back to the exact event that produced it.

If you are building anything where "why does this number look like this" is a question your business will eventually ask, it is worth evaluating event sourcing before your CRUD schema calcifies around assumptions you will regret.

06 — Next step

Tell us what your business
needs to run on.

Replies within one business day