Career arcs

How NHL careers rise, peak and fade, measured

Every NHL season since 2000-01, set against what a player's earlier seasons and his age predicted. Aging curves are corrected for the players who leave the league, and each label about a career was tested on seasons the model had not seen before it was allowed on the site.

Players on file
4377
Forwards: peak age
24
Defencemen: peak age
26
Goalies: peak age
24
League aging curves

Where each position peaks

The average change from one season to the next at each age, chained into a curve. Players who decline tend to leave, which makes a naive curve too kind to older players; the headline curve fills in those exits (the method that recovered known curves best in a simulation study).

Forwards

−2002040602024283236agepoints per 82
league curve (survivorship-corrected)likely range of the peak age10th to 90th percentile of seasons by age

Peak at 24 (95% range 24 to 26); after it, −1.07 points per 82 a year over the next five years. Ignoring the players who leave puts the peak at 26.

Defencemen

020402024283236agepoints per 82
league curve (survivorship-corrected)likely range of the peak age10th to 90th percentile of seasons by age

Peak at 26 (95% range 23 to 28); after it, −0.88 points per 82 a year over the next five years. Ignoring the players who leave puts the peak at 26.

Goalies

−2.0−1.00.01.024252627282930agesave % above league
league curve (survivorship-corrected)likely range of the peak age10th to 90th percentile of seasons by age

Peak at 24 (95% range 24 to 25); after it, −0.24 save % above league a year over the next five years. Ignoring the players who leave puts the peak at 24.

Source: CapOrCup careers desk · as of 2026-09-29

The survivorship finding

Leaving the league hides decline

A player who has a bad season often has no next season, so his decline is never counted. Comparing the naive curve with the corrected one shows how much that matters.

  • Forwards: points per 82 games peaks at 24 (95% range 24-26) and then changes by -1.07 a year over the next 5 years (-2.4% of the peak level a year); ignoring the players who drop out would put the peak at 26 with a decline of -1.84 a year.
  • Defencemen: points per 82 games peaks at 26 (95% range 23-28) and then changes by -0.878 a year over the next 5 years (-3.2% of the peak level a year); ignoring the players who drop out would put the peak at 26 with a decline of -0.641 a year.
  • Goalies: save % above league peaks at 24 (95% range 24-25) and then changes by -0.237 a year over the next 5 years (-23.3% of the peak level a year); ignoring the players who drop out would put the peak at 24 with a decline of -0.151 a year.

In a simulation with known curves and three ways of leaving the league, the error of each method (lower is better): naive 0.062, weighting by the chance of staying 0.064, filling in the exits 0.039. The last is the headline method.

Source: CapOrCup careers desk · as of 2026-09-29

Measured career labels

Careers that did what the numbers did not expect

Each label describes a run of seasons, not a person. Its percentage is the share of 200 re-measurements of the player's seasons (the points or saves redrawn from their own sampling noise) in which the label still applies. Lists are split by position; a position with no list did not pass the test.

Flash in the pan

A season two or more standard deviations above what his earlier seasons and age predicted, after which the next one or two seasons came back to within one standard deviation of the old expectation. Ranked by the share of re-measurements in which the call holds.

Forwards

  1. Martin St. Louis 94%
  2. Gustav Nyquist 90%
  3. Sean Monahan 90%
  4. Vyacheslav Kozlov 87%
  5. Ryan Donato 84%
  6. Scott Walker 83%
  7. Mike Ribeiro 83%
  8. Alex Ovechkin 82%
  9. Johnny Gaudreau 81%
  10. Jeff Skinner 79%

Goalies

None shown: this label did not pass its test for this position.

Sustained breakout

The same kind of spike, followed by two seasons that both stayed at least 1.5 standard deviations above the old expectation. Ranked by the share of re-measurements in which the call holds.

Goalies

None shown: this label did not pass its test for this position.

Late bloomer

Two consecutive seasons at 26 or older at least 1.5 standard deviations above what everything through 25 predicted, from a player who was not in his position's top quarter at 25. Ranked by the share of re-measurements in which the call holds.

Goalies

None shown: this label did not pass its test for this position.

Exceeded ceiling

NHL ice time through the age-25 season above the 90th percentile of the projection made at the draft. Ranked by the hours beyond that bound.

Goalies

None shown: this label did not pass its test for this position.

Source: CapOrCup careers desk · as of 2026-09-29

How this was measured, and what did not ship

The level of a season is era-adjusted points per 82 games for skaters (so a point in a low-scoring year counts for more), and save percentage minus the league's save percentage for goalies. A season counts when a skater plays 20 games or a goalie faces 500 shots.

The expected level for a season comes from a regression-to-the-mean forecaster: it follows each player's level from his earlier seasons, allows for noise in a short season, and drifts it with age. It was fitted on seasons up to 2018-19 and checked on the seasons after. A mixed-effects model was tried as the forecaster and lost on those later seasons for every position (forwards: squared error 162.3 against 153.7), so it is kept only as a benchmark.

Each label was written down with its test before the data were read, and ships only if it held on later seasons. Flash in the pan: after 120 spike seasons from 2018-19 on, the next season landed 0.28 standard deviations below the regression-to-the-mean forecast, so spikes are partly luck beyond ordinary regression. Sustained breakout: 42 label-holders stayed +1.51 standard deviations above the old expectation the season after. Late bloomer: 34 label-holders, +1.24. Exceeded ceiling at the draft: on the held-out draft classes 2015-2018, 10% landed above the 90th percentile, close to the 10% it should be.

Not shipped

  • Projections at 20 and 22: on the held-out classes, 21% and 20% of players with a non-zero floor landed below the 10th percentile, twice what a calibrated projection allows. Those classes played their early twenties through the two shortened seasons, which the model cannot know; a corrected version is registered for a blind test on the 2019 class when it reaches 25 (careers-checkpoint-projection-v5).
  • Early peak: only 12 label-holders could be tested on later seasons, below the 20 set in advance.
  • Fell short: only 12 held-out players could be tested at the draft checkpoint, too few to judge.
  • Every goalie label. Tested on goalies alone, the forecaster's error on later goalie seasons was 1.16 standard deviations against a limit of 1.15, and only 2 goalie spikes and 3 late bloomers were testable. Goalie draft projections are withheld too: 19% of 92 held-out goalies beat the 90th percentile, against a 5-15% window.

The goalie labels were first built with an aging curve that fell 0.24 save-percentage points a year after 24, used only when labelling and never in the test; that put a veteran goalie's expected level far too low (one 2024-25 season read as a spike against an expected level below league average). The goalie forecaster now has no aging drift, and the goalie-only test was registered before it was run (careers-goalie-labels-v1).

The full record, including every pre-registration and its outcome, is on the integrity page and in the model register.