Guide · Scheduling

How to make a league schedule, step by step

A season schedule is a puzzle with four pieces: teams, courts, nights and fairness. Here is the order to solve it in, with the numbers worked out, whether you use a spreadsheet or software.

Updated

  1. Gather the facts
  2. Check the court time adds up
  3. Choose the format
  4. Build the matchups
  5. Spread early and late games fairly
  6. Add ref or work-team duty
  7. Check it before you publish
  8. Publish, then handle the changes

1. Gather the facts

Before a single matchup, write down:

  • Teams, and which division each is in. Skill divisions (rec, intermediate, competitive) usually make better games than one big pool.
  • Where you play: gyms and courts, diamonds, sheets of ice. Note any that are only available some nights.
  • When you play: which nights, and the start time of each slot. A slot is the game plus warm-up and changeover: a 60-minute volleyball slot, a 75-minute slo-pitch slot.
  • Season dates, and the nights you can’t play: statutory holidays (Thanksgiving, Family Day, Victoria Day), school events in a school gym, facility closures.
  • Anything special: a team that can’t make the early slot, a court booked by another group on one night, divisions that share a gym.

2. Check the court time adds up

Most schedules that go wrong were never possible in the first place. Do this sum first:

games you can host a night = courts × time slots
games you need a night = teams ÷ 2 (for one game each)
games each team gets = league nights (if everyone plays every week)

Ten teams, two courts and three time slots: six games a night available, five needed. One court time is spare each week. Use it for an extra game, a make-up game, or leave it empty and save the facility cost. Twelve teams in the same gym need six games, so every slot is full and there’s no room for a make-up. Eleven teams need five and a half games, and that half is a bye (see scheduling an odd number of teams).

If several divisions share the same courts, add up their needs together. Two divisions that each fit on their own can still collide on the same night.

3. Choose the format

  • Single round robin: everyone plays everyone once. Eight teams take seven weeks.
  • Double round robin: twice, home and away swapped. Eight teams take 14 weeks.
  • Partial: the season is a fixed number of weeks, and teams play as many different opponents as fit, repeating as evenly as possible.
  • Re-tiered: a few weeks of play, then teams move up or down a division based on the standings, and the rest of the season is scheduled in the new divisions.
  • Double headers: two games a night per team, back to back or with a break between them.

Then decide how the standings work and how ties are broken, before anyone has played a game.

4. Build the matchups

Use a round robin table so every pair meets once (or as evenly as possible), with a bye each week if the number of teams is odd. You can copy one from the round robin schedules for 4 to 12 teams. Draw team numbers from a hat so nobody can say the table was rigged.

Two rules worth keeping: no team plays the same opponent twice in one night, and repeat games are spread out rather than played in back-to-back weeks.

5. Spread early and late games fairly

This is what players actually notice. Nobody wants the 9:30 game every week, and the team with young kids needs an early one now and then. Keep a tally per team as you place each week’s games:

A fair tally after ten weeks, three slots a night
Team6:307:308:30
Team 1433
Team 2343
Team 3334

Every team within one game of every other in each slot is about as fair as it gets. Do the same for courts or diamonds if one is better than the others, and for home and away if your sport has one. Doing all three at once by hand is where a spreadsheet starts to hurt: fixing the late games for one team breaks the courts for another.

In PowerSchedule

You rank the fairness rules (equal official games, every team plays every night, no same-night rematches, balanced opponents, rematches spaced out, early and late games, courts, home and away, ref duty) and mark any as a must. The generator tries hundreds of versions, from about 5 seconds to about a minute depending on how long you let it search, and keeps the one that best fits your order. The fairness report then shows every team’s time slots, courts, double headers and ref duties side by side. Divisions that share courts can be scheduled together in one search. See it for volleyball, basketball, slo-pitch and curling leagues.

6. Add ref or work-team duty

Self-officiated leagues (most rec volleyball, many basketball leagues) give each game a duty team to ref, run the clock or keep score. Pick a team that’s already at the gym, playing right before or right after, so nobody drives in just to ref. Then balance the duty count over the season the same way as the time slots.

7. Check it before you publish

  • Every team has the same number of games that count in the standings.
  • Each team’s early and late games are within one or two of each other.
  • No team plays the same opponent twice in a night, or twice in two weeks.
  • Byes and double headers are spread out, not bunched on the same teams.
  • No games on holidays or closed nights, and nothing booked on a court that isn’t yours that night.
  • Duty teams are at the gym already and share the work evenly.

8. Publish, then handle the changes

Give captains the schedule in a form they’ll actually check: a link that’s always current, a printout for the first night, and dates in their phone’s calendar. Then expect changes. A rainout or a gym closure needs a make-up date, a team drops out, the facility changes your start times in January. Decide up front how postponed games are made up and when the standings count them.

In PowerSchedule

Blackout dates are saved with the league, and Canadian statutory holidays for your province are suggested for you, with the holiday’s name shown on the schedule. A rained-out game is marked postponed and stays out of the standings until it’s played. Time slots can change partway through the season. You can generate the schedule again from a date, keeping the games already played. Captains get a printed schedule, the rules, a QR code to the league and a calendar file for their phone, and everyone with the league open sees changes straight away.

Spreadsheet or software?

A spreadsheet is fine for four to six teams on one court, one night a week. You can copy a round robin table, set the times by hand and share it. It starts to break when:

  • there are several courts or diamonds and the time slots need balancing too;
  • divisions share a facility, or teams have nights they can’t play;
  • the number of teams is odd, or changes mid-season;
  • somebody else has to keep the standings up to date from scores texted in after every game.

That last one is usually what makes leagues switch. PowerSchedule lets captains enter scores from their phones and keeps the standings (with your tiebreakers) current, as well as building the schedule.

Or let PowerSchedule do it

PowerSchedule builds the season for you: fair time slots, byes handled, captains entering scores from their phones and standings that keep up. Look around the demo league, or see pricing.