← All posts
Product

Measuring skill when the cards are random: Poker IQ

You can play a hand perfectly and still lose. So we don't score your results — we score your decisions.


Here is the problem with rating a poker player: the cards are random. You can make every correct choice and still lose the hand, or punt your stack and get bailed out by the river. Score people on results and you mostly measure luck. So Poker IQ scores something else entirely — your decisions.

Grade the choice, not the outcome

Every decision Wit grades gets one of four verdicts, mapped to a score:

  • Great = 1.0 · Good = 0.8 · OK = 0.5 · Mistake = 0.0

Crucially, the verdict is judged against what was correct given the information you had— not whether the card you needed happened to come.

Elo against a competent benchmark

Each game mode (the table, the daily puzzle, Decision Rush, preflop drills) carries its own Elo rating, updated against a fixed "competent player" benchmark. The move follows standard Elo, with two poker-specific twists:

delta = clamp(  K(attempts) × leverage × (score − expected),  ±30  )

K = 40 (first 30 decisions) → 24 → 16   // settle as you log more
leverage = chips at stake                // an all-in matters more than a min-bet
K-factor decays with experience; leverage weights high-stakes spots; the swing is clamped.

The ±30 clamp means no single hand can wildly swing your number, and the leverage weight means a great all-in is rewarded — and a big blunder punished — far more than a tiny call. The result climbs with genuine skill instead of jumping around with variance.

One honest headline number

The modes roll up into a single Poker IQ: a weighted average — puzzle 45%, play 35%, rush 15%, preflop 5% — over the modes you have actually played. We hide it behind "Calibrating" for your first ten decisions, then reveal a number and a tier, from Fledgling up to Wit's Equal.

A subtle bug worth its own paragraph

We shipped a version where answering a daily puzzle correctlycould lower your Poker IQ. The cause: a freshly-opened mode was seeded at the flat default rating, well below an established player's level. Opening that higher-weighted mode dragged the weighted average down — even on a right answer. The fix is a one-liner that says skill carries across modes:

const ratingBefore = p.ratings[mode] ?? headlineIQ(p.ratings, p.attempts);
Seed a new mode at your CURRENT headline IQ, not a flat default.

A small line, but it is the difference between a score players trust and one that feels broken. Measuring skill honestly is the whole point.

Keep reading