PaddlSync

How the rotation picks games

What the picker optimises for, the order it resolves ties in, and what happens when a court finishes early or someone arrives late.

What the rotation optimises 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 thing it protects hardest is partner coverage: over a night, everyone should have partnered everyone else before anyone partners the same person twice. That is the binding constraint, and the other considerations are allowed to bend around it rather than override it.

The rule

Partner coverage is measured against a lap floor, not a running total. If 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. A roster that turns over through the evening — people leaving after three games, new arrivals at 9pm — will not complete a lap, 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 resolves 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; later terms are never consulted 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, when 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
10Deterministic tiebreak from the session seed

Two details in that order are deliberate and worth knowing. 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 — so opponent counts tie while matchup counts still separate, and replaying a game people have just played is the complaint they notice first. Back-to-back streaks sit near the bottom so that rest breaks a tie but never rebuilds the treadmill the picker exists to remove.

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. This makes sessions reproducible and testable; it also means shuffling does not produce a different answer unless something about the state 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 relative to the rest of the roster. It sits at term 8 — below every coverage term — so it decides between candidate games that are otherwise 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 forces them into the game as a fixed seat, then chooses the best remaining three 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 entirely on who has waited, ignoring who has already partnered whom — which on a mid-sized roster locks the evening into a small set of repeating foursomes.

Constraints are relaxed in a fixed order when no legal game exists: first the debt requirement is dropped, then the back-to-back guard, and manual pins are given up last. A game is always produced — the picker never returns nothing and stalls the court.

When one court finishes before the others

This is the case most rotation tools leave unstated, so it is set explicitly per session. There are four behaviours:

  • Bring fresh players on — the finished court is refilled immediately from the bench. This is the default.
  • Reshuffle the same four — the same players stay on and are re-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 is held empty until the rest finish.
  • Rotate waiting courts together — when every court is waiting, all of them are re-seeded in one pass rather than court by court, so the whole hall turns over at once.

The joint re-seed is only reachable in the waiting mode and only once every court is free. If one game is still running, the remaining courts stay waiting rather than re-seeding partially.

Late arrivals and early departures

A padel club night is not a fixed roster, so the queue is edited during the session 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 carry no court-time debt from before they arrived, so they are not owed the games they missed — but having played nothing, they rank ahead of players who have already had games.
  2. Someone sitting out temporarily is marked as not currently 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 completed games stand and count toward every statistic; they are simply no longer eligible to 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 by editing a match 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 tonight, 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 tonight, whether the two pairs have already faced each other, and in team-balance sessions the skill-rating gap per side against the 150-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 changes a lineup by hand, the explanation is replaced with "Set by the organiser" — the rotation's reasoning no longer applies to that game, and the panel says so rather than explaining a choice it did not make.

The first games of an online session are set when the session starts, before the rotation records its reasoning, so they have no explanation. Every game after that does, online and offline.

What the rotation is tested to guarantee

Claims about fairness are easy to make and hard to check, so these are the bounds the engine is held to by the 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 night; 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 night 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 night with people arriving, leaving and sitting out will not land on these exact numbers, and nothing here promises that it does.

The sit-out limit counts consecutive games only. It does not promise equal rest across the whole evening — 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 club turns that on. See team balance for the reasoning and the threshold.
  • It does not guarantee equal game counts within a single night. Court-time debt evens out across the evening, but a night that ends mid-lap can leave a one-game spread.
  • It does not know who is tired, injured, or would rather not play the next one. That is what sitting someone out and manual overrides are for.
  • It does not rank players against each other when picking. Skill rating has no part in auto rotation at all unless team balance is enabled.