Backend Engineer — Payments & Distributed Systems

I build the systems that tell you your money moved.

4+ years building event-driven, fault-tolerant backend systems for fintech and payments at scale. Sole owner of Paytm's Payment Gateway Notification Service — real-time SMS, WhatsApp, email, push, and merchant webhook delivery across payment, refund, settlement, and subscription lifecycles for merchants including Flipkart, Ola, DMRC, Jio, DLF, BPCL, Shopify, and Wix. Previously built payment orchestration and an ISO 8583 bridge for national payment rails across 14+ African markets.

payment.settledSMSWhatsAppEmailPushMerchant webhook

merchant webhook times out once, retries, succeeds — this is the part of the job nobody sees.

4+
years in payments infra
300+
TPS across 14+ African markets
70+
merchant integrations owned
5M+
daily transactions, zero data loss

Work

Two companies, one continent-spanning obsession with making sure payments don't silently fail.

Senior Software Engineer

Aug 2025Present

Paytm Payments Services · One97 Communications

Noida, India

Sole backend owner of the Payment Gateway Notification Service — the system standing between every payment event and the merchant, bank, or customer who needs to know about it.

  • Own Communication Gateway, Notification Queue Handler, Template Engine, and Scheduler end-to-end — no handoff, no second on-call.
  • Unified two parallel notification codebases (OCL & PPSL) into one deployable stack with fallback-on-retry-exhaustion and explicit loop prevention.
  • Migrated bank-form availability checks from Redis polling to Redis Pub/Sub, cutting latency in the live payment callback path.
  • Onboarded 70+ merchants — Yes Bank, IDFC, DMRC, BPCL, Jio, Shopify, Wix — each with its own signing scheme, retry ladder, and failure mode.
  • Remediated SAST-flagged SSRF, weak-hashing, and hardcoded-secret findings; moved credentials into HashiCorp Vault.

Software Engineer

Jan 2022Aug 2025

Airtel International LLP · Airtel Africa Digital Labs

Gurugram, India

Built payment orchestration and API gateway services processing Bill Pay, P2P, and voucher transactions across 14+ African markets — including a bridge into a national financial switch that still speaks a protocol from 1987.

  • Scaled core payment microservices to 300+ TPS across 14+ African markets using Spring State Machine for transaction lifecycle orchestration.
  • Shipped payment flows into the Rwanda National Digital Payment System, contributing to 27% user growth on the platform.
  • Built a jPOS-based bridge translating REST to ISO 8583 for Zambia's National Financial Switch — commended by the Bankers Association of Zambia for reducing transaction failure rates.
  • Added per-partner mutual-TLS support to the gateway's HTTP client layer after finding a multi-tenant keystore bug that could silently present the wrong merchant's certificate.
  • Reworked retry and correction logic on Kafka + Redis (Rqueue) to process 5M+ daily transactions with zero data loss during downstream outages.

Case studies

Five real incidents, written up like postmortems, not resume bullets.

Pulled from actual commit history and production systems — a multi-tenant TLS bug, a bridge into a 1987 financial protocol, and the failure modes you only find once something is running at scale.

mTLS · Keystore aliasing2023

One Keystore, Two Merchants

A shared keystore file had no notion of whose key was whose — so once a second merchant showed up, the gateway started authenticating outbound calls under the wrong identity.

SecurityMulti-tenancyTLS

Airtel Africa Digital Labs

ISO 8583 · Zambia National Financial Switch2023–2024

Speaking the Bank's Language

Zambia's National Financial Switch speaks ISO 8583, a binary financial messaging standard from 1987. Airtel's stack speaks REST. Something had to translate, in both directions, without losing a single field.

Protocol bridgingjPOSFinancial messaging

Airtel Africa Digital Labs

PG-10102 · OCL → PPSL fallbackJul 2026

Two Codebases, One Fallback Loop

Merging two parallel notification stacks meant one of them had to be able to fall back into the other on failure — without the two systems retrying into each other forever.

Distributed systemsMigrationFailure modes

Paytm Payments Services

PG-1191 · Redis Pub/Sub migrationJan–Feb 2026

From Polling to Pub/Sub

The Notification Queue Handler polled Redis to find out when a bank's payment form became available. Pub/Sub should have been a clean swap. It wasn't, because of how Spring's RedisTemplate serializes channel names underneath you.

RedisLatencyProduction debugging

Paytm Payments Services

VULN-28402 · PVULN-1112 · SAST remediationApr–May 2026

Seventy Secrets, One Vault

A static-analysis scan handed back a spreadsheet of hardcoded credentials across the notification stack. Someone had to migrate every one of them into Vault without breaking a production merchant integration in the process.

SecuritySecrets managementSAST

Paytm Payments Services

Playground

Three toys, all grounded in things I've actually shipped.

Not demos of frameworks — small working implementations of the exact primitives payments infrastructure runs on.

About

I didn't plan on payments. I stayed because of the failure modes.

I landed in backend engineering the way most people do — it was where the first offer was — and landed in payments the same way. What kept me here wasn't the domain, it was the category of problem: systems where "it usually works" isn't good enough, because the thing on the other end of a failed retry is someone's money.

I'm currently the sole backend owner of Paytm's Payment Gateway Notification Service — every SMS, WhatsApp message, email, push notification, and merchant webhook for payment, refund, settlement, and subscription events flows through something I built or maintain. That's honestly more high-pressure than it sounds on a resume: there's no second engineer to page, no committee to spread an incident across. If it breaks at 3am, I'm the one who finds out why.

Outside of production dashboards, I lift. It's the other place I've learned that progress is mostly about consistency under load and not skipping the boring reps — which, it turns out, is also just good advice for running a payments system.

click the card to flip it — back has the CVV & expiry

Contact

Send an event, not just an email.

This form publishes a real contact.message.created event straight to my inbox — no form-builder middleman.

event preview

{
  "type": "contact.message.created",
  "topic": "portfolio.contact",
  "from": "…",
  "replyTo": "…",
  "body": "…"
}

POST /api/contact → Resend → adsingh.net@gmail.com