A live, in-browser port of the production matchmaking algorithm. Tweak any of the sixteen
knobs on the left and the simulator re-runs the night against your config — replaying
the two real combine nights of 2026-04-29 and 2026-04-30 (both run on the
live production config: floor 200, ceiling 1000, base δ 30%, max 100%),
or synthesising a fresh night from the empirical shape of those two and the 303-player active
eligible pool. Pin a baseline and you can see exactly which knobs widened the skill spread or
starved a tier of matches.
Matches popped—
Unmatched %—
p50 wait—
p95 wait—
Ideal % (1–1.5 SU)—
Too wide % (≥2 SU)—
Loading…
Skill spread distribution
Matches by intra-roster MMR spread, in skill units (one tier = 1 SU). The calibration sweet spot is 1–1.5 SU — wide enough for cross-tier signal, tight enough that the result still reflects skill rather than tier-gap. Anything ≥2 SU is too wide.
Same-tier (< 1 SU)
Roster all from one tier. No cross-tier observation — produces no calibration signal.
Ideal (1–1.5 SU)
The combine sweet spot. Cross-tier observation that we can actually trust.
Wide (1.5–2 SU)
Stretched but still inside the threshold. Acceptable; not preferred.
Too wide (≥ 2 SU)
Past the calibration threshold. Skill spread overwhelms tier signal; player experience degrades.
Per-tier wait time
For each tier, the line runs from p50 (median wait) to p95 (the unlucky tail). A short line means most players in that tier wait about the same; a long line means a few players got stuck while most matched fast.
Queue depth over time
Live queue size sampled every five seconds. Each ▴ on the bottom rug is a match popping; the red dashed line at ten is the pop threshold. A queue that monotonically grows past the threshold without popping is an algorithm that can't keep up with arrivals.
Pop cadence
Matches formed per ten-minute bucket. Flat = healthy. Long zero stretches = starvation period worth investigating.
Roster balance · |home – away| total MMR
Distribution of the absolute difference in summed MMR between home and away rosters, after the snake-draft. Lower is better — a 5v5 with a 100-MMR roster gap is essentially even, while a 400+ gap is a likely stomp. The snake draft on a sorted roster guarantees the gap is bounded by the tightest pair-gate window; this chart shows whether that bound holds in practice.
Same-tier vs mixed-tier matches, by tier
For each tier, what fraction of its match slots came from a same-tier match (every roster slot from this tier) versus a mixed-tier match (rosters drawing from two or more tiers). Mixed is the goal; a tier living entirely in same-tier matches is one the algorithm has not bridged across the gap. n = the tier's total slot count across all matches.
Match explorer
Every generated match plotted by its skill spread (intra-roster SU range) and roster balance (|home − away| MMR). Each dot is colored by the match's avg-MMR tier. Click any dot to inspect the full 10-player roster below — who got drafted to which side, their MMRs, types, and how the snake-draft balanced them.
Click a match in the scatter above to see its roster.
Lobby roster strips
Each row is one match. The ten dots show every player's raw MMR on the horizontal axis, colored by tier. Circles = home team, squares = away team after the snake draft. A row that's tightly clustered is a balanced match; a row with a long horizontal sweep crosses tiers.
Auto-tune results
Composite score combines target skill spread, unmatched %, and p95 wait. Lower is better. The scatter plots every evaluated candidate by skill_spread_avg vs p95_wait_min; color = composite score (lower = darker), size = unmatched %. The orange line is the Pareto front — configs that no other candidate beats on both axes simultaneously. The ★ baseline is the config that was active when the search started. Click a row or scatter point to see what knobs that candidate changed.
Top 10 candidates · click to inspect
#
score
skill
unm%
p95
Selected config
Click a row or scatter point to see the config diff.