How We Process 10,000 Transactions Per Minute
Sarah Namubiru
Jun 8, 2026

At peak hours, RohoPay processes over 10,000 transactions per minute across mobile money and card networks. Achieving this throughput required careful architecture decisions from day one.
Our payment engine is built in Go, chosen for its excellent concurrency model. Each request flows through a chain of middleware: rate limiting, authentication, idempotency check, provider routing, and response handling.
Idempotency keys are critical for payment processing. If a request times out, the merchant can retry with the same idempotency key and we'll return the original result instead of processing a duplicate payment. This pattern eliminates double charges.
We use PostgreSQL with connection pooling for transaction storage, Redis for real-time caching and rate limiting, and Kafka for the event pipeline that powers our webhooks and reconciliation system.
Sarah Namubiru
Engineering team
Related articles

May 3, 2026
Building Our 3D Secure Flow: A Technical Postmortem
Why we moved from iframe-based 3DS to full browser redirects, how we handle callback reconciliation, and what we learned about bank-grade security.

Mar 22, 2026
Why We Chose Go for Our Payment Gateway
After evaluating Node.js, Python, and Rust, we chose Go for its concurrency model, compilation speed, and operational simplicity.
