Your ELO is a single number, but it isn't just tallying wins and losses — it's tracking how surprising each result was. Beating a much higher-rated opponent moves your rating more than beating someone at your own level, because the system already expected you to lose that one.
Expected score: how surprising was this result
Before your race even resolves, the math already has an opinion. Given your rating and the rating attached to the replayed match you're racing, it computes an expected score between 0 and 1 — close to 1 if you're heavily favored, close to 0 if you're not. Win when you were expected to lose and your rating jumps; win when you were already favored and it barely moves. This is the standard logistic Elo formula, the same shape chess ratings use.
K-factor: how much a single race can move you
The gap between what happened and what was expected gets multiplied by a K-factor to produce your actual rating change, and that multiplier isn't constant. Your first 16 races use a higher K-factor than every race after — the system is still figuring out where you belong, so early results are allowed to swing your rating hard. Past placement, the same-size surprise moves you less; a rating that's raced 200 times shouldn't jump around the way a brand-new one does.
You don't start at zero
Placement races correct an estimate, not build one from scratch. Signing up asks how much Sudoku experience you have, and that sets your starting rating before you've raced anyone — someone who's solved for years doesn't start in the same place as someone who picked up Sudoku last week. Placement races then spend those first 16 races confirming or correcting that starting guess.
Only your side of the ledger moves
A race changes your rating. It never changes the rating of whoever's replayed match you raced — they aren't online, didn't agree to anything, and can't be held responsible for a swing from a race they don't know is happening. What their match carries instead is a snapshot: their rating at the exact moment they made that run, frozen in place, used only to calibrate what your race is worth.
Who you actually get matched against
None of this happens against a random opponent — matchmaking looks for a replayed match around your current rating, not just any solve on the puzzle you picked. The exact logic is its own topic for another day; for now, just know the opponent in front of you isn't arbitrary.
Two numbers and a formula, with a K-factor that changes as you gain experience — that's the entire system today. No hidden multipliers, no manual adjustments, just the same math that's been rating competitive players for decades, adapted to run against a recorded opponent. Racing someone live instead of a replay is a direction we'd like to take this eventually — when that happens, this is the rating system it'll plug into.