How MatchFlow plans a tournament

This page describes what the planner actually does. Not a feature list — the method, with the formulas, so you can check the output against it by hand if you want to.

Nothing here is generated by a language model. Every figure comes from arithmetic on the numbers you entered. The same inputs always produce the same plan, and any number in the output can be traced back to a step below. That matters when you have to defend an entry fee to a committee, or explain to a coach why their team plays at 9am on Sunday.

1. Work out how many matches there will be

The format determines the match count, and the match count drives everything downstream — pitch hours, referee slots, budget lines. So it is settled first.

Single round robinN × (N−1) / 2 matches, across N−1 rounds (N rounds if N is odd, with one bye each round)
Straight knockoutN−1 matches, because every match eliminates exactly one team. Byes do not change this
Groups + knockoutsGroup matches summed per group, plus the knockout and placing matches for each tier

With an odd number of teams a dummy bye slot is added to make the bracket even. That is why an odd round robin has as many rounds as teams.

2. Check the pitches can actually hold it

This is the check most spreadsheets skip, and it is the one that causes tournaments to overrun. Capacity is computed before any fixture is placed.

Slot lengthmatch duration + changeover time
Matches per pitch per dayfloor(available minutes per day / slot length)
Total capacitymatches per pitch per day × pitches × days
Pitches requiredceil(matches / (matches per pitch per day × days))
Days requiredceil(matches / (matches per pitch per day × pitches))

If capacity is short, you are told how many pitches or days are missing before anything else runs — not after a schedule has been half drawn. If the margin is under roughly one extra round, it is flagged as tight rather than passed silently.

3. Place every match against hard constraints

Fixtures are placed one at a time, earliest feasible slot first. A slot is only feasible if it violates none of the following. These are constraints, not preferences — the scheduler will use another day rather than break one.

Rest between matchesA team cannot play again until the minimum rest has elapsed (60 minutes is the usual youth setting)
Matches per team per dayA cap you set; once a team hits it that day, no further fixture is placed for them
Pitch occupancyOne match per pitch at a time, changeover included
Opening hoursMatches are only placed inside a pitch's open windows, and must finish inside the same window
Pitch size matchingAn 11-a-side match only goes on a pitch that can take it; larger pitches can host smaller formats
Stage barrierNo knockout fixture starts before every group match in that division has finished
Round orderWithin a tier, a round cannot start before the previous round has finished

Pitches can have several windows in one day (for example 9–12 and 14–18 with nothing over lunch), and windows can apply to a single day only. A pitch can also be closed for a whole day.

4. Assign referees without clashes

Referees are assigned after fixtures are placed, working through the schedule in chronological order.

No overlapA referee already committed to an overlapping time is not available
Not their own clubIf the roster entry records a club (written as name@club), that referee is never appointed to their own club's matches
Load balancingAmong the available referees, the ones with fewest appointments so far are picked first
How many per matchFollows the format: normally one for 7-a-side, a referee plus two assistants for 11-a-side

If the roster is too small to cover every match, you are told how many appointments are short rather than getting a schedule with silent gaps.

5. Cost it, then derive the entry fee

The budget is built from the schedule, not estimated separately. Match count and pitch hours come from steps 1 to 3, so the numbers cannot drift apart.

Pitch hireday rate × pitches × days (or per-match / hourly, if that is how your venue prices it)
Refereesreferees per match × matches × fee
Staff, medicalheadcount × days × day rate
Kit, awardsper pitch and per age group
Contingencya percentage of the direct-cost subtotal
Break-even entry feetotal spend / number of teams

Unit prices are per market, not converted from one currency. English pitch hire, referee fees and insurance follow different structures from Chinese or American ones — for instance affiliated English clubs already hold public liability through county affiliation, while American organisers buy single-day cover per event.

Why determinism matters here

Tournament planning is not a task where a plausible answer is good enough. A fixture list that looks right but puts a team on the pitch twice in twenty minutes is worse than no fixture list, because nobody checks a document that appears finished.

So the planner is built as arithmetic with explicit constraints, not as a model producing a likely-looking schedule. When capacity is insufficient it says so and stops, rather than quietly dropping fixtures to make things fit. When the referee roster is too small it reports the shortfall instead of leaving matches unstaffed. Failing loudly is a feature.

What it does not do

Worth knowing before you rely on it:

Travel time between venues. Multi-venue tournaments are scheduled per pitch; the planner does not know how long it takes to drive between two sites. If your venues are far apart, add that into the rest setting yourself.

Weather and postponements. There is no rescheduling engine. If a day is lost you re-run the plan with the remaining days, which is quick, but it is a new plan rather than a patch to the old one.

Guaranteeing your local prices. The default unit costs are researched per market and are a starting point, not a quote. Pitch hire in particular varies by a factor of three within one country. Replace them with your own figures as soon as you have them.

Team preferences. Requests like “we can only play Sunday morning” are handled through arrival-time constraints, but the planner does not negotiate between competing requests. It applies the constraints you give it.

Check it against your own tournament

Put in your teams, pitches and days and compare the output against the formulas above. If a number does not reconcile, that is a bug worth telling us about — every figure is supposed to be traceable.

Open the planner