12 posts

Writing

Essays and long-form learnings on engineering, fundamentals, and shipping software.

25 Oct, 2026 · 15 min read

Web Performance, Part 3: Get to first paint faster

In this post, we cover how to make the page faster without changing much of the code. We follow the first seconds of a slow checkout page and cut TTFB and FCP one wait at a time.

21 Oct, 2026 · 12 min read

Web Performance, Part 2: Lab data lies (a little)

Your Lighthouse score says 98, yet real customers still wait. Lab, synthetic and field data each tell part of the story. Here is how to read them. You will also learn to set goals that keep you accountable.

12 Oct, 2026 · 4 min read

Real income, explained over a cup of chai

Your salary went up. So why does it feel like you have less? A simple explanation of real income, sparked by PM Lawrence Wong's comments at the Forbes Global CEO Conference.

11 Oct, 2026 · 8 min read

CSR vs SSR vs SSG vs ISR, explained

Four acronyms, one question: where and when does your HTML get built? A plain walkthrough of client-side, server-side, static and incremental rendering, and how to pick between them.

17 Aug, 2026 · 6 min read

How OTA updates actually work?

Ever wondered how the bugs in an app gets fixed without users downloading any latest version of the app? This is where OTA comes into picutre. Read more to learn what it is and how it works.

10 Aug, 2026 · 9 min read

Making React Native Pages Feel Fast.. Is Not Enough

A loading spinner makes the wait feel shorter. It does not make the wait shorter. Here are the strategies that actually shrink page load time in React Native, and the one that only hides it.

27 Jul, 2026 · 10 min read

JWT vs Session Tokens

Two ways to answer the same question - who is making this request? They work differently enough that the choice between them shapes a lot of what you build on top. Here's how each one works, what separates them, and where each one fits.

21 Jul, 2026 · 7 min read

What Actually Happens When You Run Node.js

I'm a frontend engineer working on becoming fullstack, and instead of rushing to write code in Node.js, I spent a week figuring out what Node is actually doing underneath. Here's what finally made the event loop click.

18 Jul, 2026 · 8 min read

Stop Vibe-Coding in One Giant Chat

One long conversation with an AI assistant degrades the same way one long function does. Here's how I split my workflow into five stages, each with its own agent, its own context, and its own job.

1 Jul, 2026 · 10 min read

The Code Looked Fine. That Was the Problem.

AI can write code fast, but it has no idea whether that code survives contact with real users. Four bugs it will happily hand you, and why understanding the system underneath still matters more than ever.

5 Mar, 2026 · 5 min read

Stop writing nested if statements

One small change made my code way easier to read and maintain. Instead of nesting conditionals deeper and deeper, handle edge cases first and let the happy path speak for itself.