How the rotation picks games

What the picker aims for, the order it settles ties in, and what happens when a court finishes early or someone arrives late. The same rules run badminton and padel sessions.

What the rotation aims for

Auto rotation runs one shared queue across every court in the session rather than a separate queue per court. When a court needs players, the picker considers every eligible player waiting, not just the ones who happen to be nearest that court.

The same rotation runs badminton and padel. In padel every game is doubles, four players to a court. In badminton a court can also be set to singles, and when only two or three players are free the next game is singles. Everything below about partners and pairs applies to doubles games.

The thing it protects hardest is partner coverage: over a session, everyone should have partnered everyone else before anyone partners the same person twice. That is the binding constraint, and the other considerations bend around it rather than override it.

The rule

Partner coverage is measured against a lap floor, not a running total. Once every possible pair has played together once, the floor rises and the whole roster starts a second lap. Nobody partners someone for the third time while a second-lap pair is still outstanding.

Full coverage is only reachable if people stay for it. When the roster changes during a session, with people leaving after three games or arriving at 9pm, a lap will not be completed, and the picker will simply be part-way through one when the session ends. It does not restart the lap when the roster changes.

The order it settles ties in

The picker scores every possible foursome and every way that foursome can split into two pairs, then compares candidates on the following terms in strict order. The first term that separates two candidates decides between them, and later terms are not looked at for that comparison.

#TermPreferred
1New partner pairs in this gameMore
2Players left stranded: pairs that would become hard to make laterFewer
3Scarce chances spent: pairing two people who often share a court while two who rarely do are availableFewer
4Repeat of this exact pair-versus-pair matchupFewer
5Worst repeat count among the four opponent pairingsLower
6Total opponent repetition across the gameLower
7New opponent pairings in this gameMore
8Court time owed to the four pickedMore
9Games already played back to back by the four pickedFewer
10Fixed tiebreak from the session seed-

Two details in that order are deliberate. Matchup repetition sits above the opponent terms because on a small roster everyone has faced everyone long before every pair-versus-pair combination has been played. At that point the opponent counts are level while the matchup counts still separate, and replaying a game people have just played is the thing they notice first. Back-to-back streaks sit near the bottom so that rest can break a tie but never outweighs variety.

Because term 10 is a seeded hash rather than a random number, the same roster with the same history and the same seed always produces the same game. That makes sessions reproducible and testable. It also means asking again gives the same answer unless something about the session has actually changed.

See also Team balance and why it is off by defaultFair rotation overview

Court time and rest

Court-time debt tracks how many games each player is owed compared with the rest of the roster. It sits at term 8, below every coverage term, so it decides between games that are equally good for variety rather than dragging someone onto court at the cost of a repeat pairing.

When someone has fallen far enough behind, the picker stops treating them as a preference and puts them in the game as a fixed seat, then chooses the best remaining players around them.

The rule

At most two seats in a game may be forced by court-time debt. If more than two players are owed a game, they are served across consecutive rounds rather than all at once.

The cap exists because forcing all four seats would pick the game purely on who has waited, ignoring who has already partnered whom. On a mid-sized roster that locks the session into a small set of repeating foursomes.

When no legal game exists, constraints are relaxed in a fixed order: first the debt requirement is dropped, then the check that the next game on a single court can still rest everyone owed a rest, and finally the rest limits themselves, which are broken by as few games as possible and never ignored outright. Manual pins are never given up. A game is always produced, so the picker never leaves a court stalled.

When one court finishes before the others

With more than one court, whoever enters the result on a court that finishes while other games are still running chooses what that court does next. The choice is made each time, with the usual option already selected:

  • Rotate players in: the usual fairness rules pick the next game on that court from its players and everyone waiting. This is selected while other games are still running.
  • Same players, new teams: the same players stay on and are split into different pairs. Useful when a group wants to keep playing together but not with the same partner.
  • Wait for the other courts: the court's lineup is held until the other games finish.
  • Shuffle with the waiting courts: when the last game running finishes and other courts are waiting, all of them are filled together in one pass, so the whole hall changes over at once. This is selected for the last game running.

Courts are only filled together once no game is left running. If the last court to finish rotates or keeps its players instead, only that court gets a new game, and the waiting courts stay held until a later finish chooses to wait.

Round-robin and Mexicano sessions do not ask. Their rounds decide who plays next, so each new round starts when the previous one is done.

Late arrivals and early departures

A club session does not have a fixed roster, so the queue can be changed while it runs rather than locked at the start.

  1. Someone arriving late is added to the session roster and joins the same shared queue as everyone else. They are not owed the games they missed before they arrived, but having played nothing yet, they rank ahead of players who have already had games.
  2. Someone sitting out for a while is marked as not playing. They stay on the roster and keep their history, and the picker skips them until they are marked back in.
  3. Someone leaving early is marked done. Their finished games stand and count toward every statistic; they just can no longer be picked.

Games already in progress are never rewritten when the roster changes. A late arrival is picked up by the next game that needs players, not added to a game that is already on court.

Why this game?

Every live court has a "Why this game?" button, and anyone viewing the session can open it, players as well as organisers. It shows:

  • For each player on court: games played this session, how many games in a row they had just sat out, and whether they were owed a game.
  • Who was waiting next, and why they were not picked: they had played more games, were resting after several games in a row, or were level on games but the chosen four made better new pairings.
  • Why those pairs: the rule that decided the split, whether either pair is partnering for the first time this session, whether the two pairs have already faced each other, and in team-balance sessions the skill-rating gap per side against the 250-point limit.

The rule

The explanation is recorded at the moment the rotation picks the game and is never recalculated afterwards. The numbers are what the rotation saw when it decided, not what they have become since.

If an organiser sets a lineup by hand, the panel says the organiser chose that game. The rotation's reasoning no longer applies to it, so the panel does not explain a choice the rotation did not make.

Games picked before the app started recording its reasoning have no explanation. That covers older sessions, and the opening games of sessions started before openings were picked the same way as every other game. Every game picked since has one, including in offline sessions.

What the rotation is tested to guarantee

Fairness claims are easy to make and hard to check, so these are the bounds the engine is held to by automated simulations in its test suite.

ScenarioGuaranteed outcome
7 players, 1 court, 11 gamesAll 21 possible partner pairs play together; no pair-versus-pair matchup repeats; no two players face each other more than 3 times
6 players, 1 court, 24 gamesAll 15 pairs partner; how often each pair has partnered stays within 2 across the whole session; no matchup repeats more than 3 times
7 players, 1 court, 14 gamesGames played stay within 1 of each other for everyone
6 players, a 7th arrives after game 2, 9 more gamesEach player who was there on time still gets at least 4 of those 9 games; the new arrival partners at least 5 of the 6
8 players, 2 courts, 12 rounds with courts rotated togetherAt least 85% of partner pairs covered; everyone has at least 5 different partners

The longest run of games in a row anyone can be left sitting out depends on how many are waiting. On one court:

Players availableLongest sit-out run
51 game
61 game
72 games
82 games
103 games
123 games
144 games

The rule

Partner coverage outranks opponent spread. Covering all 21 pairs of a seven-player session inside the minimum 11 games uses up every free choice the picker has, so opponents can only be spread as far as that allows, which is why the opponent bound is 3 rather than 2.

These are simulations, mostly on a single court. A real session with people arriving, leaving and sitting out will not land on these exact numbers, and nothing here promises that it will.

The sit-out limit counts consecutive games only. It does not promise equal rest across the whole session; that is what court-time debt is for.

What the rotation deliberately does not do

  • It does not balance teams by skill rating unless the organiser turns that on for the session. Team balance explains the reasoning and the limit.
  • It does not guarantee equal game counts within a single session. Court-time debt evens things out as the session goes on, but a session that ends mid-lap can leave a one-game difference.
  • It does not know who is tired, injured or would rather skip the next one. That is what sitting someone out and setting a lineup by hand are for.
  • It does not use skill ratings when picking who plays. Ratings play no part in auto rotation at all unless team balance is on.