• Matchmaking working at your current player count but not designed for the 10x increase you are planning for after the next content update?

  • Match quality degrading at off-peak hours because the queue size isn't large enough for strict skill-based matching and the system has no fallback strategy?

Matchmaking System Development

Custom matchmaking infrastructure for game studios who need skill-based player matching that holds up at scale -- not a queue prototype that worked at 500 concurrent players and breaks at 50,000.

Matchmaking is a distributed systems problem. The queue management, the rating calculation, the match quality vs wait time trade-off, and the server allocation that fires when a match is found all need to work correctly under the concurrency your game will actually see.

  • Skill-based matchmaking using ELO, MMR, or custom rating systems with configurable match parameters

  • Queue management with wait time estimation and dynamic parameter relaxation

  • Regional routing directing players to the server with lowest latency for match participants

  • Game server allocation integrated with your orchestration layer

RaftLabs builds custom matchmaking systems for game studios -- ELO and MMR-based skill matching, queue management with wait time estimation, regional routing for low-latency matches, and game server allocation. Most matchmaking systems deliver in 8 to 14 weeks at a fixed cost.

Vodafone
Aldi
Nike
Microsoft
Heineken
Cisco
Calorgas
Energia Rewards
GE
Bank of America
T-Mobile
Valero
Techstars
East Ventures
Software products shipped
100+
Cost delivery
Fixed
Week delivery cycles
8-12
Industries served
24+

Matchmaking is a distributed systems problem, not a queue

The naive approach to matchmaking -- put players in a queue, pop them into a match when the numbers work out -- functions at small scale. It breaks under the conditions that actually matter: high concurrent player counts, off-peak queues where strict skill constraints produce unacceptable wait times, and regional player populations that need to be balanced against latency requirements.

A production matchmaking system requires a rating system that produces meaningful skill estimates, a queue management strategy that balances match quality against wait time, regional routing that keeps latency acceptable, and a server allocation pathway that creates a match without the player noticing the infrastructure behind it.

What we build

Skill-based rating and matching

Rating system implementation using ELO, Glicko-2, or TrueSkill 2 (Microsoft Research's most current probabilistic skill model) depending on your game mode and team structure. ELO is a single-number rating suitable for 1v1 games with clear win/loss outcomes. Glicko-2 extends ELO with a rating deviation (RD) and volatility component that correctly models rating uncertainty for players who have not played recently, reducing the confidence interval on ratings that have gone stale. TrueSkill 2 handles team-based games with multi-player rosters, accounts for individual player contribution within team outcomes, and models skill separately across multiple game modes or roles -- more accurate for complex team compositions than ELO's team-average approach.

MMR (Matchmaking Rating) brackets segment the player population into visible competitive tiers (Bronze, Silver, Gold, Platinum, Diamond, and so on) mapped from the underlying continuous skill estimate, giving players a visible progression target while the matchmaking engine uses the continuous skill score for match quality calculations. Match parameter configuration covers team size, game mode, region, and the skill range tolerance defining an acceptable match. Dynamic parameter relaxation widens the skill window as wait time increases -- the relaxation curve is configurable as a linear function, a step function at defined wait-time thresholds, or a sigmoid curve, so the game team controls exactly how match quality trades against wait time at different queue depths. Rating uncertainty is handled correctly for new players with few matches on record, preventing the common scenario where a highly skilled new account is placed in matches far below their actual skill during the placement phase.

Queue management and wait time

Queue ingestion handles player enqueue requests with deduplication (preventing double-queuing from reconnects or network glitches), reconnection handling for players whose client drops and reconnects mid-queue while retaining their position and wait time, and party grouping for players queuing together with their party's combined skill estimate calculated from the group roster. Queue state is stored in Redis with TTL-based expiry for abandoned queue entries, giving the matchmaking service consistent sub-millisecond access to the full queue snapshot needed to evaluate match candidates at each matching cycle.

Queue size monitoring gives the operations team real-time visibility into queue depth segmented by region, game mode, and skill bracket. This is the data that informs parameter tuning decisions -- if the Gold skill bracket in North America consistently has a 4-minute average wait at off-peak hours, the relaxation curve for that bracket and time window can be adjusted without touching other brackets or regions. Wait time estimation uses current queue state -- the number of compatible players in the skill range, the current match rate for the bracket, and the time-of-day historical match rate -- to give players an estimated wait before a match is found. Backfill for abandoned matches re-queues disconnected players or replaces players who left a lobby before match start, pulling from a priority queue of waiting players to fill the slot rather than cancelling the match. The queue management layer is the difference between matchmaking that feels responsive and one that feels like a black box.

Regional routing and latency management

Regional server deployment with the matchmaking system routing players to the region and server cluster that minimises aggregate latency for all match participants -- not simply the region closest to the first player to queue. When a candidate match is being evaluated, the routing algorithm calculates the latency each player would experience to each available server region and selects the region that minimises the worst-case latency across the match. The acceptable latency threshold is configurable per game mode: a fast-paced shooter might set a hard limit of 80ms maximum ping for any participant; a turn-based strategy game might accept 200ms.

Latency measurement uses client-reported RTT data from active ping probes to candidate server regions, collected every 30 to 60 seconds by the game client and stored in the player's matchmaking profile. This gives the routing algorithm accurate, current latency data without requiring a ping measurement step at queue time. For game modes where player populations don't support regional-only matching -- small player pools, off-peak hours, or niche game modes -- cross-region matching is enabled with the latency trade-off configured to your acceptable threshold. Region restriction for game modes where cross-region play is not permitted (competitive integrity, content release schedules, or regulatory requirements such as data residency) blocks cross-region match formation and surfaces a clear wait-time estimate to the player so they understand why the queue is longer.

Server allocation and match creation

Server allocation request is sent to the game server orchestration layer when a match is confirmed -- requesting a dedicated game server instance in the target region with the correct game mode configuration. Agones on Kubernetes is the preferred orchestration layer for studios running their own infrastructure: Agones manages a fleet of game server processes as Kubernetes GameServer custom resources, and the matchmaking service sends a GameServerAllocation request specifying the required fleet, region, and game mode labels. Agones responds with the allocated server's IP address and port. For studios using AWS GameLift, the matchmaking service calls the GameLift StartGameSessionPlacement API with the player session request.

GSAP (Game Server Allocation Protocol) defines the standardised allocation request/response contract between the matchmaking service and the orchestration layer, decoupling the two so the orchestration backend can be changed without rewriting the matchmaking service. Match token generation issues each matched player a signed JWT with the server address, port, and a session secret, distributed via the matchmaking service's WebSocket connection to each client. Match creation timeout handling re-queues all players if server allocation fails or exceeds the SLA (typically 5 seconds). Match replay storage archives the full game session event log to S3 in a compressed format for post-match review, anti-cheat analysis, and highlight clip generation. Match result ingestion after the session ends updates player ratings, records the full match history with participant list and outcome, and releases the game server back to the Agones fleet.

Matchmaking analytics and tuning

Match quality metrics -- skill differential between teams at match creation, predicted win probability from the rating model, and actual match outcome -- are aggregated by bracket, region, game mode, and time window to assess whether the matchmaking system is producing fair, competitive games. A healthy matchmaking system shows actual win rates converging toward the 50/50 predicted probability across all brackets; systematic deviation identifies brackets where the rating model or matching parameters need adjustment.

Wait time distribution by region, game mode, skill bracket, and time of day shows the game team exactly where queues are slow -- whether that is a population problem in a specific bracket, a parameter configuration issue, or a server allocation latency spike. Queue funnel metrics track the conversion rate from queue entry through match found, match accepted (where applicable), and match started, with drop-off at each stage measured as a percentage and trended over time. Fill rate measures the percentage of queue entries that result in a completed match rather than a timeout or abandonment; a fill rate below 90% in peak hours indicates a matching or population problem. Anti-cheat integration with Easy Anti-Cheat (EAC) or BattlEye operates at the game server level and passes ban events to the matchmaking service, which enforces queue restrictions for flagged accounts and tracks ban rates as a match quality signal alongside skill differential. Rating distribution analysis monitors whether the TrueSkill 2 or MMR distribution remains healthy -- a normal distribution centred on the starting rating with increasing spread over time -- or whether it is collapsing toward a central cluster, which indicates a calibration problem. The analytics dashboard gives the game team the data to tune matchmaking parameters by bracket and region independently rather than applying global changes that fix one segment and break another.

Custom game modes and tournament support

Custom game mode matchmaking supports the full range of queue types beyond standard ranked: unranked casual matches with relaxed skill constraints where the priority is fast queue times over competitive balance, limited-time event modes with specific map or rule configurations that run for a defined window, and custom lobbies with invite-only access or spectator slots for streamer and community events. Each game mode is a separate matchmaking configuration with its own rating pool, skill tolerance, regional routing rules, and server allocation template.

Tournament bracket management handles organised competitive events with player and team seeding derived from their matchmaking rating. Single-elimination, double-elimination, and Swiss-format bracket structures are supported, with match scheduling automated from the bracket and results propagated to advance players automatically on match completion. Draft mode support for game modes with a pre-match hero, character, or map selection phase manages the draft timer, pick/ban sequencing, and the handoff to the game server allocation once the draft is complete. Premade team matching handles parties queuing as a full team -- five-stack in a 5v5 game -- with team MMR calculated as a composite of the individual member ratings adjusted for coordination factor, and placed against opponent teams of equivalent composite rating. Match quality score -- a computed metric combining skill balance, latency quality, server allocation time, and whether backfill was required -- is recorded for every match and available in the analytics dashboard for the game team to track the overall health of the matchmaking system over time.

Frequently asked questions

Off-peak matchmaking is a configuration problem as much as an engineering problem. The system supports dynamic parameter relaxation with a configurable relaxation function that widens the acceptable skill range, accepts cross-region matches above the normal latency threshold, or reduces minimum player counts for partial-lobby fills as a player's individual wait time increases. A typical configuration widens the skill window by one bracket every 90 seconds of wait, accepts cross-region matching after 3 minutes, and enables fill-with-bots (where the game supports it) after 5 minutes. These thresholds are tuned per bracket and region independently -- a high-population bracket in a peak region uses tighter defaults than a niche game mode in a low-population region.

For game modes with consistently small queues, queue consolidation merges sub-queues at defined size thresholds: if the Platinum bracket has fewer than 20 players in queue at a given time, it merges with the adjacent Gold and Diamond brackets for matching purposes, with a notation to players that expanded matching is active. Match quality score -- factoring in the skill differential created by the relaxed parameters -- is recorded for every off-peak match so the game team can monitor whether relaxation is producing matches that players report as unfair. Backfill for abandoned matches pulls from the priority queue of re-queued players so partial lobbies are filled quickly rather than dissolved. The result is a system that produces the best available match at any queue size rather than producing timeouts that frustrate the players who are online during off-peak hours.

Yes. Party queuing requires handling the skill calculation for a group of players -- the standard approach uses the highest-rated player's MMR as the party's bracket placement to prevent high-skill players from boosting lower-skill friends into easier lobbies, with a party coordination bonus applied to the opponent-search parameters to account for the coordination advantage a pre-formed party has over solo-queue players facing them. TrueSkill 2's team composition model handles this more accurately than ELO-based approaches by modelling individual contributions within the team outcome rather than treating the team as a single unit.

Party members are kept together in the same team throughout the match; the matchmaking system treats the party as an atomic unit and never splits it across teams. For team vs team queuing where parties are of different sizes -- a 3-stack facing two 2-stacks, or a 5-stack in a 5v5 mode -- the skill balancing accounts for the composition difference. Mixed queues (solo players filling out the match alongside a party) require careful skill balancing to avoid placing solo players in a match they cannot win against a coordinated party. The specific party and team queuing rules for each of your game modes are scoped during discovery so the queue management logic handles every combination your modes create.

The matchmaking system integrates with your game server orchestration layer via the GSAP (Game Server Allocation Protocol) abstraction layer, which decouples the matchmaking service from the specific orchestration backend. When a match is confirmed, the matchmaking service sends an allocation request to the GSAP adapter, which translates it into the native API call for your orchestration layer: a GameServerAllocation resource for Agones on Kubernetes, a StartGameSessionPlacement call for AWS GameLift, or a custom allocation API call for bespoke fleet management systems.

This abstraction means the matchmaking service does not need to be rewritten if you change your server orchestration infrastructure -- only the GSAP adapter for the new backend needs to be added. For studios that do not have a server orchestration layer yet, we scope Agones on Kubernetes as the default recommendation for cloud-hosted games running on GKE or EKS; it provides production-grade game server lifecycle management, scales horizontally with player demand, and integrates well with the matchmaking allocation pattern. AWS GameLift is the alternative for studios already committed to the AWS ecosystem. The specific integration approach -- API contract, authentication, error handling, and timeout behaviour -- is confirmed during discovery before development starts so there are no integration surprises mid-project.

A matchmaking system covering TrueSkill 2 or ELO/Glicko-2 skill rating, SBMM queue management with dynamic parameter relaxation, ping-based regional routing with a latency threshold of 80ms, Agones/GameLift server allocation via GSAP, and Redis-backed lobby state management typically runs $25,000 to $50,000 at a fixed cost.

A more complete system adding party and team queuing with TrueSkill 2 team composition handling, tournament bracket management with seeding from MMR, custom game modes with separate rating pools, anti-cheat integration with Easy Anti-Cheat or BattlEye for ban-state enforcement, match replay storage to S3, backfill for abandoned matches, and a full matchmaking funnel analytics dashboard (queue time, match quality score, fill rate, rating distribution) typically runs $50,000 to $90,000. Cost is driven primarily by the number of game modes requiring separate queue configurations, the complexity of the party and team queuing logic, whether tournament management is in scope, and the analytics depth required for ongoing matchmaking tuning. Fixed cost is confirmed before development starts.

What clients say

What our clients say

Three-year average engagement. Founders and operators describing the work in their own words. No marketing varnish.

Dr. J. Ayo Akinyele
Dr. J. Ayo Akinyele
USA
President, Co-Founder

I was pleased with RaftLabs team quality, consistency and execution.

01 / 02

Related services

Talk to us about your matchmaking project.

Tell us your game mode, target concurrent player count, and what your current matchmaking can't handle. We'll scope the right system and give you a fixed cost.