How Schedule Strength & Travel works

Six numbers, asked twice: once of the games a team has played, once of the games it has left. They are ranks across all 32 teams, never raw values — “4th-hardest remaining” is a claim about the league, and that is the only form in which schedule strength means anything.

Two windows, ranked separately

A team three games into a season has survived one schedule and is about to play another, and the two can sit twenty places apart. Reporting them as one number — the full season's opponents, played and unplayed together — answers a question nobody asked.

Each window is ranked across all 32 teams over that same window. A team's Remaining rank is therefore comparable to every other team's Remaining rank, and has nothing to do with its own Played rank.

Played
Games with a final score, this season only. Its ranks compare this team's played slate against every other team's played slate — which is a different set of games for each of them, and deliberately so: the question is who has had the harder season so far.
Remaining
Games still on the schedule. Ranked the same way, against every other team's remaining slate, so 3rd-hardest remaining is a claim about the league and not about this team's own season.
Full season
Shown before a team has played anything, when Played and Remaining would say the same thing twice. It is the whole schedule, on paper.
A completed season
Every game final, so there is nothing left to look forward to and the module collapses to one backward-looking row, labelled with the season and the number of games in it.

Opponent quality

Opponents are rated on EPA per play with this team's own games against them removed, so a team is never credited for how its opponents did against it. Every team is then ranked over the same window of the schedule.

All four columns agree that 1st is the hardest draw, which is why the grid says so once above them rather than four times.

Opp. win %

How good is this slate's record?

The combined win percentage of the opponents in the window — every game they have played this season, counted once, ties excluded from the denominator. It is the plainest of the four and the only one that is not EPA, which is why it sits first: a reader who trusts nothing else on the row can read this one.

1st: 1st is the toughest set of opponents by record.

Overall

How hard is this slate, all in?

Defenses faced minus offenses faced, netted into one number. A team drawing good defenses AND good offenses is in more trouble than either column shows alone, and this is the column that says so. Lower is harder, so 1st is the most negative.

1st: 1st is the hardest overall draw.

Defenses

How hard is it going to be to score?

The mean EPA per play allowed by the defenses this team's offense meets. A stingier defense allows fewer expected points per play, so a LOWER number is a harder draw.

1st: 1st faces the stingiest defenses.

Offenses

How hard is it going to be to get a stop?

The mean EPA per play generated by the offenses this team's defense meets. A better offense gains more expected points per play, so a HIGHER number is the harder draw — the opposite direction to the column beside it.

1st: 1st faces the best offenses.

Travel & rest

These two do not share a direction with each other, let alone with the four columns beside them — which is why that half of the grid carries no “1st = …” label and each cell states its own.

Miles

How far is this team flying?

Great-circle distance between stadiums for every road game in the window, summed. A home game adds nothing. Neutral-site games are measured from the team's own stadium to the site.

1st: 1st flies the most — the worst draw, not the best.

Rest

Who arrives fresher?

Days since each side's previous game, differenced per game and summed across the window. Positive means this team arrived with more rest than its opponents did, on balance.

1st: 1st has the biggest rest advantage — the BEST draw.

Early in a season

In the season's first weeks there is not enough of a current season to rate anybody on: leaving a team's own games out of a Week 2 opponent's record can leave that opponent with no games at all. Opponent ratings therefore carry a fading slice of the prior season — all of it before kickoff, none of it from Week 5 — matching the season cutover the rest of the site runs on. The weight falls on its own as weeks complete; nothing is switched over on a date.

While that blend is open the grid says so in its footer, and the note disappears on its own once the module is running on one season's data.

If a rank still cannot be computed — no completed game anywhere to rate an opponent on — the cell shows a dash and the sentence above the grid says why. It never rounds a missing rank into “average”.

Reading the colour

Cell shade is the rank, not the raw value: five steps from the hardest sixth of the league to the easiest. Two cells sharing a shade are within a few places of each other, not equal.

A dashed, unfilled cell is not the lightest step. It means there is no rank — the lightest step means the easiest draw in the league, which is a very different thing to say.

What's in and what isn't

Regular season only. Bye weeks are not games and appear in no window. A team's own games are excluded from its opponents' ratings, never from its own schedule.

Nothing here is a prediction. A hard remaining schedule is a statement about the opponents on it as they have played so far, not a forecast of how that team will do against them.

Data

Play-by-play, schedules and results come from nflverse, licensed CC BY 4.0. Stadium coordinates for the travel figure are our own. Opponent ratings are recomputed hourly in season; the schedule is read fresh, so a game moves out of Remaining as soon as it is final.

← Back to the teams