← Back to blog

Game Matchmaking Algorithms for Developers: TrueSkill2 to Production

October 12, 2026
Game Matchmaking Algorithms for Developers: TrueSkill2 to Production

Modern multiplayer matchmakers combine a skill-rating input (MMR or the TrueSkill family) with fast rule-based filtering and a staged fairness check to balance fairness against queue time. This guide unpacks the rating systems, the queue mechanics behind PlayFab and GameLift FlexMatch, newer research like TrueSkill2 and Cinder, and the testing patterns that keep a matchmaker honest once real players hit it. We close with implementation notes and where our team fits if you need extra hands.


TL;DR:

  • Keep separate ratings for each game mode, and avoid naive party averages, because both can conceal skill gaps that create lopsided matches.
  • Start each match search with the longest waiting ticket, filter region and mode first, then widen skill or latency limits every 15 to 30 seconds.
  • A greedy matcher is usually enough for medium sized populations; reserve Cinder's heavier fairness scoring for persistent stomp complaints despite reasonable skill gaps.
  • Cinder's fairness method compares full skill distributions rather than team averages, and its simulations tested the score across 140 million pairings.
  • Before changing rules, simulate realistic skill, region, and party distributions, then canary the change while tracking p95 wait time, win probability, role parity, and retention.

Proud Lion Studios
proudlionstudios.com
Build Better Multiplayer Matchmaking
Proud Lion Studios develops multiplayer games and custom digital solutions, including software tailored to the needs of your project.
Explore Proud Lion Studios

Table of Contents

Core concepts: MMR, SBMM, and what "match quality" really means

Skill-based matchmaking (SBMM) is the umbrella term for any system that groups players using an estimated skill level rather than random assignment. That skill level is usually expressed as MMR (matchmaking rating), a number derived from match history that feeds a win-probability model: given two teams' ratings, how likely is each team to win?

Match quality is not a single number. A "good" match balances several competing signals at once:

  • Win probability spread: a match is considered healthy when the predicted outcome sits close to 50/50, since lopsided predictions tend to produce one-sided games.
  • Role or position parity: in role-based games, skill alone is not enough; a flex-heavy team can beat an equally rated but role-starved one.
  • Team-level versus player-level fairness: averaging team skill hides mismatches where one player is far stronger or weaker than teammates, which is a common source of player complaints even when the average looks fine.

Retention is the real reason match quality matters. A queue that routinely produces blowouts trains players to expect bad experiences and churns them faster than a slow queue does. This creates the central tension every matchmaking engineer faces: tighter skill tolerances improve match quality but lengthen wait times, especially in smaller populations or off-peak hours. The practical guardrail is to treat latency, population size, and match quality as three dials you tune together, never one in isolation, and to make the tradeoffs explicit in your design rather than discovering them in production.

Rating systems and pairing strategies: TrueSkill2, ELO, and beyond

Every matchmaker needs a way to turn match history into a number it can compare. ELO, originally built for chess, updates a single rating after each win or loss and remains popular for its simplicity, but it was never designed for team games, parties, or games with more than two outcomes.

Glicko and Glicko-2 improved on ELO by adding a confidence interval (rating deviation) so new or inactive players' ratings adjust faster than established ones. TrueSkill2, developed at Microsoft Research, goes further by folding in additional in-match signals beyond win or loss, such as individual performance data. On historical data, TrueSkill2 predicted match outcomes with higher accuracy compared to the original TrueSkill, a meaningful jump for any system trying to form fair teams before a match even starts.

Once you have ratings, you still need a pairing strategy:

  • Greedy matching assigns the first compatible candidates in the queue; it is fast and simple, and works well when the population is large enough that good matches appear often.
  • Hungarian algorithm and other global optimizers search for the best overall assignment across a pool of waiting tickets, which produces better matches at a higher computational cost.
  • Clustering or bucketing groups players into skill bands first, then applies greedy or optimized matching within each bucket, cutting search space dramatically.

Pro Tip: Keep per-mode ratings instead of one global number. A player's skill in a sniper-only playlist rarely predicts their skill in objective-based modes, and mixing the two drags accuracy down for both.

Handling parties (pre-made groups) is where most of these systems get messy in practice: a party's combined rating is not just the sum of its members, and naive averaging is a frequent source of the "stomp" matches players report most often.

Queues and rules: how production matchmakers like PlayFab and FlexMatch actually work

Rating math only matters once it is wired into a queue. Production systems like PlayFab's matchmaking service use a ticket-based model: each player or party submits a matchmaking ticket, and the queue seeds candidate grouping from the longest-waiting ticket outward. Rules then do double duty, filtering out incompatible candidates and scoring the remaining ones by distance (how close they are to an ideal match).

Translating that into an implementation plan looks like this:

  1. Seed from the oldest ticket. Starting with whichever player has waited longest prevents a fast-moving queue from leaving slower matches behind indefinitely.
  2. Filter hard constraints first. Region, game mode, and party size are typically filters, not scores, since there is no partial credit for the wrong mode.
  3. Score soft constraints by distance. Skill gap, latency, and role balance are usually weighted distances, where smaller is better rather than pass or fail.
  4. Expand thresholds on a schedule. If a ticket has not matched within a set time, loosen its skill or latency tolerance incrementally, a pattern PlayFab documents as rule relaxation over time.
  5. Partition by region and mode before matching. Splitting the candidate pool early reduces the search space each matching pass has to consider, which matters at scale.

Expansion schedules need real thresholds, not guesses: a common pattern is to widen skill tolerance by a fixed step every 15 to 30 seconds of wait time, capped at a maximum that still produces a playable match. Cross-play populations add another wrinkle, since input method and latency tolerance often diverge between platforms, so many teams weight cross-play matches with a separate, looser rule set rather than forcing one scoring model to cover both.

Research-backed fairness methods: Cinder, Sanction Scores, and dynamic allowances

Beyond rules and ratings, a newer line of research tackles the problem of fairness directly, particularly for lobbies with mixed parties and solo players. Cinder proposes a two-stage approach: a fast preliminary filter based on Ruzicka similarity narrows the candidate pool cheaply, then a precise fairness metric, the "Sanction Score," computed via Wasserstein distance, evaluates the finalists more carefully. The two-stage design matters because it keeps the expensive calculation off the hot path while still catching the subtle mismatches a simple average would miss.

  • Comparing full skill distributions (via Wasserstein distance) instead of team averages catches skewed matchups that averaging hides, which is exactly the scenario that produces one-sided "stomp" games.
  • Cinder's simulations ran across 140 million simulated pairings, producing a predictable score distribution that lets engineers pick thresholds with confidence before deploying to real players.
  • TrueMatch, also from Microsoft Research, frames matchmaking as a reinforcement learning problem, dynamically adjusting allowances per region rather than applying one global threshold.

Simulation-scale testing is the differentiator here: Cinder's evaluation at 140 million simulated pairings shows what it takes to validate a fairness metric before it ever touches live traffic, a scale most studios will not replicate but should aim toward proportionally.

TrueMatch's region-aware approach is particularly relevant for low-population regions, where pre-expanding search or loosening allowances dynamically reduces wait times substantially compared to applying the same fixed threshold everywhere. Neural combinatorial or learned optimization methods sit at the expensive end of this spectrum: they can approach optimal assignments, but the engineering cost of training and maintaining a model usually only pays off once your population and matching volume are large enough to justify it.

Production patterns: architecture, telemetry, and latency targets

Keep your matching engine (the infrastructure that executes a matching pass) separate from your matching logic (the rules and weights that define what a good match looks like). This separation is standard advice across vendor documentation and matchmaking research, and it is the single architectural decision that makes future tuning possible without a redeploy.

Build your rules as configuration, not code, so a designer can adjust an expansion schedule or a role-weight without waiting on an engineering sprint. Queues should be independently configurable per game mode, since a battle royale queue and a 1v1 ranked queue have almost nothing in common operationally.

Telemetry is where most teams underinvest. At minimum, track:

  • Average and p95 wait time, broken out by region and skill tier, since averages hide the players stuck at the tail.
  • Skill gap distribution across completed matches, not just at match-formation time, to catch rating drift.
  • Role-level disparity in role-based games, since a team can look balanced on paper and still be role-starved.
  • Retention signals tied back to match quality, so a queue change's real cost is measurable, not assumed.

Pro Tip: Cache ratings at the edge close to your matchmaking service rather than hitting a central database on every ticket evaluation. FlexMatch guidance targets sub-100ms evaluation for many real-time scenarios, and that budget disappears fast once a rating lookup becomes a network round trip.

AWS GameLift FlexMatch's documentation reinforces the same two-stage pattern we described with Cinder: run a fast, lightweight filter first, and defer heavier fairness computation to a second stage or an asynchronous job so the player-facing decision stays quick.

How to test matchmakers: simulations, bots, and the metrics that matter

You cannot wait for real players to validate a matchmaking change. Run synthetic-agent simulations that model a realistic skill distribution and population size before any rule change touches live traffic.

  1. Simulate at scale first. Generate tens of thousands to millions of synthetic tickets across realistic skill, region, and party-size distributions to stress-test expansion behavior before deployment.
  2. Sanity-check expansion curves. Confirm that thresholds widen the way you intended and that no ticket gets stuck waiting indefinitely under edge-case population sizes.
  3. Track the core metrics post-launch. Average wait time, win-probability distribution, role-level disparity, and any retention signal tied to match quality all need dashboards, not spreadsheets someone checks occasionally.
  4. Use canary rollouts for rule changes. Ship a new rule weight or expansion schedule to a small traffic slice first, and widen the rollout only once the metrics hold up, especially in low-population segments where noise can masquerade as a trend.

Proud Lion Studios notes: how we approach matchmaking builds

We build multiplayer systems where matchmaking is the backbone of player retention, not an afterthought bolted on before launch. Our team works through the same layers covered above: rating design, rules-based queues, and the fairness and telemetry work that keeps a matchmaker healthy as a population grows or shrinks.

  • We design and implement custom multiplayer game backends, including matchmaking logic tailored to a title's genre and player base rather than a templated queue.
  • We build AI agents and machine learning models that support smurf detection, adaptive rating adjustments, and anomaly flagging inside a matchmaking pipeline.
  • We deliver simulation tooling and backend scaling work so a matchmaker can be stress-tested against realistic population models before launch.

If your team needs an architecture audit, a simulation proof of concept, or a full matchmaking build, our mobile games development service and broader service offerings cover each of these engagements end to end.

Personalization and adaptive matchmaking through machine learning

Rule-based matching treats every player against the same static thresholds. Machine learning models push further by learning individual play patterns, like how aggressively a player engages fights, how often they queue solo versus with a party, or how their performance shifts by time of day, and folding those patterns into matching decisions.

Player behavior signals guide personalized matching

Adaptive systems can also personalize queue behavior itself: a player who historically tolerates longer waits for tighter skill matches can be weighted differently than one who abandons queues quickly. This is distinct from classic SBMM because it is not just estimating skill, it is estimating preference and behavior alongside skill.

The engineering cost is real. Personalization models need a feedback loop, ongoing retraining, and guardrails to prevent a model from drifting toward matches that are statistically "optimal" but feel manipulative to players, such as engagement-optimized matchmaking that deliberately creates close losses to extend play sessions. Any adaptive layer should be built on top of a solid rules-based foundation, not as a replacement for one, since a learned model without interpretable fallbacks is much harder to debug when a queue starts behaving strangely.

Security considerations: keeping matchmaking fair and manipulation-resistant

A matchmaker is only as fair as the data feeding it, which makes it a direct target for manipulation. Smurfing, where an experienced player creates a new account to face weaker opponents, is the most common attack on rating accuracy, and it distorts not just that player's matches but everyone they face while their true skill is hidden.

Boosting, where a high-skill player plays on a lower-skill account to inflate someone else's rating, and queue manipulation, where players intentionally lose placement matches to land in an easier bracket, follow the same pattern: they exploit the gap between a new account's assumed skill and its real skill.

Practical defenses include cross-referencing behavioral signals (win rate velocity, performance-per-match anomalies, device or network fingerprinting) against declared skill level, and treating sudden rating jumps as a flag for review rather than an automatic pass-through. Rate-limiting account creation and tying ranked queue access to account age or playtime thresholds reduces the smurfing surface without punishing legitimate new players. None of this replaces anti-cheat detection, but a matchmaker that ignores behavioral anomalies will keep producing unfair matches no matter how good its underlying rating math is.

Pragmatic prioritization: where to spend engineering effort

Invest in telemetry and simulation first. Rating accuracy matters, but you cannot tune what you cannot measure. A greedy matcher is genuinely good enough for most mid-sized populations; save research-grade fairness work like Cinder-style scoring for when player complaints about "stomps" persist despite reasonable skill gaps. Measure perceived fairness through win-probability spread and role parity, not just win rate.

— Amal

How we can help you build or improve your matchmaker

We know matchmaking is where multiplayer games succeed or quietly lose players, and we build that layer with the same rigor we bring to smart contracts and AI pipelines: configurable rules, real simulation testing, and telemetry from day one.

Proud Lion Studios

Whether you need a full matchmaking backend, AI agents for smurf detection and adaptive ratings, or scaling support for a growing player base, our mobile games development service covers the build end to end, and our AI agents development services support the detection and personalization layer on top. Reach out through our services page to scope an audit or a proof-of-concept build.

FAQ

What is the difference between SBMM and MMR?

SBMM is the overall approach of matching players by skill rather than randomly, while MMR is the specific numeric rating used to estimate that skill. MMR feeds the SBMM system; SBMM is the strategy, MMR is one of its inputs.

Does Apex use EoMM?

We don't have published documentation confirming the specific matchmaking model used by any particular competitive shooter.

What game has the best matchmaking?

There's no definitive, sourced ranking of which game has the best matchmaking, since studios rarely publish head-to-head fairness data. What's publicly documented is design philosophy, like Overwatch's role-parity approach, and research systems like TrueSkill2 and Cinder that represent the current state of the art engineers can build toward.

Sources