Field notes from the review team
Learn to ship code that survives
The mistakes every team makes — in the code we write and the code we generate — and how to catch them before they ship. Friendly, concrete, ten minutes at a time.
Frontend
Components, UX states, and interfaces that tell the truth
When AI Writes Your UI: Reviewing for the Design System It Doesn't Know You Have
AI assistants write plausible components at astonishing speed — and quietly invent a second button, a third modal, and a parallel spacing scale. How to review UI for drift.
Two Kinds of State: Why Copying Server Data into useState Breeds Bugs
Half the 'state management' pain in React apps comes from treating a server cache like client state. On the two-state model, sync bugs, and single sources of truth.
Forms People Can Actually Finish
Watch five users fill out your signup form and you'll rewrite it by Friday. On validation timing, error placement, preserving input, and the disabled-button trap.
Performance Is a Feature (and It Has a Budget)
Nobody ships a slow app on purpose — it happens 40 kilobytes at a time. On bundle budgets, memoizing with evidence, and why measuring comes before optimizing.
Optimistic UI Without the Data Loss: A Practical Guide
Optimistic updates make apps feel instant — and, done carelessly, make them lie. Reversibility, race conditions, and how to reconcile with the server without losing user data.
key={index} Will Bite You: A Field Guide to React Reconciliation
The bug report said 'I deleted one row and a different row's data changed.' The cause was one character: using the array index as a key. Here's what's actually going on.
Your Component Is Doing Too Much: Finding the Seams
The 600-line component isn't a size problem, it's a responsibility problem. How to split data from presentation, and why 'reusable' components are often welded to one screen.
useEffect Is Not a Lifecycle Hook (and Other Things I Wish I'd Learned Sooner)
Most useEffect bugs come from one mental model error: treating effects as lifecycle events. Here's how to spot infinite loops, stale closures, and effects that shouldn't exist.
The Three UI States Everyone Forgets (Until a User Finds Them First)
Loading, empty, and error states are where real users actually live. Here's how happy-path-only components sneak into production, and how to catch them in review.