Skip to content
back to projects
2024·shipped·Backend Developer

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.

Node.jsPostgreSQLJWTRBAC

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.