I build the parts of a product that move money.
Ledgers, checkouts, payouts and the webhooks between them, for companies across Southeast Asia. Ten years in, mostly on teams of three to eight, usually the person who reads the bank file.
Changelog
Shipped work, newest first. Each entry is one product or system, with the number it moved.
- Ledger rewrite, Selasih WalletMoved every balance in the wallet from mutable rows to an append-only double-entry ledger.0.002%
- Checkout rebuild, PasarlokaCut the checkout from five screens to two and the slowest step from 2.8 seconds to 640 milliseconds.+11.4%
- FX quote engine, LintasanA rate service that locks a quote for 90 seconds without letting the company eat the market move.0.3%
- Webhook delivery, TidewireRebuilt how shipment events reach customer systems, with fair queues and honest retries.99.98%
- Same-day payouts, KedaiwiraSellers used to wait three days for their money. Now they are paid before 6 pm on the day the order is delivered.T+0
- sempadan, Open sourceA small rate limiter that gives the same answer from Go and Node, backed by one Redis script.4.3k
Screens
What the work looks like to the people who use it.
Open source and talks
Maintained
- sempadanRate limiter for Go and TypeScript that gives the same answer from both, via one Redis script.
- lajurLinter for PostgreSQL migrations. Flags changes that take a long lock on a busy table before they reach production.
- tapakGenerates fake bank settlement files in the formats Malaysian banks send, for testing reconciliation code.
Writing
- Money is an integerEvery money bug I have fixed in ten years came back to one of three mistakes. All three go away when you store sen, not ringgit.
- Idempotency is a product featureWhen a payment times out, the customer taps again. Whether that charges them twice is not a backend detail. It is the product.
- The 640 millisecond checkoutHow we took the slowest step of a grocery checkout from 2.8 seconds to 640 ms, mostly by deleting things.
Stack
- Go, TypeScript, PostgreSQL, Redis
- Rust, Python, Kafka, Temporal, Next.js, React Native
- AWS, Terraform, GitHub Actions, OpenTelemetry, Grafana
- Card schemes, FPX, DuitNow, QRIS, InstaPay, bank settlement files
- Neovim, a paper notebook, a whiteboard that does not quite erase
Contact
Taking on one engagement from January 2027.
Four to six month contracts, embedded with your team, in Kuala Lumpur or remote between UTC+7 and UTC+9. Best fit: a product that already moves money and has started to feel it at month end.
[email protected]