Blog
Notes on Java, backend architecture, and 10 years of shipping software professionally — written from Singapore.
Most Java developers catch exceptions every day without being able to draw the hierarchy from memory. Here's how it fits together, and when — and how — to write a custom exception instead of reusing a generic one.
Everyone reaches for HashMap without thinking twice. Almost nobody can explain what happens between calling put() and the value landing somewhere in memory. Here's the internal mechanics, and what's actually changed since Java 8.
Encapsulation, abstraction, inheritance, polymorphism — everyone can recite the definitions. Almost nobody can explain them clearly under pressure. Here's how, with Java examples.
Looking back at a decade of writing Java professionally, a few lessons kept showing up more than the rest.
It's not exciting, but it's still the fastest way I know to ship a correct backend service.
Retries are inevitable in distributed systems. Idempotency is what keeps them from becoming double charges.
A few honest notes on relocating for a backend role, from someone who's now been here long enough to have opinions.