A league fixture list looks like a simple rotation and is one of the harder scheduling problems in sport. The difficulty comes from the number of constraints that must hold simultaneously.
Every team plays every team twice
A round-robin season fixes how many matches exist, and the only freedom is when each is played and in what order.
Each team must alternate home and away reasonably evenly, because long runs of either distort both the competition and the club's income.
Those two requirements alone eliminate the vast majority of possible arrangements before any external factor is considered.
Venues are shared and unavailable
Clubs in the same city often share a ground or share policing resources, so both cannot play at home on the same day.
Stadiums also host concerts, other sports and community events, and those bookings are made against the fixture list once it exists.
Regional constraints add more: a city may cap how many large events run simultaneously, which turns a scheduling question into a public safety one.
Other competitions cut into the calendar
Continental competitions, domestic cups and international breaks all claim dates, and clubs involved in them need surrounding fixtures adjusted.
Rest periods between matches are regulated in many leagues, so a midweek European tie constrains the weekend either side of it.
Since qualification for those competitions is unknown when the calendar is drafted, the schedule is built with placeholders that resolve later.
Broadcasters reorder the published list
Television contracts grant the right to select matches and move them to particular slots, usually with a notice period.
Selections are made weeks ahead so broadcasters can pick fixtures that matter, which means the published list is provisional from the moment it appears.
This is the main source of the changes supporters experience, and it is why travel booked early can become useless.
Fairness constraints close the loop
Leagues try to avoid a team facing several top opponents consecutively, and to keep the final rounds balanced so no club has an easier run-in.
Some competitions require that all final-day matches kick off simultaneously, which fixes the last round before anything else is arranged.
With so many conditions at once, schedules are produced by optimisation software that searches for an arrangement satisfying every hard requirement while breaking as few of the soft ones as it can.
No solution satisfies everyone, which is why leagues publish the constraints they applied alongside the fixtures, so that an apparently unfair sequence can be traced to a rule rather than a preference.