Last updated 20 June 2026
How Fairtime Measures Fair Playing Time
This document explains, in detail, how Fairtime decides whether a player is getting a fair share of minutes — and what we mean when the brand promises "proof". If you're a parent who thinks your child has been underplayed, a coach who wants to understand the labels, or a club secretary judging whether to adopt Fairtime, this is the underlying logic.
1. The principle in plain English
Fair playing time means: across the season, a player has played roughly the share of minutes you'd expect for someone of their availability and the manager's stated intent — no more, no less.
Three things shape that expectation:
- How often they were available. A player available for every match has a different fair share than one available for half.
- How they're rotated by intent. A goalkeeper who plays every minute when available isn't "overplayed"; that's by design.
- Their actual minutes played. What's recorded after each match.
Compare actual minutes against expected minutes and you get a fairness ratio. A player's status — Rotation Priority, Needs Minutes, On Track, or Rotation Credit (a dedicated keeper shows GK instead) — reads off that ratio. The status is outcome-only: it reports where the player's minutes actually landed, not the manager's intent.
The rest of this document is the precise version of the above.
2. The denominator: fair share
A player's fair share is the number of minutes they would have played if all available players were rotated equally across the fixtures they were available for.
For each fixture i a player was available for:
match_minutes_i = total minutes of fixture i
on_pitch_slots_i = number of players on the pitch at any one time
(e.g. 11 in 11-a-side, 7 in 7-a-side)
available_players_i = count of players available for fixture i
(using the eligibility rules in §6)
The fair share of one minute of fixture i is:
share_i = on_pitch_slots_i / available_players_i
Multiplied across the fixture's duration:
fair_share_minutes_i = match_minutes_i × on_pitch_slots_i / available_players_i
A player's season fair share is the sum of fair_share_minutes_i
across every fixture they were available for.
This is availability-weighted: a player who was available for 8 of 12 fixtures has a fair share built only from those 8 — they don't get "penalised" in the denominator for matches they weren't there for, and the squad's denominators don't get distorted by their absence either.
3. The numerator: actual minutes played
A player's season minutes is the simple sum of minutes recorded for them across all completed fixtures, segment by segment, as logged by the manager during Match Day.
Minutes are derived from the period-by-period record:
- A player on the pitch for the full segment gets the segment's minutes.
- A player who came on as a sub mid-segment (uncommon at grassroots level — most subs happen at segment boundaries) gets the partial remainder.
- A player who came off mid-segment gets the partial portion they were on for.
What's not counted: time after a red card, time during stoppages, time in pre-match warm-up.
4. The fairness ratio
For each player:
ratio = season_minutes / season_fair_share_minutes
A ratio of 1.0 means the player has played exactly their fair share. 0.8 means they've played 80% of their fair share. 1.2 means 120%.
This ratio is what the status in §5 reads off.
5. The four outcome statuses
A note on intent. A manager can set a rotation intent for each player — for example, "needs minutes" or "protect their load". That intent shapes the behind-the-scenes maths, chiefly who sits in the rotation pool that builds the fair-share denominator. It does not set the status you see: the status reads off the minutes ratio alone, so it always reports what actually happened, not what was intended.
Fairtime's chip on a player surface (planner card, pitch token, player page, review) is one of four outcome statuses for outfield rotators, or the dedicated-GK chip for the team's named keeper.
The status is computed from the player's fair-share ratio alone — no manager intent input is required. The intent values are still honoured behind the scenes (e.g. a load-protected player can be kept out of the rotation pool), but the chip itself reads as outcome, not intent.
Outfield outcome statuses
| Status | Colour | Ratio band | What it tells the manager |
|---|---|---|---|
| Rotation Priority | 🟥 Red | ratio < 0.80 |
Severely below fair share. Prioritise next match. |
| Needs Minutes | 🟧 Orange | 0.80 ≤ ratio < 0.95 |
Mildly below. Increase next match if possible. |
| On Track | 🟩 Green | 0.95 ≤ ratio ≤ 1.10 |
Within tolerance. Nothing to do. |
| Rotation Credit | 🟦 Blue | ratio > 1.10 |
Above target. Has "credit" for rest if a rotation choice arises. |
Each status renders alongside the player's minutes balance (e.g.
Rotation Priority · −18 min) so the manager sees both the category
and the underlying gap.
Dedicated goalkeeper
The team's named, dedicated keeper shows the 🟪 GK chip on every surface. They are:
- Excluded from the outfield outcome ranking (they're not in the rotation pool by intent).
- Excluded from the outfield fair-share denominator.
- Tracked separately for outfield variety — minutes they played outfield, surfaced on the player page only.
- Never produce a GK-burden flag for their own keeping (only involuntary stand-ins do).
Confidence band
Each outfield status carries a small confidence tag based on how much fair-share opportunity the player has accrued:
- Low — fewer than ~1.5 matches of opportunity. Status renders
with
low confidence — small samplesubtitle and muted colour. - Normal — 1.5 to 7 matches. Status renders normally.
- High — 7+ matches. Status renders normally; subtitle suppressed.
The confidence tag affects how the chip is shown, nothing else. The four prompts (see §9) work differently — they're count-based and only start firing once a player has at least three fixtures of history.
Why these thresholds
- ±5% / +10% around fair (0.95–1.10) for the green-band "On Track".
Tighter than the old
0.8–1.2band: a 5-fixture squad average pulls ratios less than the old 20-team-wide assumption did. - 0.80 floor for Rotation Priority. A player at 80% of fair share is a half-match behind across 5 fixtures — a real, manager-actionable gap.
- No special case for ever-present players. The dedicated keeper is taken out of the outfield ranking entirely (see below), so there's no need for a separate rule to stop an always-available outfield player looking "overplayed".
These thresholds are tuned for grassroots youth football (squads of ~10–18 players, seasons of ~20–30 fixtures), and we expect to refine them against real team data as the pilot runs. Every threshold is a single named value in the code (see §13), so any adjustment lands in one place and is recorded in the update log below.
6. What counts as "available" in the denominator
A fixture counts toward a player's fair share if their availability status for that fixture was one of:
- Available — would play any segment.
- Late — could play from segment 2 onwards.
- Leaving early — could play up to segment N–1.
A fixture does not count if availability was:
- Maybe — unconfirmed. Until the manager confirms the player was actually there, we can't tell whether they had the opportunity to play, so a "maybe" never pulls a player's fair share up or down.
- Unavailable — definitive no.
- Injured — clinical or precautionary.
- Suspended — by the league or club.
- Other — manager-flagged absence (holiday, school, etc.).
For the partial statuses (Late, Leaving early), the fair share is calculated from the segments the player was eligible for, not the full match. This is a slight simplification: in reality, a "late" player could miss the first kick-off but still play 80% of the match. We err on the side of giving them a smaller denominator and counting the minutes they did play normally.
7. Players excluded from the model
Some players don't enter the denominator at all:
- Guests / ringers. A friend filling in for one match isn't part of the regular squad fairness picture. Including them would distort the squad's denominators.
- Inactive players. Players who've left the squad mid-season; we don't compare a current squad's fairness to someone who no longer plays.
Their minutes for the matches they did play are still recorded — just not used in fair-share calculations for the regular squad.
8. Worked example
Twelve-player squad, 9-a-side, 6 fixtures into the season. Each fixture is 60 minutes long.
Suppose 11 players are listed as available for every match; one player (Sara) was available for 4 of 6 fixtures.
Fair share calculation
For each match Sara was available for:
fair_share_per_match = 60 minutes × 9 slots / 11 available
= 60 × 9 / 11
≈ 49.1 minutes
Sara was available for 4 matches:
sara_fair_share = 4 × 49.1 ≈ 196 minutes
For a player available for all 6:
each_fair_share = 6 × 49.1 ≈ 294 minutes
Sara's outcome
Suppose across her 4 available matches Sara played:
- Match 1: 50 minutes
- Match 2: 30 minutes
- Match 3: 40 minutes
- Match 4: 50 minutes
- Total: 170 minutes
sara_ratio = 170 / 196 ≈ 0.87
0.87 is inside the Needs Minutes band (0.80 ≤ ratio < 0.95), so Sara's chip shows 🟧 Needs Minutes · −26 min. The manager has allocated minutes mildly below fair share — Sara has been off the pace for the matches she was available for.
The minutes-balance suffix tells the manager exactly how far behind:
196 − 170 = 26 minutes, rendered as −26 min. No translation
through ratios required.
A counter-example: another player whose chip fires harder
Suppose Joseph was available for all 6 matches and played 220 minutes:
joseph_ratio = 220 / 294 ≈ 0.75
0.75 is below the 0.80 floor → 🟥 Rotation Priority. Joseph's
chip reads Rotation Priority · −74 min. Same code path as Sara,
different band — the manager sees this is a bigger gap and prioritises
Joseph in the next planner.
A worked GK case
Suppose Devon is the team's named, dedicated keeper. He was available for all 6 matches and played 320 minutes (mostly in goal).
Devon's chip shows 🟪 GK on every surface. He is:
- Excluded from the outfield outcome ranking entirely — no Rotation Priority / Needs Minutes / On Track / Rotation Credit for him.
- Excluded from the outfield fair-share denominator. The squad's 11 available players above is really 10 once Devon is out of the outfield pool, so the fair-share-per-match recomputes accordingly.
- Tracked separately for outfield variety — how many minutes he played outfield this season — surfaced on the player page only, not on the chip.
This is why the named keeper is handled by role, not by guesswork: above-average minutes in goal are correct for them, and that keeper role is a setting on their player record — Fairtime doesn't have to infer it.
9. From fairness to nudges — the prompts the app surfaces
The status in §5 answers one question: is this player on track overall? But before a match a manager also needs to know what to actually do. Fairtime watches the journey from "available" to "minutes played" and turns it into a small number of prompts — concrete, dismissible cards, surfaced in the days before a fixture.
The journey has four steps:
Available ─→ Selected ─→ Started ─→ Minutes played
At each step the app checks whether a player is being quietly left behind, and raises a prompt if so:
- Repeated bench starts (the Started step). "Sam has started on the bench in 2 of the last 3 matches — start him today." Fires when a player who keeps getting selected keeps starting on the bench.
- Goalkeeping burden (the Minutes step). "Charlie covered 20 min in goal recently — protect his outfield minutes today." Flags an outfield player who has quietly absorbed a lot of time in goal. Never fires for the team's dedicated keeper — for them, that's the role.
- Selection deficit (the Selected step). "Ava was available but not selected for the last 2 matches — prioritise her selection today." Matches a player missed for a recorded reason — injury, fitness, late availability, a discipline issue — don't count against the manager here.
- Keeper cover (when the dedicated keeper is unavailable). Helps the manager pick a stand-in for an upcoming fixture, ordering volunteers by who's put their hand up and who has done the least goalkeeping so far.
The chip and the prompts read the same data but answer different questions. The chip answers "is this player on track overall?" — a single number per player. The prompts answer "what specific decision needs my attention this week?" — a few concrete, dismissible cards.
Where they show up:
| Surface | What you see |
|---|---|
| Dashboard "This week" panel | Up to 5 prompts for the next fixture, most decision-critical first. |
| Planner toolbar | A "Prompts" pill counting unresolved prompts for the open fixture; opens an in-place sheet. |
| Review page | A per-fixture fairness score, plus a preview of the prompts that would fire next week. |
| Player page | The player's status, confidence tag, recent-starts sparkline, and goalkeeping willingness. |
10. What this methodology is NOT
It's important to be clear about what Fairtime does not claim.
- It is not an objective ranking. It's a comparison of minutes to expected minutes given availability and intent. Two people might reasonably disagree about what intent should be set for a given player — the methodology doesn't tell the manager what intent to pick. The manager picks; Fairtime measures consistently against the chosen intent.
- It is not a measure of who's the best player. Minutes are a measure of opportunity, not performance. A player with a high ratio might be highly skilled or might just always be available.
- It does not account for tactical fit, position scarcity, opposition strength. A natural striker won't always get equal minutes if the manager is rotating goalkeepers — and that can be correct. The methodology surfaces minutes equity, not tactical fairness.
- It does not make decisions for the manager. Fairtime recommends; the manager decides. Every recommendation is overridable in one tap, and the override is the recorded action.
- It does not extend to performance, behaviour, or character. Fairtime tracks minutes, fixtures, goals, and assists. Anything beyond that — temperament, coachability, parent engagement — is out of scope deliberately.
11. Known limits and weaknesses
Listed here so they're not surprises.
| # | Limit | Why it exists | Workaround |
|---|---|---|---|
| 1 | Small squads have noisy ratios | A 9-player squad with 1 absence shifts every other player's denominator by ~12% | The On Track band (0.95–1.10) absorbs ordinary squad-size noise; Rotation Priority / Rotation Credit only fire past 0.80 / 1.10, on a real sustained gap. The bands are calibrated for grassroots squad sizes — see §5 |
| 2 | Mid-segment subs aren't always logged precisely | Most grassroots subs happen at segment boundaries; mid-segment sub timing is a manager judgment | Acknowledged; minutes are accurate to about a minute, not a second |
| 3 | "Late" and "Leaving early" are coarse | A player who arrived 5 minutes into a 60-minute match still counts as "late" → only segments 2+ count | True; could be refined later, but adds complexity that grassroots manager don't have time for |
| 4 | Stoppage time isn't tracked | Match-Day clock pauses for stoppages but resumes; final minutes per player are approximate to the planned schedule | Acceptable for the use case; precision-to-the-second isn't the goal |
| 5 | Manager rotation intent can change mid-season | A player marked "needs minutes" in September might be re-flagged "equal" by November | Intent changes are recorded; the ratio history is built from the current intent. Worth documenting explicitly in update log of player profile |
| 6 | A guest who turns into a regular | Guest flag doesn't auto-flip when a one-time fill-in becomes a routine player | Manager must un-flag manually; we surface a hint when a guest plays 3+ fixtures |
These are known. Fairtime documents them rather than hiding them.
12. How to audit a number you don't trust
If you're a parent, a coach, or a club official looking at a Fairtime chip and disagreeing with it, the audit path is:
- Open the player's stats page. Each game-by-game row shows the recorded minutes for that fixture.
- Sum the minutes for the fixtures the player was available for. Compare to the season minutes Fairtime reports.
- Identify available fixtures. Each fixture's availability page shows the count of available players. Multiply by the per-match fair-share formula above.
- Compute the ratio yourself. Compare to Fairtime's number.
- Find the discrepancy. If the numbers don't match, one of:
- A fixture's minutes were mis-logged (manager error, fixable).
- An availability status is wrong (correctable on the availability page).
- Fairtime has a bug (report to
support@fairtime.football).
The whole pipeline is designed to be auditable by hand. The chip is deterministic given the inputs; given the same data, two independent audits should produce the same result.
13. How the math is implemented
The methodology is built from pure, independently testable functions — the same code path the app uses to draw every fairness label and to power the planner's suggestions. There is one calculation, used everywhere; the chip a parent sees and the number the planner uses are never computed two different ways.
Every threshold named in this document is a single named value in the code — there are no hidden adjustments, no per-player fudge factors, and nothing that varies by who is looking. A threshold changes only with an entry in the update log below and a corresponding note in the app's changelog, so any change is visible and dated.
14. How to challenge the methodology
This document is not a finished product. If you're a club, a researcher, a journalist, or a parent who can spot a flaw, the intended response is:
- Open an issue at
support@fairtime.footballwith the specific claim or scenario. - We respond within 5 working days with either: an acknowledgement and plan to fix, or a defended explanation of why the current approach is intended.
- Material changes (new bucket, new threshold, new exclusion rule) are announced in the update log of this document and in the app's changelog.
The promise is not "we got it right". The promise is "we'll show our work and respond to good-faith challenges in the open."
15. Update log
- 2026-05-07 — first public draft, aligned with the original four-bucket fairtime reframe (shipped 2026-05-06).
- 2026-05-16 — Fairness Model v2. Replaced the intent-driven four-bucket chip with the outcome-only four-status chip (Rotation Priority / Needs Minutes / On Track / Rotation Credit) and made the dedicated keeper a first-class role with its own GK chip. Band thresholds 0.80 / 0.95 / 1.10; confidence tag added; minutes-balance shown alongside every chip; the per-fixture prompts (§9) introduced.
- 2026-06-20 — reconciled this document to shipped behaviour ahead of public release: §1 status names, §6 availability set ("maybe" excluded), §11 bands, and §13 rewritten for a public audience.