Designing a Compliance-First Data Model for African Fintech

In most software, the data model exists to serve the features. In regulated fintech, the data model also has to serve the auditor, the regulator, and a future...

Originally published onanselmfowel.com

In most software, the data model exists to serve the features. In regulated fintech, the data model also has to serve the auditor, the regulator, and a future version of you trying to reconstruct, two years after the fact, exactly what happened to a single transaction. Designing it compliance-first, from the very first table, changes decisions that a typical application would make on autopilot. Doing this across African markets, where regulation is real, fast-moving, and varies sharply by border, has taught me a specific discipline.

In regulated fintech, the history is the asset.
In regulated fintech, the history is the asset.

Immutability over convenience

The default instinct in ordinary CRUD applications is to update records in place; a row represents the current truth, and you overwrite it when the truth changes. In a compliance-first model, financial records are append-only. You do not edit a transaction. You record a new event that supersedes the old one, and the old one remains, visible and intact, forever.

If a regulator asks what this balance looked like last March, your data model must be able to answer precisely, without depending on the existence and integrity of a database backup.

The history is the asset, and overwriting it is, in this context, destroying evidence you are legally required to retain. This single principle ripples through every schema decision that follows.

Separate the ledger from the application state

One pattern that has served me extremely well is keeping a strict double-entry ledger as the financial source of truth, deliberately separate from the operational state that drives the application's day-to-day behavior. The application layer can be flexible, denormalized, and free to evolve as product needs change. The ledger is sacred: balanced, append-only, and incapable of lying about the money.

Conflating the two, letting the convenient operational state also be your financial record of truth, is how organizations end up unable to prove their own numbers when it matters. The ledger answers "what is true about the money." The application state answers "what does the product need to function." Keeping those concerns physically separate is worth the redundancy many times over.

Model jurisdiction explicitly

African fintech is rarely single-country for long, and regulations differ sharply and consequentially across borders. Data residency requirements, reporting obligations, and the operations you are even permitted to perform all vary by jurisdiction, and they change.

So jurisdiction belongs in the data model as a first-class attribute, not as something inferred later from an address field when a regulator asks an uncomfortable question.

  • Tag every relevant record with the jurisdiction it belongs to, explicitly.
  • Design for data residency before you actually have a residency requirement, because retrofitting it is brutal.
  • Assume your reporting obligations will grow over time, not shrink, and build room for that.

Personal data is a liability, not just an asset

There is a cultural shift required here that engineers trained on "collect everything, you might need it" find genuinely difficult. Every piece of personal data you store is something you must protect, justify the holding of, and potentially delete on request. It is a liability you carry, not merely an asset you have accumulated.

So you design to collect the minimum you actually need, isolate the sensitive fields so they can be protected and deleted as a unit, and make consent and deletion tractable operations from the very start. Retrofitting privacy and deletion onto a model that cheerfully hoarded everything into every table is one of the most painful and error-prone projects an engineering team can be handed.

Reconciliation as a design property

In a payments business, reconciliation, proving that your records agree with your partners' records and with the actual movement of money, is not a periodic chore bolted on afterward. It should be a property the data model actively supports. That means capturing, for every movement, enough identifying and timing information to match it against external statements, and designing so that breaks are detectable quickly rather than discovered at month-end. A model that makes reconciliation easy is a model that catches errors and fraud early; a model that makes it hard is one where problems compound silently in the dark until they are large.

Conclusion: slow start, calm audits

A compliance-first data model feels slower at the beginning. More tables, stricter rules, less convenience, more discipline demanded of every developer who touches it. But when the audit arrives, when you expand into a new country with its own regulator, when a customer exercises their rights, you are answering questions calmly in hours rather than launching a frantic, expensive archaeology project across systems that were never designed to answer them. In this industry, that calm, earned by the upfront discipline, is the entire point.

Chat with us