How to Build a Round-Robin Schedule: The Rotation Method Step by Step
In a round-robin league, every team plays every other team exactly once before the standings close. The hard part isn’t picking the format — it’s writing the schedule by hand without repeating a matchup or leaving two teams without a game on the same date. There’s a specific method for this, used for over a century in chess and adopted by pretty much every amateur league that runs a round-robin: rotation, also known as the Berger table. Fix one team, rotate the rest, and each round is ready in minutes.
This piece walks through the full method, with a complete 7-team example from start to finish — the case that trips up most organizers, because an odd number of teams always means someone sits out each round.
What a round-robin schedule actually is
In round-robin format (also called a league format), every team plays every other team once — or twice, for a home-and-away double round-robin. Whoever finishes with the most points wins, not whoever survives a knockout bracket. It’s the opposite of a single-elimination bracket: if you’re still deciding between the two, how to organize a soccer tournament with friends compares the formats before you lock in a schedule, and the 8-team bracket walkthrough covers the elimination version for anyone who prefers a straight knockout.
Round-robin isn’t hard because of the format itself — it’s the logistics. With 4 teams you can sketch the matchups off the top of your head. With 7 or 9, without a method, it’s easy to repeat a matchup in a later round or leave two teams without a game on the same date.
How many rounds and how many games your league will have
Before building the schedule, it helps to know the size of the job:
- Number of games: n × (n − 1) ÷ 2, where n is the number of teams. With 7 teams, that’s 7 × 6 ÷ 2 = 21 games.
- Number of rounds if n is even: n − 1 rounds, and nobody sits out any of them.
- Number of rounds if n is odd: n rounds, with a different team sitting out each one.
Notice that an odd number of teams needs more rounds than an even one — that’s the cost of giving everyone exactly one bye instead of always leaving the same team out. For the full breakdown at other team counts, how many games does a tournament have has the complete table from 4 to 16 teams, for both round-robin and single elimination.
The rotation method, step by step
The rotation (Berger table, named after Austrian chess master Johann Berger, who formalized it in the late 19th century) solves the problem by pinning one name in place and rotating everyone else around it, like the hands of a clock.
Step 1 — List the teams. Number or name them in any order: A, B, C, D, E, F, G…
Step 2 — If the number of teams is odd, add an extra slot called BYE. It goes into the list as if it were another “team,” just to make the total even. If the count is already even, skip this step.
Step 3 — Pick one name that stays fixed and never rotates.
- If the total is even because you have an even number of real teams, fix any real team — here we’ll always fix the first one on the list, Team A.
- If you added a BYE in step 2, that’s the one that stays fixed. That way, whichever team “plays” the BYE in a given round is the team resting that round.
Step 4 — Put the rest of the names into a list that will rotate. The starting order doesn’t matter, as long as you keep track of it.
Step 5 — Build the first round. The fixed name plays the first name in the rotating list. The remaining names pair up from the outside in: the second name with the last, the third with the second-to-last, and so on.
Step 6 — Rotate the list for the next round. Take the last name off the rotating list and move it to the front — the fixed name stays exactly where it was. Repeat step 5 with this new order.
Step 7 — Keep rotating until the list returns to its original order. At that point everyone has played everyone else exactly once, and the schedule is complete.
A full example with 7 teams
Seven teams — A, B, C, D, E, F, G — is an odd number, so BYE joins as an eighth entry and stays fixed. The 7 real teams rotate around it. That’s 7 rounds, 21 games total, and each team sits out exactly once.
| Round | Bye | Matchups |
|---|---|---|
| 1 | A | B × G, C × F, D × E |
| 2 | G | A × F, B × E, C × D |
| 3 | F | G × E, A × D, B × C |
| 4 | E | F × D, G × C, A × B |
| 5 | D | E × C, F × B, G × A |
| 6 | C | D × B, E × A, F × G |
| 7 | B | C × A, D × G, E × F |
Check the result: add up the matchups and you get 21 (3 games per round × 7 rounds), each team appears 6 times playing and once on a bye, and no pair repeats — A faces B, C, D, E, F and G, each in a different round. That final check — totaling the games and confirming each team shows up the right number of times — is what tells you the schedule is correct before you post it for the group.
With an even number of teams, nobody sits out
If your league has 6, 8 or any even number of teams, the process is identical, just without the BYE — the fixed team plays every round. With 6 teams (A through F), fixing Team A, the rotation gives you 5 rounds and 15 games:
| Round | Matchups |
|---|---|
| 1 | A × B, C × F, D × E |
| 2 | A × F, B × E, C × D |
| 3 | A × E, F × D, B × C |
| 4 | A × D, E × C, F × B |
| 5 | A × C, D × B, E × F |
Same logic as the 7-team example, just with nobody left out of any round.
Double round-robin: home and away
For a home-and-away league, repeat the same rounds from the first half in the same order, flipping home advantage for each matchup — whoever played at home in the first leg plays away in the return leg, and vice versa. Both the round count and the game count double: 14 rounds and 42 games in the 7-team example, 10 rounds and 30 games in the 6-team one. There’s no need to recalculate the rotation for the second half — it’s literally the first half again, with venues swapped.
Common mistakes when scheduling by hand
- Rotating the BYE along with everyone else. It’s the fixed point — if it rotates, the schedule breaks and some pair of teams ends up facing each other twice while another pair never plays.
- Getting the “outside in” pairing order wrong. The second name on the list always pairs with the last one, not the third — flipping that rule is the most common cause of a repeated matchup.
- Not checking the total at the end. After building every round, add up the games and check against n × (n − 1) ÷ 2. If it doesn’t match, some round rotated incorrectly.
Frequently asked questions
Does the team on a bye lose points? No. The bye is simply a free round with no result — the team neither gains nor loses points that date. Check the rulebook if the league is affiliated with a federation, since some official competitions have specific rules for bye rounds.
Can I decide who plays at home each round? The rotation only sets the matchups, not home advantage. A simple, common rule is: the first name in each pair (in the order you wrote the matchup) plays at home in the first half, and the rule flips automatically for the second half.
A team dropped out mid-season. Do I need to rebuild the schedule? No. Keep the original schedule and treat that team’s remaining games as forfeits — rebuilding the whole rotation would change matchups that the remaining teams have already played.
If the teams haven’t been formed yet and you only have a list of players, sort that out before applying the rotation — Squadb’s team randomizer splits the group automatically, and only then does schedule-building start.