All case studies
Finance

Fintech App Revolution

A retail banking client was running a decade-old transaction application that had grown one feature at a time. It still worked, but every release was slower than the last and customers were abandoning payments midway. We rebuilt it around a modern service architecture without ever taking the existing system offline.

Sector
Retail and commercial banking
Engagement
Platform re-architecture and migration
Timeline
7 months, delivered in four phases
Fintech App Revolution

The challenge

  • A single monolithic codebase meant one slow query could hold up every other request on the server, including balance checks and payment confirmations.
  • Transaction confirmations took several seconds at peak hours, and customers were closing the app before the screen settled — the drop-off showed clearly in the funnel.
  • Business logic was duplicated across the web app, the mobile API and a batch reporting job, so every rule change had to be made in three places and tested in three places.
  • There was no safe way to release. Deployments went out at night, by hand, and a rollback meant restoring a database snapshot.

Our approach

Each step below was finished and verified before the next one started, so the risk stayed contained at every stage.

  1. Audit before touching anything

    We spent the first three weeks instrumenting the running system rather than rewriting it. Request tracing showed that four endpoints accounted for most of the latency, and that the slowest of them was re-reading the same account data up to eleven times per request. That audit decided the order of everything that followed.

  2. Carve out the transaction core first

    Instead of a full rewrite, we extracted the transaction engine into its own service with a clearly defined contract. The old monolith kept serving traffic and simply called the new service, so the riskiest part of the system could be proved in production before anything else moved.

  3. One source of truth for business rules

    The duplicated fee, limit and eligibility rules were collapsed into a single rules module consumed by every caller. A rule change now happens once, and the test suite covers it once.

  4. Caching with correctness guarantees

    Read-heavy account and reference data moved behind Redis with explicit invalidation tied to write events, rather than time-based expiry. This removed the repeated reads the audit found without ever serving a stale balance.

  5. Migrate users in controlled waves

    Traffic moved to the new stack a percentage at a time, with the old path kept warm as an instant fallback. No migration window, no maintenance page, and a rollback that took seconds rather than a database restore.

What we delivered

  • A standalone transaction service with its own deployment pipeline and monitoring
  • A shared business-rules module replacing three divergent copies
  • An event-driven cache layer for account and reference data
  • Automated CI/CD with staged rollout and one-click rollback
  • End-to-end request tracing and alerting on latency, not just on errors
  • A documented runbook so the client's own team owns the platform

Technology used

  • React
  • Node.js
  • PostgreSQL
  • Redis
  • Docker
  • AWS

The results

40%

Increase in user retention

Measured over the two quarters following the final migration wave, against the same quarters a year earlier.

Sub-second

Transaction confirmation

Peak-hour confirmations settled from several seconds to consistently under one second at the 95th percentile.

3 → 1

Copies of business logic

Fee, limit and eligibility rules now live in one module, cutting the testing surface for every rule change.

Zero

Downtime during migration

Traffic shifted in waves with the previous path kept live, so customers never saw a maintenance window.

The client's team now ships to the transaction platform during business hours, which was unthinkable at the start of the engagement. The slower-moving parts of the old monolith were left deliberately untouched: they were not costing anything, and replacing working code for its own sake would have added risk without adding value.

Have a similar problem?

Tell us what is slowing you down and we will tell you honestly whether it needs a rebuild or a much smaller fix.