Rollback at 14ms — the cheap parts
A frame-accurate rollback build doesn't have to be a multi-quarter project. Here's the cut we shipped in six weeks.
When we started, the team assumed rollback was a multi-quarter rewrite. It wasn't — at least not for our shape of game. What it cost us was discipline about which state was deterministic, and a willingness to throw away two earlier networking layers we'd half-built and were emotionally attached to.
The biggest single win was deciding, on day one, that the renderer would have zero authority on simulation state. The view layer subscribed to a ring buffer; the simulation marched independently at 60Hz. Once that line was drawn, everything else fell into shape — input replay, lag compensation, hit confirmation. The renderer just drew what the buffer told it.
Frame 14 of the post-mortem is the one we keep coming back to: the moment our worst-case rollback dropped from 110ms to 14ms by skipping a single allocation in the snapshot path. Profilers are honest in a way design docs never are.