List the hard constraints first
A fixture list is a puzzle with fixed pieces. Write them all down before you place a single match.
- The teams, and which division each one is in
- Match days and kick-off slots
- Venues, their individual pitches and the times you have booked
- Closures: holidays, maintenance and other events
- Teams that share a pitch or players
- Spare dates for postponements
Generate fair round-robin pairings
In a single round-robin every team plays every other team once. With an even number of teams (n), that takes n − 1 rounds of n ÷ 2 matches. A double round-robin plays everyone twice, home and away, over twice as many rounds.
With an odd number of teams, add a placeholder so the numbers work. Whichever team is drawn against the placeholder rests that round, and the round-robin takes n rounds.
The standard way to produce the pairings is the circle method. Fix one team in place, arrange the rest in a circle, pair teams across it, then rotate everyone except the fixed team one position for the next round. Every pairing happens exactly once.
Then balance the result: alternate home and away as far as possible and avoid long runs of either.
Fit the rounds to real pitch time
Pairings say who plays whom. The pitch plan says whether it can happen. Assign each match to a specific pitch and slot you have confirmed, not just to a venue.
If several divisions share venues, schedule them together. Planning each division separately and combining them afterwards is the most common cause of double-booked pitches.
Share scarce slots fairly. When there are fewer good kick-off times than matches, rotate them instead of giving the top division every one.
Check before publishing
Run the same checks every time, and again after any change.
- No team plays twice on the same day
- No pitch has two matches in the same slot
- Every match has a venue, pitch and kick-off time
- No match falls on a closed date
- The number of referees needed in each slot is realistic
Publish one version
Publish the schedule somewhere everyone can reach without asking for a file. Every copy attached to a message goes out of date the first time anything moves.
Handle changes without starting again
Postpone or move the original fixture instead of deleting it and creating a new one. Its history, referee and eventual result stay attached.
Tell everyone affected: both captains, the referee and the venue. Move the match to a spare date, and check the new slot against the same rules as the original schedule.