Work

I flip 1s and 0s for a living. Messaging infra, data pipelines, real-time game servers, search indexing, and the occasional full-stack detour when the team was small enough that "backend" was more of a suggestion. Seven companies in eight years — not because I get bored, but because the interesting problems kept being somewhere else.

TikTok
Software Engineer
Jul 2025 - Present (9 mo) · Singapore

Backend engineer on the Direct Messaging team. The real-time infra that keeps conversations working for a billion-ish users — I help make sure it stays that way.

Shopee
Senior Software Engineer
Sep 2023 - Jul 2025 (1 yr 10 mo) · Jakarta, Indonesia

Ran a four-person backend team in Shopee Games. Migrated 150 billion user records off a legacy database (with retry and rollback, because the first attempt will always fail). Cut Redis CPU by ~48% and query latency by ~75% on Puzzle Bobble. Shipped a Word Puzzle game mode using a Trie — the one data structure from university that actually turned out to be useful.

  • Built Tile Match, a real-time PvP matchmaking game over WebSocket. Thousands of concurrent players, surprisingly few race conditions.
  • Pushed panic handling and rate limiting across teams — the kind of work nobody wants to own until something breaks at 2am.
  • Set up knowledge rotation so the team didn’t have a bus factor of one.
  • Wrote a shared library for error codes and metrics. Less "what does error 5023 mean?" in Slack.
  • Monthly one-on-ones and tech reviews. Management work that doesn’t show up in git log.
Grab
Senior Software Engineer
Jan 2022 - Sep 2023 (1 yr 8 mo) · Singapore / Jakarta

Owned a few projects end-to-end — mostly around keeping services from falling over. Built a state-machine-based reward system with message queues and distributed locking, which is a fancy way of saying "make sure people get their vouchers exactly once."

  • Wrote RFCs and runbooks for problems that kept recurring across services. Documentation nobody reads until they need it, then suddenly it’s the most important file in the repo.
  • Prototyped auto-generating API docs from protobuf specs. It worked. Nobody adopted it. Classic.
  • Trimmed cloud resource usage across several services. The savings were real; the gratitude was not.
  • Onboarded a new engineer with an actual plan instead of the usual "read the wiki and ask if you’re stuck."
Tokopedia 2 yr 7 mo
Senior Software Engineer
Jul 2020 - Nov 2021 (1 yr 4 mo) · Jakarta, Indonesia

Built a trending products pipeline — ~3 million products per week, ~2 million keywords per day, all going into Elasticsearch with an index retention engine so the cluster wouldn’t eventually eat itself. Also found a concurrency bug in Go graceful-shutdown handling and turned the fix into a company-wide pattern.

  • Built a burst prevention engine for real-time stats. The system was sending alerts for non-events; now it doesn’t.
  • Real-time stat monitoring with in-memory connection management. Sounds straightforward until you try to do it without leaking goroutines.
  • Helped with cloud migration prep and execution — the kind of project where "it went fine" is the best possible outcome.
  • Interviewed candidates for SE and senior SE roles.
  • Spoke at START Summit Extension Feb 2021, DevCamp 2021, and a few internal talks.
Software Engineer
Apr 2019 - Jun 2020 (1 yr 2 mo) · Jakarta, Indonesia

Built the dynamic layout (~500 RPS) and widget (~2.1K RPS) platform for the seller dashboard. Wrote a concurrency-aware library for handling widget upstream calls — basically a way to fan out requests without melting the downstream services. Also shipped the first React version of the seller home page.

  • Created an ETL background job for a backward-compatible new feature (review with attachment). The "backward-compatible" part took longer than the feature itself.
MyWishes
Software Engineer
Apr 2018 - Mar 2019 (11 mo) · Remote (London, UK)

Remote gig for a small London fintech building a digital will-writing app. I did a bit of everything — Docker, Rancher, Node.js, Next.js. The kind of role where "full stack" actually means full stack, not "React developer who also writes API routes."

Telekomunikasi Indonesia
Full Stack Developer
Jan 2018 - Mar 2018 (2 mo) · Bandung, Indonesia

Rewrote a travel/tourism app from PHP to Node.js and migrated the database from MySQL to MongoDB. Whether that last decision aged well is a conversation for another time.

Alter Indonesia
Android Developer
Mar 2017 - Jul 2017 (4 mo) · Indonesia

Sole Android developer. Built a rental marketplace app. Learned that being the only dev on a project means you also do QA, project management, and arguing with the designer. (I do not miss Android development.)

Universitas Gunadarma
BACHELOR OF ENGINEERING, INFORMATICS ENGINEERING · 2014 — 2018