Banking on any phone, no data needed: a USSD platform handling 2M+ sessions a month for an East African financial institution.
2M+Monthly sessions
99.9%Uptime (18 months)
<800 msAvg. response
0Data-loss incidents
Project Summary
- Client: East African financial institution
- Industry: banking
- My role: Backend Engineer
- Core tasks: USSD framework, Core-banking integration, Session management, Operations
- Appointed date:
- Completion:
Smartphones aren't universal and mobile data isn't free. For millions of East Africans, the most reliable way to reach their bank is a USSD code on any phone. A financial institution needed its USSD banking channel to keep up with fast-growing traffic, on networks where sessions time out and connections drop.
The problem
- Unforgiving sessions. Mobile networks give each USSD screen only seconds, and one slow core-banking call ends the session.
- Unreliable networks. A connection dropped mid-transaction must never leave money in an unknown state.
- Growth. Session volumes were climbing faster than the existing setup could handle.
What I built
- A Node.js USSD framework for menus, input validation and transaction flows.
- Redis-backed sessions that survive dropped connections, with graceful timeouts and session recovery.
- Real-time core-banking integration through ESB middleware to Temenos T24.
- Clustered processes with PM2 on Ubuntu for throughput and zero-downtime restarts.
The result
The platform processed 2M+ sessions a month with 99.9% uptime over 18 months, average responses under 800 ms and no data-loss incidents.
Tech stack
Backend
- Node.js
- Redis
- PM2
Infrastructure
- Ubuntu
Integrations
- Temenos T24
- ESB middleware
- USSD gateways
What I did
- Built the USSD framework and transaction flows
- Designed Redis session management and recovery
- Integrated with T24 core banking through the ESB
Key decisions
- Redis-backed sessions so a dropped connection can resume
- PM2 clustering for throughput and zero-downtime deploys
Challenges
- Answering within USSD timeouts while calling core banking
- Recovering sessions after dropped connections
Have a similar problem to solve? Let's talk.
Start a conversation