Do NBA players play better in contract years?
The idea is older than most box scores: a player about to hit free agency plays harder, because the next contract depends on it. This study tests it across 1999-00 to 2025-26, one season at a time, by comparing each player's contract years with seasons where the next deal was already guaranteed. The answer depends on who you ask about. Role players show a small, real bump. Stars show none, and if anything slip.
Why this is harder than it looks
Two things make a naive comparison wrong. The first is regression to the mean: players often reach a contract year right after a good season, so their next season looks worse whatever the contract says. The second is aging: contract years cluster at particular ages, and players at those ages are already rising or falling.
So the outcome here is not raw Box Plus/Minus. It is Box Plus/Minus against an expectation built only from the player's earlier seasons, pulled toward the league average and adjusted for age. A contract-year effect has to show up on top of both. Players are grouped into four tiers (stars, starters, role players, and fringe players) by their value in the two seasons before, never by the contract year itself.
Role players rise a little; stars do not
The size matters as much as the sign. About a fifth of a point of Box Plus/Minus per 100 possessions is small: a real effect, not a transformation. For stars the estimate points the other way. One possible reading is that stars have little to prove and a lot to protect, but the data here can only say that no boost shows up.
The pattern survives every specification
The analysis plan was written before any contract-year comparison was run, and its two amendments were dated before any outcome was looked at. The checks below were also fixed in advance.
The contract-year boost does not spread into other measures much. Of six secondary outcomes checked across five tier groups, only two survive a correction for multiple comparisons, both across all tiers: players appear in +1.73 more games than their age alone predicts, and their true shooting rises by +0.32 percentage points.
The season after
A contract year is also a sorting event. Of the contract-year role players, 20% never played another NBA season (stars: 10%).
What the labels can and cannot support
No public source lists contract status as a clean field, so every season is labeled from signing and extension events, team moves, the rookie-scale schedule, departures from the league, and Wikipedia's free-agent tables. Checked against a hand-verified gold set and Patricia Bender's 2017-18 contracts snapshot, the labels are strong for recent seasons and weaker before about 2012. Mislabeled seasons mostly blur a real effect toward zero, so the role-player estimate is more likely understated than overstated. Earlier eras are reported in the README for context only, because their labels could not be checked against independent records.
Performance comes from Basketball-Reference, cross-checked season by season against stats.nba.com before any modeling. The raw pages stay local; only derived estimates are published.
Method, code, and verification
The full technical write-up (data provenance, model specification, validation gates, and stated limitations) is the README. The analysis is implemented independently in R and Python and reconciled to numeric tolerance; run_checks.sh replays every gate.