SME lending: Credit decisions 4.2x faster
We built an underwriting workflow that combines banking and business data and applies clear lending rules. Straightforward applications are decided automatically, and borderline cases go to an underwriter.
We fixed a core banking platform's dual-write problem with a transactional outbox, change data capture (CDC) streaming and consumers that safely ignore duplicates. Ledgers and downstream systems now stay in step, with 100% data consistency.
Client: Anchor CatalogsIndustry: FinTech & Financial ServicesService: SaaS & Software
Overview
Client
Anchor Catalogs
Growing core banking platform
Engagement snapshot
The challenge
The client's microservices had a classic dual-write problem. Each service updated its database and published an event as two separate steps. When the message broker had a wobble, the database change went through, but the fraud, analytics and notification systems never received the event.
Application code carried its own retry and failure logic, and engineers fixed mismatches by hand. Nobody could replay the full ledger history from a single, reliable trail of events.
Account balances differed between services, which caused spikes in customer support calls and worried regulators.
Engineers spent 20% of each sprint writing and running manual data-fix scripts.
Without a consistent event trail, the team could not fully replay ledger history for SOC 2 compliance.
The solution
We added an outbox table to each service database. Each event is written to it in the same ACID transaction as the business change, so one cannot happen without the other.
Debezium connectors read the database transaction log and stream each event to the message broker, without adding any work to the application.
Downstream services use a unique ID on every event, so an event delivered more than once is only processed once.
Key features
By reading PostgreSQL's write-ahead log (WAL), we captured every ledger transaction without changing the application logic.
Business impact
100% capture rate
The outbox table keeps a permanent, traceable record of every event, so the team can rebuild the ledger's state exactly during an audit.
Business impact
100% audit compliance
If the message broker goes down, the outbox relay pauses and resumes from the last log position it processed, so no data is lost.
Business impact
Zero data loss
Before and after
Before
Partial success
The database update worked but the event failed, and nobody noticed the mismatch.
After
All or nothing
The change and its event share one transaction, so both succeed or both roll back.
Before
Drift over time
Mismatches needed manual work to bring the microservices back in step.
After
Always in step
Every change produces exactly one event, so downstream systems match the ledger.
Before
Retry logic in the app
Application code had to handle complex retries and failures itself.
After
Handled by the log
CDC picks up events from the database log, so the application no longer deals with messaging.
Results
100% Consistency
Atomic writes closed the gap between what the database holds and what downstream systems receive.
Before: High DriftAfter: 100% Consistency
100% Time Saved
Guaranteed event delivery ended the daily data-fix work for engineers.
Before: DailyAfter: Zero
99.99% Reliability
CDC-based streaming loses no messages, even when the broker fails or the network splits.
Before: 95%After: 99.99%
Testimonial
“Ledger data used to drift between regions, and we fixed it by hand. Coretus put an outbox and a consistency monitor in place. We now see 100% ledger consistency, 99.99% event delivery and no more manual data fixes.”
Samantha PhillipsVP of Engineering, Anchor CatalogsKey results
Trust and control
Outbox logs are partitioned by region to meet GDPR and local data rules.
Compliance readyEach ledger change is linked to a specific transaction ID in the outbox, so it can always be traced.
SOC 2-readyLog-based CDC scales out with the database clusters without slowing the application.
Cloud nativeThe client owns 100% of the IP in the outbox libraries and relay automation scripts.
100% ownedFaster delivery
Reusing proven outbox and idempotency components cut repeated setup work and let the team go live sooner.
Gave each service a tested outbox table and relay, so the pattern was the same across every ledger service.
Supplied the unique-ID checks that stop downstream services processing the same event twice.
Compared ledger state with downstream systems and alerted the team to any gap.
Handled pauses, restarts and log positions so the relay could recover safely after a broker failure.
Services wrote to their database and published an event as two separate steps. When the message broker had problems, the database change went through, but fraud, analytics and notification systems never heard about it. Account balances drifted apart, and engineers spent 20% of each sprint on manual data-fix scripts.
Each service writes the event to an outbox table in the same PostgreSQL transaction as the ledger change, so both succeed or both roll back. Debezium then reads the database log and streams the events onward. Downstream services check unique event IDs, so a repeated event is never processed twice.
No events are lost. The outbox relay pauses and carries on from the last log position it processed once the broker is back. Event delivery rose from 95% to 99.99%, daily manual reconciliation stopped, and the outbox gives auditors a complete record for replaying ledger history.
If your services disagree about account balances, we can help you make each change and its event a single transaction, so downstream systems always match.