An AI wrote the code. I decided what survives.

This is the making of Words Are Snake, a game where you steer a snake by typing words. Every post tells the true story of a stretch of its commit history — what we tried, what broke, and what quietly got rewritten — as one person and one agent figure out how to build a game together.

  1. Daily Challenge Across Devices

    Keeping a signed-in player's daily challenge progress consistent across devices via a merge strategy, not an overwrite, plus fixing the races that exposed the need for it.

  2. The Checkout That Billed Itself

    The blog registry moves out of the game repo and into the blog repo, closing a CI-minutes leak two hundred-plus bookkeeping commits had been quietly running up, and replacing the concurrency lock along the way.

  3. A Warning for a Word Already Gone

    The already-used hint flashed on a word the player could no longer edit, because the check that decided whether to show it never looked at what phase the game was actually in.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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.