rahmad nurhuda · senior backend engineer, jakarta. five years of go, elasticsearch & redis at tokopedia, tiket & astro.
ahduudha!
— the sound a system makes when it hurts.— read it backwards. that's who fixes it.
−40% flash-sale infra cost✺+12.2% daily CVR via ML ranking✺P99 −20% on Redis Cluster✺−50% peak pods✺−30% memory, Go 1.21→1.24✺+15% booking conversion✺−40% flash-sale infra cost✺+12.2% daily CVR via ML ranking✺P99 −20% on Redis Cluster✺−50% peak pods✺−30% memory, Go 1.21→1.24✺+15% booking conversion✺
Every job here is the same job: turning aduh! into ahh.
Real production incidents and bottlenecks from Tokopedia, Tiket and Astro, and what they measured after I was done.
aduh! №1 · flash sale, tiket.com
Every spike hit Elasticsearch directly. Pods scaled like panic.
ahh.
Rebuilt the read path on FastHTTP with a two-tier hot/cold cache of my own design, so the spike never reaches the source. −40% infra cost · −50% pods · −50% ES calls.
aduh! №2 · hotel search ranking
Static ranking left relevance, and revenue, on the table.
ahh.
Built the low-latency serving path for ML ranking in SRP and ran the controlled A/Bs myself. +12.2% daily CVR · +10.4% top-5 hit rate.
aduh! №3 · redis ceiling
Standalone Redis: one node, one limit, vertical-only scaling.
ahh.
Migrated production to a high-availability Redis Cluster, zero-downtime. P99 −20%+ at peak.
aduh! №4 · sold-out rooms
Guests bounced when their exact room wasn't purchasable.
ahh.
Room-recommendation service in Go + ES fuzzy matching, offering the closest available alternative. Supported +15% booking conversion.
aduh! №5 · fleet-wide drift
Old runtimes and gateway sprawl, quietly taxing every service.
ahh.
Led Go 1.21→1.24 across services (−30% memory) and the Krakend gateway rollout (−25% avg response time).
aduh! №6 · discovery filters, tiket.com
Shoppers saw a wall of results, with no way to slice it down.
ahh.
Built dynamic and popular filters on Elasticsearch aggregations plus real booking behavior, so the results bend to intent. +20% search usage.
aduh! №7 · recommendation sprawl, tiket.com
Home, landing pages and campaigns each reinvented their own recs.
ahh.
Shipped one Recommendation API, configured from an internal dashboard, serving the home page, landing pages and even TikTok campaigns. One source of truth for recs.
aduh! №8 · accommodation card, tiket.com
The search-result card needed a redesign the backend couldn't feed yet.
ahh.
As backend PIC, planned and shipped the API changes behind the new SRP accommodation card, keeping it adaptable for future UI iterations. A faster, more flexible result card.
My favorite trick, on one ruler.
From the flash-sale rebuild: data gets two clocks: a short hot expiry and a longer cold TTL in Redis. Watch the playhead: it shows what a request arriving right now would pay.
HOT · serve fresh
STALE · serve + revalidate
MISS
t=0
hot expiry · 2m
cold TTL · 5m
a request right now pays1.0mshot hit, straight from memory.
Inside hot: answered from memory, ~1–3ms. The spike never leaves the box.
Past hot, inside cold: serve the stale copy instantly, refresh from source in the background. Nobody waits on the refresh.
Past both: one request pays the full ~800ms fetch, and it re-arms both clocks for everyone behind it.