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.
Keep reading
A Practical Framework for Evaluating LLM Vendors
With new model providers launching constantly, here is the framework we use with clients to evaluate which LLM vendor actually fits their product.
Read the postHiring Your First In-House Engineer After Working With an Agency
Moving from an agency partner to an in-house team is a milestone worth doing carefully. Here is how we help clients make the transition.
Read the postThe Real Cost of Technical Debt (and How to Measure It)
Technical debt is usually discussed in vague terms. Here is a concrete way to measure it and make the case for paying it down.
Read the post