• 3 Posts
  • 14 Comments
Joined 1 month ago
cake
Cake day: September 17th, 2026

help-circle



  • on the fear part, in a healthy team the author still owns the change, the reviewer is a second pair of eyes not an insurance policy. what helped my people a lot was asking the author how they tested it and what happens if it goes wrong, if they can’t answer that’s your review comment right there. and if something breaks after you approved it, you fix it together and add a check so it doesn’t happen again, nobody serious blames the reviewer for that



  • Same conclusion here from the other side, I have a small multiplayer browser game where everyone paints cells on one shared grid (node, postgres, SSE), the client applies the paint right away and the server either confirms it or answers with a 409/429 and the client puts the old cell back. the rejection part is the one that took me longest honestly, a mutation that is valid locally but the server says no (out of charges, same color already there, world paused) and you need a different message for each, otherwise people think it’s lag. conflicts are just last write wins per cell, but that works because every write is a row in an append only events table, so nothing is really lost and you can replay or undo. and on reconnect I don’t try to merge anything, the client asks for the whole state again, at that size it’s cheaper than being clever.


  • for a multiplayer browser game I ended up skipping websockets and using SSE for everything that goes server to client, and plain POST requests for the actions. it’s just http so the reverse proxy, cookies and reconnects work without doing anything special, and EventSource reconnects by itself. one gotcha if you use express with compression middleware, exclude the SSE route or the events get buffered and arrive in chunks. websockets make more sense if the client sends a lot, mine mostly listens






  • both, kind of. the part that actually erases stuff is plain game AI, rules and a budget: it finds groups of 25+ connected pixels, announces a siege on one, closes a ring around it, and if people don’t keep the ring lit it eats the work. all deterministic code. on top of that, every 15 min a small LLM (gemini flash lite through openrouter) gets the state of the board and picks which of the legal moves to make, which work to siege and when, and the code clamps whatever it answers, it can’t break the rules. it also writes a one line reason that goes in a war log on the site, that’s the only generated text players see. everything she says in the game and on the stream comes from a bank of lines I wrote by hand, and nothing on the canvas is generated, it’s all people painting. if the LLM is off, a fixed set of rules plays instead