Matchmaking in Games
When you’re designing a matchmaking system, there are 3 main variables:
- Quality of match, usually related to skill and latency (QUAL) - this is good, most of the time
- Wait time in queue (WAIT) - this is bad and players don’t like it, but it increases the QUAL, so it’s a necessary evil
- Population size (POP)
The relationship between these elements forms the basis of matchmaking theory.
POP - The buck stops here
Increasing POP size will increase QUAL and decrease WAIT, assuming an even distribution of skill/connection within POP. A rising tide lifts all boats. Well, until you hit your server limits. In fact, depending on your matchmaking churn rates (how often players are ending matches and looking for new matches), you might need a huge population to support your goals. Joost has a great post about how common issues like skill matching, playlists, and churn determing your required population size.
Decreasing POP size will decrease QUAL and increase WAIT. You can alter your thresholds for each to adjust which of QUAL and WAIT is the most affected. Lower POP always results in either lower QUAL or increased WAIT, by definition, unless you have a perfectly balanced matchmaking pool of identical players in perfect team-sized groups (like a bracketed tournament). This never happens in real life. There are many tricks for handling matchmaking with a smaller population, but in general, higher POP = better experience for your players.
WAIT - But not too long
Increasing WAIT will improve QUAL for a fixed POP, but players don’t like WAIT, as it means net-fewer matches will be played and net-less fun will be had. And, at some point, the WAIT increase required to get QUAL where you want it is too high, e.g. making players wait an hour until finally some group of players logs in that makes a high QUAL match. WAIT varies by game/company/etc but typically is between 30 seconds and 5-10 minutes (especially for ranked/high skill games). In some games, this can go as high as 30-60 minutes. Increasing your WAIT too high can have the negative effect of lowering your POP as people get tired of waiting.
One variable that can affect the acceptable WAIT time is the length of a match. Players are willing to WAIT longer if matches are longer, as QUAL becomes more important. Many players are OK with playing a quick match where the QUAL is bad, but they’d rather add WAIT to increase QUAL as game length increases.
QUAL - Good enough
Your goal is to balance the QUAL thresholds (skill, latency, other [like groups vs singles]) with your WAIT targets, adjusted for your POP. As your POP goes down (other games, lulls in play, holidays, age of the game, etc), your QUAL targets must also adjust in order to meet your WAIT targets (unless those targets were very lax to begin with). You get to choose which elements of QUAL to focus on (skill, latency, etc) based on design and what players want. Something’s got to give, and the matchmaking system decides what gives first.
You also might need safety valves, namely breaking your QUAL targets when the WAIT is too long. A good example would be if six of the best players in the world queue up from Madagascar. You won’t find a good skill match and you won’t find a good latency match, so you can either punt (fail to find a game, kick them from the queue, etc) or you can force a game (with lower QUAL targets than you normally want). Typically you’ll want to use expanding filters, starting with say “within 50ms latency, within 50 points skill”, run that through your matchmaker for 30 seconds, then increase to 100/100 and run for another 30 seconds, etc, expanding your filters until you find a match. Being able to gather statistics about what percentage of matches are being made within each filter bracket helps you design and adjust the settings.
There are other variables that also influence your QUAL targets. If you start adding mechanics that punish players who leave games, you’re now responsible for ensuring the QUAL is at such a level that players don’t want to leave the game. So, by encouraging players to stay in a game via incentives or punishments, you’re entering into a contract with the player where you’re committing to a high QUAL value for each match. You’re telling the player that they need to stay in the match, and it becomes your responsibility to make staying in the match fun for the player (high QUAL). One of the most damaging things you can do is put players into a long, bad match with no recourse (fear of punishment/loss of rewards).
Another issue is when you fragment your POP into buckets, essentially creating smaller groups of POP, which as above, will decrease QUAL or increase WAIT. So every playlist/mode you create is fragmenting your POP and thus reducing your overall experience. This is why playlist-sprawl only works when POP is huge. Many games end up condensing down to just a few core playlists (maybe with a rotational schedule) in order to solve a dwindling population problem without lowering QUAL / increasing WAIT. Ranked vs unranked, hyper-sensitive latency requirements, pre-made vs solos, and many other issues can fragment even a massive playerbase beyond repair. Riot works very hard to keep their QUAL statistic maximized for both skill and latency, which can be tough.
Summary
At the end of the day, you’re always going to have blowouts and you’re never going to hit 100% of users matched in 10 seconds. Jeff Kaplan brought up the particularly tough issue of players leaving a match mid-game ruining matchmaking, as well as how skill can be variable based on a player changing their class or character or loadout mid-game. These are all outside of a matchmaking system’s control, and you have to accept some losses. It’s a balancing act of taking your current POP and figuring out what QUAL thresholds meet your goals.