Senior Backend Engineer — Payments, Fintech & Telecom
Senior Software Engineer, 10 years, Dhaka. Backend systems for payments, telecom and fintech — the kind where a duplicated request costs money and a missed callback becomes a support ticket.
Currently at Dotlines, working on the multi-provider payment layer behind a cross-border recharge and wallet platform (300K+ registered users, 10,000+ daily active). Mostly PHP/Laravel and Node.js, with React and Vue on the front end, and enough Python to keep the pipelines honest.
🌱 Currently picking up: AI/ML, LLM — outside production so far, learning in side projects.
| System | What it does | Scale / impact |
|---|---|---|
| Cross-border recharge & wallet platform | Recharge, bill payment and wallet for migrant communities; I own the core transaction-processing layer | 300K+ registered · 10,000+ daily active · 99.9% uptime |
| Multi-provider payment abstraction | 9 payment providers behind one interface — automatic failover, exponential-backoff retry, dead-letter queues | Transaction success 91% → 97.5% |
| Cross-border remittance integration | Built end to end: cash-in, wallet funding, earning reports, transaction history | $2M+ monthly volume · +25% platform revenue |
| Duplicate-request detection | Redis SHA-256 request fingerprinting with configurable TTL | ~5,000 duplicate charges/month prevented · chargebacks −45% |
| Automated refund pipeline | Idempotent refunds with wallet auto-crediting | Customer complaints −70% · 40+ hours/month of manual work removed |
| Digital wallet (Laos) | Wallet transfers, agent commissions, subscription billing, eKYC with JWE encryption | 50,000+ transactions in first quarter |
| Real-time quiz platform | Timed gameplay, Redis leaderboards, queue-driven reward payouts | 5,000+ concurrent users · 99.5% uptime · zero payment failures |
| Third-party integration layer | Telecom, banking, payment and utility APIs with retry logic and full reconciliation | 100+ integrations |
Most of my work is closed-source, so these are generalised reference
implementations: the real architecture, control flow and data model, with
every employer, vendor and customer identifier removed. Each one has a
README and an ARCHITECTURE.md explaining the design decisions and their
trade-offs — that document is usually the more interesting half.
Commit dates are backdated to when the original work was done. Each commit message says so plainly.
| multi-provider-order-orchestrator | Queue-driven orchestration across providers — priority failover, idempotent references, webhook re-verification, lifecycle tracing with credential redaction. Lumen |
| mobile-wallet-backend | Three-level transaction limit engine with scheduled resets, staged KYC, JWE with zero-downtime key rotation. Laravel |
| usage-balance-metering-service | Prepaid metering — settle-after-delivery, min(actual, reserved), idempotent settlement flags. Laravel |
| invoice-generation-service | Invoicing — staged recurring-schedule edits, payment callback as the authoritative event. Laravel |
| payment-gateway-platform-2018 | Where this started: multi-PSP gateway, module per processor, reconciliation sweep for lost callbacks. CodeIgniter, 2018 |
| multi-mode-request-api | One pipeline as sync / async-callback / sandbox; duplicate suppression via a single atomic SET NX EX. Node/Express + Sequelize |
| modular-domain-composer | Modular-monolith API gateway — JWE payloads with per-client keys, attribute-level RBAC. Node/Express |
| iot-telemetry-platform | Device telemetry — dual ingestion paths, archive-before-parse, replayable backlog, rebuildable rollups. Laravel |
| scheduled-export-pipeline | Multi-server export — pre-flight checks, correct CSV quoting, idempotent backfill. Bash + MySQL + SMB |
| multi-tenant-commerce-api | Tenancy as middleware, so scoping can't be omitted by a forgotten filter. Laravel |
| support-ticket-management-system | Scheduled SLA engine that escalates and reassigns on breach, per-transition audit timeline. Laravel + Vue |
| tournament-competition-engine | Absolute per-question windows so every player answers in the same wall-clock slot. Laravel |
| laravel-crud-scaffold-toolkit | One field definition feeds model, migration, request, controller, tests and Vue views. Laravel |
| multi-channel-notification-dispatcher | Per-token delivery tracking and honest partial-send status. Laravel |
| node-microservice-scaffold | Filesystem-discovered models and schemas, one error type, one response envelope. Node/Express |
A callback is a hint, not a fact. If a provider doesn't sign its webhooks, the callback only means "go ask them what happened" — never "this succeeded."
Derived data should be rebuildable. Daily summaries, balances, counters — if you can only append to them, they're permanently wrong the first time something backfills.
Reconcile for silence. The failure that hurts is the one that produces no error: a callback that never came, a ticket that was never created. Those need a sweep looking for them, not an alert waiting for them.
Write down why, not what. The ARCHITECTURE.md in each repo explains the
trade-off that was accepted. Six months later that's the only part anyone
needs.
Open to senior backend and technical lead roles — remote or Dhaka.