Modes and calculations

How rankings and matchmaking modes work in RacketRate.

This page explains the current logic behind ELO updates, ranking modes (ELO, win rate, volume, form), and session matchmaking modes (ELO, random, variety, manual and pegboard).

Singles + doubles ELO + ranking modes Matchmaking behavior Current implementation notes

What this page covers

The calculation logic used inside the app today: rating updates after a match, how leaderboards sort, and how automatic suggestions pick the next match.

Important scope

Rankings shown in a club are club-specific views, but player ELO is stored on the user profile and can carry across clubs (global profile rating, not per-club ELO).

Short version

Recorded match results drive ratings. Leaderboard modes change how players are sorted, and matchmaking modes change how the next suggested pairing is chosen.

This is a product explanation page (not a formal rules document). It describes how the current app version calculates and sorts results so club organisers and players can understand what each mode is optimising for.

Overview

RacketRate has two separate things that users often call "modes":

  • Ranking modes in the Rankings tab: ELO, Win rate, Volume and Form.
  • Matchmaking modes in live sessions: ELO (auto), Random, Variety, Manual and Pegboard.

Ranking modes change how the leaderboard is sorted. Matchmaking modes change how the next suggested court assignment is chosen.

Singles vs doubles

Singles and doubles are handled separately in key places:

  • Rankings are split into Singles and Doubles tabs.
  • ELO is stored separately as singles_elo_rating and doubles_elo_rating.
  • Only matches from sessions in that format are used for that format's ranking/stat views.

In doubles, team strength for rating expectation is based on the average ELO of the two players on each side.

ELO calculation (rating updates after recorded matches)

RacketRate uses an ELO-style model. The expected result is based on the rating difference between the two sides.

  • Expected score (side A): 1 / (1 + 10^((ratingB - ratingA) / 400))
  • Actual score: win = 1, loss = 0 (draws can be 0.5 in the core service model)
  • Base update: delta = K * (actual - expected)
  • Default profile starting point: 1200 if no prior rating is available for the format

A lower-rated player beating a higher-rated player causes a larger rating change than an expected win.

Singles Winner vs loser ratings

Each player's singles ELO is updated after a recorded singles match.

Doubles Team average for expectation

Expected outcome uses each team's average ELO, then each player gets an individual delta.

K-factor and margin weighting

RacketRate currently uses a higher K-factor for newer players in a format so ratings settle faster, then drops to a normal K-factor after the provisional period.

  • Provisional K: 80 for the first 10 games in that format
  • Normal K: 32 after that

Match score margin also scales the ELO change:

  • Close game (score difference <= 5): multiplier 0.5
  • Normal margin (difference 6-10): multiplier 1.0
  • Large margin (difference > 10): multiplier 1.25

In practice, this means narrow wins usually move ratings less than clear wins, all else equal.

Ranking modes (how the leaderboard is sorted)

The same underlying match history can be sorted in different ways depending on the mode selected in the Rankings tab.

Mode

ELO

Sorted by current ELO descending, then win rate, then total matches, then display name.

Mode

Win rate

Uses a confidence-adjusted win rate (Wilson lower bound) rather than raw percentage, so players with a tiny sample size are less likely to rank above players with stronger evidence.

A minimum matches threshold is applied (default is 3 in the UI and can be adjusted).

Mode

Volume

Sorted by matches played (highest first), then win rate, then ELO as tie-break support.

Mode

Form

Uses recent results (last 5) plus current streak. Current form score uses weighted recent results [5,4,3,2,1] and adds current_streak * 1.5.

Example: a player on a win streak with strong recent results will rank higher in Form even if their ELO rank is lower.

Matchmaking modes (how next match suggestions are chosen)

Matchmaking modes apply during live sessions when assigning the next court. All automatic modes build on a fairness-first queue ordering, then apply their own pairing logic.

Mode

Manual

No automatic calculation. An owner/admin chooses players directly for the court.

Mode

Pegboard

Pegboard mode is a queue-based picker. The person at the top of the queue picks from a top-N pool (admins can also pick on behalf of players).

No ELO scoring is used for the pick itself.

Mode

Random

Not purely random. It still leans toward fairness by preferring players/teams with fewer games and more even game counts.

  • Singles: prefers pairs with lower combined games played, then smaller games-played difference.
  • Doubles: takes the top 4 fair candidates and prefers team partitions with lower total games and better balance.

Mode

Variety

Prioritises reducing repeated pairings so players face or partner with a wider range of people across the session.

  • Singles: prefers pairs that have been suggested/paired less often in the session, then fairness tie-breaks.
  • Doubles: prefers team partitions where partner pairings have occurred fewer times.

Mode

ELO (Auto)

ELO mode uses a weighted scoring model for suggestions, combining fairness and match-quality signals. Default weight values are stored on the session (or use app defaults if unset).

  • Equal games (fairness)
  • Balance strength (closer ELOs)
  • Balance genders (where gender data exists)
  • Variety signals (repeat-pair reduction)

Current implementation detail: singles applies a weighted pair score; doubles currently chooses between team partitions using a balance-focused score (team strength gap + games balance) on the top fair four players.

Fairness queue ordering (used before many suggestion modes)

Automatic suggestions start from a fairness ordering that rewards players who have waited longer and played fewer games.

  • Priority score: wait_seconds - (games_played * 120)
  • Higher priority players are considered earlier for suggestions.
  • This helps reduce cases where one player keeps getting games while another waits.

Tie-breaks and provisional labels

Where multiple candidates score the same, the app uses tie-breaks (and sometimes cycling through equal top candidates) to avoid repeating the exact same suggestion every time.

  • Rankings: modes include explicit tie-breaks (for example ELO mode falls back to win rate and match volume).
  • Top candidates: if several pairings/partitions are tied, the app can rotate through them when suggestions are refused.
  • Provisional label: rankings mark players below the minimum match threshold as provisional in some modes.
  • Movement badges: current 7-day movement is inferred from older records (snapshot history is not yet stored).

Scope and caveats

  • Informational rankings: in-app rankings and ELO are product features, not an official governing body ranking.
  • Global profile ELO: rating updates are stored on user profiles and can affect the same user's rating across clubs.
  • Recorded matches only: ratings/statistics update from recorded match results, not attendance alone.
  • Current version behavior: exact weights and formulas can change as the product evolves.

Changes over time

We may tune weights, thresholds or sorting details as we improve matchmaking fairness and ranking quality. If we make meaningful changes to how results are calculated or presented, we will update this page.

Want to see it live?

Open the app and test the modes in a real club session.

Use the Rankings tab to switch sorting modes and create a session to compare matchmaking behavior.