Dashen Super App: Mobile Banking Platform
Backend services for a mobile banking super app used by one of Ethiopia's largest banks. Secure transaction APIs, auth, RBAC, and tuned hot paths for high transaction volume.
Highlights
- ▸Transaction APIs shipped with the reliability budget a real-money system demands.
- ▸Hot paths tuned for high transaction volume: indexes, query rewrites, and connection pooling.
The problem
Dashen Bank needed a mobile super app serving millions of customers across Ethiopia. The backend had to handle high-volume financial transactions with the reliability a real-money system demands: every transaction must be atomic, auditable, and fast under load.
What I built
My scope was the transactional core — the APIs that move money, authenticate users, and enforce access control:
- Transaction endpoints with idempotency keys so a dropped connection never duplicates a payment.
- JWT-based authentication with role-based access control on every internal action, not just external routes.
- Audit trails on all financial operations for compliance and debugging.
Technical decisions
- PostgreSQL for transactional data: ACID guarantees matter when you’re moving money. Row-level locking on balance updates, and advisory locks for idempotent request deduplication.
- Connection pooling to handle burst traffic without exhausting database connections.
- Index strategy: composite indexes on the queries that ran most often (account + date range lookups), partial indexes for status-filtered queries.
Performance
Query and index tuning measurably dropped p95 latency on the hot paths — the transaction and balance-check endpoints that carry the most volume. The goal was sub-100ms on those critical paths under production load.
What I would change now
The RBAC implementation works but uses a flat role model. For a system this size, I’d move to a policy engine that can express hierarchical permissions without hardcoding role checks across every service. I’d also add structured logging from day one — retrofitting observability into financial APIs is harder than building it in.