How to build a league schedule that survives the season

A schedule isn't a spreadsheet problem, it's a capacity problem. Count your slots, then let the round robin fall out of the math — and leave yourself the two buffer weeks you're going to need.

The RecTrack TeamJune 11, 202613 min read
In this guide · 8 sections
  1. Count slots before you count teams
  2. The round robin math
  3. Build your round robin
  4. Fairness: times, courts, opponents
  5. Odd team counts and byes
  6. Leave the buffer weeks in
  7. How to handle reschedules
  8. Publishing without the group text

A league schedule looks like a spreadsheet problem, which is why so many organizers start in a spreadsheet and end up with a season that doesn't fit. It's actually a capacity problem: you have a fixed number of playable slots, and the schedule is just the arrangement of teams inside them.

Count the slots first. Then let the round robin fall out of the math, fix the fairness problems, and — this is the part everyone skips — leave the buffer weeks in.

N − 1weeks for a single round robin of N teams
N ÷ 2games per week with an even team count
2buffer weeks every season needs
1reschedule policy, published before week one

Step 1Count slots before you count teams

A slotis one game's worth of court or field time. Your entire schedule is constrained by how many of them you have, and the number is smaller than the booking suggests once you account for warmups and changeover.

BookingGame lengthSlots per nightWeeks × slots (10 wks)
2 hrs, 1 surface45 min + 15 change220
2 hrs, 2 surfaces45 min + 15 change440
3 hrs, 1 surface50 min + 10 change330
3 hrs, 2 surfaces50 min + 10 change660
4 hrs, 3 surfaces50 min + 10 change12120

Changeover is not optional — it's the time teams take to clear the floor, the next two to warm up, and the table to reset. Fifteen minutes on a tight booking, ten if you're strict.

Now compare against demand. A single round robin of N teams needs N × (N−1) ÷ 2 games total, spread over N−1weeks. Ten teams is 45 games. If you have four slots a night, that's 12 nights of regular season — and if you only booked ten, you've got a problem you'd much rather find now than in week seven.

Step 2The round robin math

The round robin is the fairest structure available for a rec league and it's generated by an algorithm you can do on paper: the circle method. Fix one team in place, arrange the rest in a circle around it, and rotate one position each round. Every team meets every other team exactly once, in exactly N−1 rounds.

TeamsGames per weekWeeks (single)Total gamesWeeks (double)
6351510
8472814
10594518
126116622
147139126

A double round robin (everyone twice, home and away) doubles the weeks and the games. It's the right call when you have fewer than 8 teams and a long facility booking.

With an even number of teams, everybody plays every week and nobody has to be told why they're sitting. That property alone is worth recruiting a tenth team for.

Try itBuild your round robin

Set your team count and see the actual weekly pairings, generated with the circle method — including the alternating home side and the rotating bye for odd counts.

Round robin builder

Interactive
7weeks of regular season
4games per week
28total games to schedule
Week 1
Team 1vsTeam 8
Team 2vsTeam 7
Team 3vsTeam 6
Team 4vsTeam 5
Week 2
Team 7vsTeam 1
Team 6vsTeam 8
Team 5vsTeam 2
Team 4vsTeam 3
Week 3
Team 1vsTeam 6
Team 7vsTeam 5
Team 8vsTeam 4
Team 2vsTeam 3
Week 4
Team 5vsTeam 1
Team 4vsTeam 6
Team 3vsTeam 7
Team 2vsTeam 8
Week 5
Team 1vsTeam 4
Team 5vsTeam 3
Team 6vsTeam 2
Team 7vsTeam 8
Week 6
Team 3vsTeam 1
Team 2vsTeam 4
Team 8vsTeam 5
Team 7vsTeam 6
Week 7
Team 1vsTeam 2
Team 3vsTeam 8
Team 4vsTeam 7
Team 5vsTeam 6

With 8 teams every team plays every week and the home side alternates round to round.

Step 3Fairness: times, courts, opponents

The pairings are only half the schedule. The other half is which slot each game lands in, and that's where the complaints come from. Three fairness constraints matter, roughly in this order:

1
Spread the unpopular slotMost complaints
The 9:30 game, the 8 a.m. field, the far court with no bleachers. Count how many each team gets and even it out. If one team gets three late games and another gets none, you'll hear about it — and they'll be right.
2
Avoid immediate rematchesFeels repetitive
Playing the same opponent in consecutive weeks makes an 11-week season feel like a 4-week one. Proper round-robin rotation handles this automatically; hand-built schedules almost never do.
3
Balance home/first-listedMatters in some sports
If your sport has a meaningful home side, bench, or serve advantage, alternate it round to round so no team accumulates an edge over the season.
4
Respect known conflicts — onceUse sparingly
Take conflict requests before you build, honor what you reasonably can, and then stop. A schedule built around eleven individual requests is a schedule with no fairness properties left at all.

Step 4Odd team counts and byes

An odd number of teams means somebody sits out every week. It's entirely manageable, but only if you handle it deliberately.

  1. Rotate the bye. The circle method does this for you: with 9 teams, over 9 rounds, each team byes exactly once. Never let the same team bye twice while another byes zero times.
  2. Decide how a bye counts. The cleanest approach is to rank standings by win percentage rather than total wins, so a bye week neither helps nor hurts. Publish this before week one.
  3. Put the bye at a useful time. Late-season byes for teams already out of playoff contention are kinder than mid-season byes for contenders.
  4. Or fill it with something.A scrimmage against the house team, a skills competition, an open-gym slot. A bye that comes with an optional activity feels like a bonus rather than a night off they didn't ask for.

Step 5Leave the buffer weeks in

Every season loses at least one night. A facility double-books, a storm closes the building, a holiday you forgot lands mid-week, the school play takes the gym. This is not bad luck; it is the base rate.

Two structural defenses, and you want both:

  • Book one week past your planned final. If nothing goes wrong, you release it or use it for a consolation night. It costs one week of rent and buys you the ability to absorb a cancellation without touching the rest of the season.
  • Build in a scheduled off week.Around a holiday, a long weekend, or the midpoint. Players appreciate it, attendance recovers afterwards, and if you've already lost a night you can quietly convert it into a makeup week.

Check the calendar for these before you publish: the two big winter/spring holiday weeks, spring break for local schools, the Thanksgiving and July 4 weeks in the US, and any tournament your player base travels for. Half your no-shows in a season come from a date you could have seen in advance.

Step 6How to handle reschedules

The reschedule policy is the most important paragraph in your rules doc and the one most likely to be missing. Write it before week one, because the first request will arrive in week two and whatever you do then becomes precedent for the season.

A policy that works

  • The published schedule is final. Games are not moved because a team is short-handed.
  • The league reschedules games only for facility closure, weather, or safety.
  • Team-requested moves are allowed only if both captains agree AND an open slot already exists AND the request lands at least 7 days out.
  • There is no rescheduling in the final two weeks — seeding depends on it.
  • A team that can't field the minimum forfeits. That's not a punishment, it's how the season stays coherent.
Every game you move for one team costs you a favor you can't deny the next seven. Say yes once and you've created a rescheduling service.

Step 7Publishing without the group text

A schedule's job is to answer one question — “where and when am I playing?” — without anyone having to ask a human. A PDF emailed in week zero fails this by week three, because the PDF is stale and the person asking is in a parking lot.

What a published schedule needs:

  • The entire season visible at once, so players can plan their lives.
  • A personal view — my team's next game, not the full grid — because that's the actual question.
  • The venue with an address that opens in maps. Not 'Court 2'.
  • Live updates: a change to the source updates every player's view, immediately.
  • A notification when something moves, to the people whose game moved.
  • Results filling in as games finish, so the schedule doubles as the record.
Competition schedule in the RecTrack app showing upcoming games by week
Live league standings table in the RecTrack app
The schedule players see and the standings it feeds. When a result is recorded the table re-sorts itself — no Thursday spreadsheet update.
Generate the whole season in one pass

Round-robin schedules built across your courts and time slots, published to every player instantly, with standings that recalculate the moment a game ends.

Start free

Once the regular season is scheduled, the playoff structure is the next decision — seeding, formats, and advancement are covered in brackets and tournaments, and the one-day-event version of this math is in how to run a one-day tournament.

Loose endsScheduling questions

How many games should a season have?
Eight to twelve regular-season games is the recreational sweet spot. Below eight the season is over before it develops a story; above twelve, attendance decays and you're competing with the rest of people's lives. With 8–10 teams, a single round robin lands right in that window naturally.
Should I schedule doubleheaders?
Only if your facility time is genuinely constrained, and never in back-to-back slots. Two games with an hour between them is fine. Two games back to back is one good game and one bad one, and it raises your injury rate.
How do I handle divisions?
Once you're past twelve teams, split into two divisions and run a round robin inside each, plus one or two cross-division games for variety. Seed the playoff bracket across both divisions using win percentage so a strong second-place team isn't punished for its group.
What if a team drops out mid-season?
Decide up front whether their completed games stand or are voided. The cleanest option is to void all their results and rebuild the standings from remaining games — otherwise the teams that already beat them keep an advantage nobody else can earn. Say which in your rules doc before it happens.
Can I just use a spreadsheet?
For one season with eight teams, yes. The failure mode isn't building it — it's maintaining it. Every reschedule, every result, and every standings recalculation is a manual edit that has to reach forty people, and by week six it stops reaching all of them.

The short version

  • Count your real slot capacity before you decide on a team count.
  • N teams → N−1 weeks, N÷2 games per week, N×(N−1)÷2 total games.
  • Book the playoff weeks at the same time as the regular season.
  • Spread the unpopular time slot evenly and say that you did.
  • Odd team counts need a rotating bye and a win-percentage standings rule.
  • Leave two buffer weeks in — you will use at least one.
  • Write the reschedule policy before week one, because the first request comes in week two.

Your next season can run
from one dashboard.

Set up your organization tonight. Open registration tomorrow. Never copy-paste a schedule again.