THE GAUNTLET
Methodology — how the ratings & simulation work

A one-page look under the hood. I'm keeping the exact formulas and weights to myself, but this is the honest shape of how it works — including where it falls short.

The premise

Spin a wheel of the 60 Super Bowl-winning teams (1966–present). Draft one player from whichever champion you land on. Fill your roster, then run it through the actual four-round playoff bracket against real historical opponents. About 1 in 10 well-built rosters wins it all — losing is the point, and losing to a specific team ("eliminated by the '85 Bears") is the story you share.

Under that simple loop is my attempt at a genuinely hard question: how do you put a 1972 fullback and a 2023 edge rusher on the same 0–99 scale, fairly? I don't think anyone has a perfect answer. Here's mine.

Layer 1 — Player ratings, normalized across eras

The core problem with all-time comparisons is that the game changed. A 3,000-yard passing season meant something very different in 1978 than in 2013. So every stat is z-scored against position peers within its own era before anything is combined — raw volume never crosses era boundaries. On top of that base:

The result is a 0–99 scale where the "99 club" comes out looking a lot like an inner-circle Hall of Fame, and no single decade dominates — which was the sanity check I cared about most.

Layer 2 — Roster fit

A team is more than the sum of its ratings. The model scores archetype synergies (a deep-ball QB paired with a deep threat; a power back behind a mauling line) and penalties (a bomber behind a weak line; blitzers with no press corner to hold up). In the 23-man mode you also name a captain for a leadership bonus built from rings, documented captaincy, and command of the huddle. Every rule is transparent — it fires by name as you draft, so fit is a lever you pull, not a black box.

Layer 3 — The gauntlet

Opponents aren't invented. They're the actual teams that played each playoff round in history, drawn round-by-round, each carrying a strength rating built from regular-season point differential blended with the Vegas line (the betting market's opinion, which has ~100% coverage since 1999). Each game is a logistic function of the strength gap, plus home field, an "any given Sunday" noise term, and a rising difficulty curve. Identical rosters get different runs — that's the replayability.

Keeping myself honest: the tuning

I didn't want to hand-tune numbers until they felt right. Every tunable value lives in a single config file, and a deterministic bulk-simulation harness drafts thousands of rosters across several strategies and runs ~120,000 gauntlets, scoring the outcomes against explicit balance targets:

Because the simulation is fully deterministic, every result is reproducible, and re-tuning is a measured experiment rather than vibes.

Where it's imperfect

Worth saying plainly:

If you can poke a hole in it, I genuinely want to hear about it.

Data & stack

Player and game data from nflverse (1966–2025). Build pipeline in Python; the game is a dependency-free static site with a shared, pure-JavaScript engine (the exact same rating/simulation code powers both the browser and the tuning harness — no drift between what's tested and what ships).


Play the Gauntlet →

Questions, holes to poke, or partnership ideas: @FBGauntlet — I read everything.