Older posts

  1. The Cheapest Part Was Already Installed

    Three CI hangs on the same day, one nearly three hours long, traced to an unbounded apt-get for Chromium system deps on a slow package mirror, fixed by reusing an already-installed container image.

  2. A Mock That Imported the Real Thing

    A flaky error-reporting test traced to a mock factory that quietly resolved the real Sentry package under full-suite load, and the audit for the same pattern elsewhere.

  3. Two Numbers, No Explanation

    Retiring the claim-or-discard sign-in dialog for an always-silent account sync, moving the destructive "start fresh" action into Settings on its own, and reusing the same-device recap verbatim on a second device.

  4. No email required

    Cross-device player accounts arrive via Google sign-in, chosen over a magic link or a sync code, plus the claim-or-discard flow, GDPR deletion, and the review findings that shaped the implementation.

  5. The status that was never written

    The stats page showed zero PvP games because its query filtered on a status the PvP service had never actually written, plus a new high score stat and a tab reorder.

  6. Five fixes, one revert

    An architecture review turns an hour of live firefighting on the PvP presence module into an explicit state machine, then finds the same missing structure on the client side.

  7. Not a bug this time

    Cutting the E2E suite's billed CI cost by fixing an idle CPU core and moving tests to cheaper layers, then chasing down two loose ends, one real and one a false alarm.

  8. The first thing it caught

    Client-side error monitoring finally gives the solo maintainer visibility into what breaks in players' browsers, and catches a real bug within hours of shipping.

  9. Four pixels on the first letter

    The Daily word input jumped four pixels when its first letter appeared because one nested row had no height before it held a letter cell.

  10. The game was still there

    A player replaying the Daily Challenge who switched tabs mid-game came back to the previous attempt's recap instead of the game still running underneath it.