When we change how a published number is computed, we say so here, with a date. That includes the times we got it wrong — a metric whose definition moves quietly is a metric you can't check us on. These notes describe method only; they never restate a player's figures.

Wins conversion recalibrated

Affects: Absolute WAR values. No ranking, percentile, or tier changes.

As the final step of this month's rating-scale update, the conversion that translates rating impact into wins has been re-estimated on the updated scale. Absolute WAR values move down as a result; no ranking, percentile, or tier changes, and comparisons within a season are unaffected. We re-derive this conversion from the data whenever the underlying scale changes, rather than carrying an outdated constant forward.

The 5v5 Shot-Control Index is now published

Affects: Player pages, all seasons. New metric; nothing existing changed value.

A metric that had been computed internally for some time is now on the site. It asks whether play tilts toward the opposition net when a player is on the ice at five-on-five, relative to what his own team does without him, blending his zone-start-corrected share of shot attempts with his share of the expected goals. Chance quality carries the larger share of the weight. The full description is on the situational and deployment methodology page.

Two things about how it is presented are deliberate. First, the name. Internally this metric has always been a 'driver versus passenger' comparison, and that framing does not survive contact with what the number actually measures: it captures one dimension, and calling a player a passenger on the strength of it would be a judgment the metric cannot support. An elite power-play scorer can rate poorly here and still be excellent. So the public name is what it measures - shot control - and nothing on the site will call a player a passenger.

Second, the seasons it does not cover. The index needs five-on-five expected goals, which our model produces from 2020-21 onward. Seasons before that carry an explicit 'unrated' label rather than a blank cell or a zero. That is not the same thing as a locked value: there is no number behind a paywall for those years, the input simply does not exist, and we would rather say so than print a zero that reads as 'exactly average'.

On the free tier you see the tier band; the precise index is a paid-tier value, in line with how every other precise figure on the site is handled.

Offense and defense now have separate settings

Affects: The offense leaderboard and every published uncertainty range. Defense is essentially unchanged.

Our player-impact model separates each skater's on-ice contribution from his teammates' and opponents'. Because everyone plays with everyone, the model has to hedge — it pulls every rating toward league average by an amount set by a single dial. Until now offense and defense shared that dial.

Measuring across all six seasons in the model, they should not: the true spread of defensive impact between NHL players is consistently narrower than the spread of offensive impact, about 60% as wide, in every season without exception. One shared setting therefore hedged offense too hard while hedging defense too little. The two are now set separately.

In practice this widens the offense board, so the gaps between forwards better reflect real differences, and leaves the defense board essentially where it was: about a quarter of rated players' offense numbers moved further than their previously published uncertainty range, while no player's defense number did. Nine of the top ten on each board are unchanged.

Every published uncertainty range was re-computed from scratch under the new settings, so each interval still describes the number printed beside it. One thing this does not do is make the top of the board more decisive — the wider spread comes with proportionally wider uncertainty ranges, and the leading group remains statistically tied.

The zone-start data era now starts in 2020-21, not 2019-20

Affects: Shot-control metrics and zone-start readings for 2019-20 and earlier.

Our shot-control metrics correct a player's shot-attempt share for how often his coach started him in the offensive zone. That correction needs on-ice zone-start data, and that data begins in 2020-21 — which is exactly where the underlying deployment table we build it from begins.

The code that decided which seasons were covered had the boundary one season too early: it treated 2019-20 as a season with real zone-start data when the source has never held any. For as long as an older frozen copy of the zone data sat in the pipeline, that one-season disagreement was invisible, because the stale copy kept 2019-20 looking populated. When we removed the frozen copies during unrelated data-quality work, the disagreement surfaced the way it should have all along — as rows going conspicuously empty and a failing build check, rather than as a quietly wrong number.

The fix, applied 3 August 2026, moves the boundary to 2020-21 in both places it lives, so 2019-20 now sits with 2009-10 through 2018-19 at an even zone-start split. That means the shot-control metric for those seasons receives no deployment adjustment — it is a raw shot-control read, which is what it always was for 2018-19 and earlier. The boundary is now declared once and checked against its own source on every build, so the two numbers cannot drift apart again without failing loudly.

What this means for you: nothing changes within a season, because every row in a given season is computed the same way. Comparing a 2019-20 or earlier reading against a 2020-21 or later one is not like-for-like, and every surface that shows one of these numbers for a pre-2020-21 season now says so at the point of use. Our RAPM is unaffected — its seasons already start at 2020-21, so it was never split across the two eras.