Blog

Backend Customization with Extend: Building Ranked Matchmaking App

Ranked matchmaking is the heartbeat of competitive multiplayer games. But there’s no one-size-fits-all matchmaker for games. Every studio wants something slightly different, from how players are matched to how ranks are tracked and rewarded. Out-of-the-box systems can only take you so far. 

That’s why we built Extend, our framework for running custom microservices that override, modify, or extend the default behavior of AccelByte’s backend services. It gives studios full freedom to tailor how their backend works, without building an entire system from scratch. 

In our previous post, we introduced the custom matchmaking app building using extend, a simple blueprint showing how developers can replace default matchmaking behavior with their own custom logic. 

In this post, we’re taking it a step further with a ranked matchmaking app built using Extend to power custom skill ratings, leaderboards, and tier progression. This sample app shows how developers can:

  • Build skill-based matchmaking that pairs players by performance.
  • Use statistics to track and update MMR after every match.
  • Display leaderboards to visualize player rankings.
  • Extend the system with custom logic with or without AI.

All sample codes are available here:

Building Skill-Based Matchmaking

At the heart of any ranked system is matchmaking. AGS matchmaking service can be configured to match players based on skill, measured by an MMR (matchmaking rating) or similar metric. Game developers can define custom rulesets that take player stats into account, such as win/loss ratio, recent performance, or a computed ELO value.

Here’s an example of a rule that pairs players within 500 MMR points:

JSON
...
"matching_rule": [
  {
    "attribute": 'mmr',
    "criteria": 'distance',
    "reference": 500
  }
],
...

As players win or lose, their MMR updates automatically, influencing who they’ll face next. This data flows through AccelByte’s Statistics Service, ensuring accurate matchmaking each round.

Balancing Fairness and Queue Time

Every developer knows the trade-off: fair matches vs. fast matches. AccelByte’s flexible matchmaking rules allow for MMR flexing, expanding the MMR range over time so players aren’t stuck in a queue.

For example, you can configure the system to start with a 500-point difference and gradually expand to 1,000 points after 40 seconds. Combined with region-based latency expansion, this ensures players get fair and timely matches even in low-population regions.

JSON
...
"matching_rule": [
  {
    "attribute": 'mmr',
    "criteria": 'distance',
    "reference": 500
  },
"flexing_rule": [
  {
    "duration": 20,
    "attribute": 'mmr',
    "criteria": 'distance',
    "reference": 750
  },
  {
    "duration": 40,
    "attribute": 'mmr',
    "criteria": 'distance',
    "reference": 1000
  }
],
...

On top of that, it is a good practice to allow players to match cross-region, especially when they are in a sparsely populated region or in a low population time. For example with this ruleset:

JSON
...
region_expansion_rate_ms: 10000,
region_expansion_range_ms: 50,
region_latency_inital_range_ms: 100,
region_latency_max_ms: 300,
...

Matchmaker will expand the allowed ping to other regions for every 10 seconds the player waits, as long as the regions are still within ping range. It will start by only allowing players with 100ms ping, and expands by 50ms up to max 300ms allowed ping.

Displaying Player Ranks with Leaderboards 

Once your MMR system is live, you can visualize progression using Leaderboards. These can track and display any stat like MMR, win streaks, or seasonal points and refresh on your schedule (daily, weekly, or by season). Leaderboards give players tangible milestones and foster healthy competition.

AI-Powered Development with Extend

Extend doesn’t just make backend customization possible, it makes it faster. Our team used Extend to prototype the ranked matchmaking suite, combining human engineering with AI-assisted code generation to speed up development.

We even used an AI agent to generate the UI layer and connect components based on our written specifications, you can see a short demo video here. Here’s what that resulted in:

  • MMR Calculator App: A lightweight Service Extension app that calculates player MMR after each match. Instead of embedding this logic in the client or game server, the game simply calls this REST API, and Extend handles the computation and updates player stats in real time.
  • Stats Listener: Subscribes to player MMR updates and forwards them to the ranking system. Operates as an Extend Event Handler app converting backend events into gRPC calls.
  • API Service: Provides endpoints for querying player tiers, ranks, and promotion history, accessible by both game clients and dashboards.
  • Ranking Manager: Groups players into tiers (Bronze, Silver, Gold) and runs weekly evaluations to promote or demote players dynamically.

Each service runs as an Extend app that communicates asynchronously through Redis, allowing the system to scale horizontally and manage millions of players efficiently. Together, they demonstrate how Extend supports rapid, flexible development whether built traditionally or accelerated with AI tools.

All sample codes are available here:

Why This Matters for Studios

Traditional systems require heavy backend work with custom APIs, data pipelines, and matchmaking scripts. With AccelByte’s backend services and Extend, you can:

  • Launch with reliable, production-ready matchmaking and leaderboards.
  • Add your own logic for ranking, grouping, and progression.
  • Iterate quickly without touching core infrastructure.

Whether you're shipping a competitive FPS, a strategy game, or a team-based MOBA, AccelByte helps you deliver a fair, competitive, and engaging ranked experience.

What’s Next

This post is part of our Backend Customization with Extend series. In the previous article, we built the Core Matchmaking sample. Here, we extended that into a full ranked system. Next, we’ll explore how to use Extend to collect and reconcile match results automatically.

Find a Backend Solution for Your Game!

Reach out to the AccelByte team to learn more.