Guide
How fair rotations work
Most pickup sessions use a basic round robin or improvised pairings. Here's why that quietly breaks the session — and how RallyMixer builds a rotation that's fair to everyone on the court.
The problem with random pairings
In a typical 8-player pickup session where pairings are called out on the spot, the same two or three strong players end up teaming together repeatedly. They keep winning. The player who always draws short-straw partners gets frustrated and loses motivation. By the time you're ten rounds in, the session has quietly sorted into a pecking order — not because skill gaps are wide, but because luck-of-the-draw compounded over rounds.
Beyond partner parity, rest rounds cause friction too. If rest assignments aren't tracked, the same players sit out twice in a row while others play back-to-back. The person who rested twice feels shortchanged; the person who played every round is the one who ends up tired and sloppy at the end.
None of this is anyone's fault. It's just what happens when you manage a combinatorial problem by feel.
What "fair" means
A truly fair rotation has three properties, all of which need to be satisfied simultaneously:
Rest equity
Every player sits out roughly the same number of rounds. No one rests two rounds in a row when others haven't rested once.
Partner variety
Every player partners with as many different teammates as possible across the session, minimising repeated pairings.
Opponent spread
Players face a variety of opponents too, not just the same two people on the other side of the net every third round.
These three constraints pull in different directions. Satisfying rest equity constrains which four players can be on court each round. Satisfying partner variety constrains how those four are paired into teams. Satisfying opponent spread constrains how those two teams are arranged. Optimising for all three at once requires treating the schedule as a combinatorial constraint problem — not something you can solve reliably by feel.
How RallyMixer builds the schedule
When you hit Generate rounds, RallyMixer builds the entire session schedule at once using a constraint-weighted algorithm. The rough process is:
- Rest assignment first. For each round, the algorithm identifies which players are due to rest based on their rest history. Players who have rested fewer rounds are prioritised. No player rests twice in a row if it can be avoided.
- Pairing within the court group. From the four players on court that round, the algorithm selects the pairing that minimises previous-partner repetition. It checks a partner-frequency matrix and picks the pair combination with the lowest overlap.
- Opponent assignment. The remaining two players form the opposing team. The algorithm checks opponent-history too, preferring arrangements where players haven't faced each other recently.
- Forward pass. The full session is generated round by round, each step informed by the cumulative history of all prior rounds. The schedule isn't randomised — it's deterministic given the same input.
The result is a schedule where every player gets the same number of court rounds (within one round, depending on group size), partnerships are spread as evenly as possible, and no one rests back-to-back unless the group size makes it unavoidable.
A concrete example: 8 players, 15 rounds
With 8 players and 15 rounds, each round has 4 players on court and 4 resting. Over 15 rounds, each player should get roughly 7–8 court rounds. The algorithm distributes the remaining rest rounds evenly so the final rest counts differ by at most one.
| Property | Random assignment | RallyMixer |
|---|---|---|
| Court rounds per player | 5–10 (varies widely) | 7–8 (max 1 apart) |
| Repeated partnerships | Some pairs 4–5×, some 0× | Most pairs 1–2×, none more than 3× |
| Back-to-back rests | Common | Avoided unless unavoidable |
| Setup time | 2–5 minutes per session | Under 10 seconds |
Fairness check: After generating a schedule, tap the Fairness check section at the bottom of the schedule panel to see a summary of partner-frequency and rest distribution for your specific session.
Odd player counts
When your group doesn't divide evenly into sets of four, someone always has to sit out more rounds than others. With 5 players and 15 rounds, one player rests 3 rounds while the rest only rest 2 — that's unavoidable. With 7 players, three players will rest 4 rounds and four players will rest 3.
RallyMixer handles odd counts by rotating the extra rest round evenly, so no single player carries a disproportionate burden. The player who drew the extra rest in round 1 won't draw it again in round 2.
Why it matters for the session
Sessions with fair rotations feel different. There's no obvious "strong pair" dominating repeatedly. Players on the weaker side of the skill gap get a turn partnering with someone stronger, which changes the competitive feel of every round. Rest rounds are accepted without resentment because everyone knows they're being distributed fairly.
The social energy of a pickup session is fragile. Perceived unfairness — even subtle, unintentional unfairness — accumulates over rounds and shows up as quieter courts, earlier departures, and fewer returning players the following week. A fair rotation removes that friction before it starts.
Also useful: Badminton doubles rules →