Platform · 2024
Northgate Rails
BFSI · payments core · Technical architect
An event-driven payments core for a financial-services platform: ledger, reconciliation and settlement rebuilt around an append-only event log with exactly-once effects.
requests per day
uptime sustained through migration
month-end close, down from 3 days
The problem
The existing core did synchronous writes across four databases inside the request path. A single slow downstream took the whole payment flow with it, and month-end reconciliation was a manual spreadsheet exercise.
What I did
- Moved to an append-only ledger with derived read models, so reconciliation became a query instead of a reconciliation job.
- Introduced idempotency keys and transactional outbox to get exactly-once effects over at-least-once delivery.
- Split settlement into its own bounded context with a compensation flow for partial failures.
- Ran a six-week dual-write migration with shadow comparison before cutting traffic over.
Architecture
Java and Spring Boot on Kubernetes, Kafka as the event backbone with schema registry, Cassandra for the ledger and Postgres for read models, Redis for idempotency, and full request tracing through Datadog with SLO-based alerting.
Request path
Similar problem on your side?