27 turns RBs into pumpkins. Especially the workhorses.
What the consensus says
This week's dynasty content keeps repeating the same RB-age frame. Footballguys' 2026 dynasty RB tiers warns that Jonathan Taylor, Dalvin Cook, and Travis Etienne are "heading into their age-27 seasons" with "the window for joining the elite tier closed." FantasyLife's age-cliffs piece is blunter: "the sell window is 25-26; if you're waiting until 27-28, you're already late." Apex Fantasy Leagues pegs peak RB output at 25.46, and the FantasyPros 2026 target/avoid list works the same age frame into every older-RB writeup. Four independent voices, one claim: the 27+ workhorse window has closed.
Falsifiable claim. So I tested it.
The claim, in plain English
def predicate(row) -> bool:
"""True iff Y+1 starts when player is age >= 27."""
return row["age_at_y1_start"] >= 27.0
The consensus argument only holds if RBs entering Y+1 at age 27+ produce substantially lower Y+1 ppg than younger RBs at the same Y0 carry and target volume. The volume control is the whole game here. Aggregate means lie. Older RBs lose touches, so their raw output drops anyway. The real question is whether production cliffs when an older RB gets the same workload as a younger one. Same fuel in the tank. Does the engine still run?
How I beat on it
scripts/h30_rb_age_27_cliff.py builds Y to Y+1 pairs from
player_stats_season.csv (REG only, RB position, 2015-2024 Y0, Y+1 reaches
2025, games_y0 >= 4, total_touches_y0 >= 50). Age at Y+1 start is computed
from players.csv's birth_date field, measured on Sept 1 of Y+1.
Scoring is a half-PPR system (0.5/rec, 0.1/yd, 6/TD).
n = 546 pairs. 33.3% are age >= 27 at Y+1 start (n_in = 182, n_out = 364).
Gate 1 (within-band cohort): for each Y0 volume band, compare Y+1 ppg mean for in-cohort (age >= 27) vs out-of-cohort. The bar for "directionally real" is delta <= -1.5 ppg with n >= 10 per side in at least one band. Framework reference: Session 97 two-gate spec.
Gate 2 (residual against engine projection): skipped by construction. The engine's projected_season_ppg already takes age as a top-level input through the RB curve (peak 25, decline begins 26, effectively done 31), so the residual is collinear with the predicate and would produce a tautological zero. A valid Gate 2 needs an age-neutralized projection variant. That scaffolding does not exist yet.
What the data actually said
Aggregate: in-cohort 8.30 ppg, out-of-cohort 9.81 ppg, delta = -1.51 ppg.
Stratified by Y0 total touches (the table that matters):
| Volume band | n_in | in ppg | n_out | out ppg | delta |
|---|---|---|---|---|---|
| 300+ workhorse | 30 | 12.22 | 47 | 15.24 | -3.02 |
| 250-300 starter+ | 24 | 10.64 | 47 | 12.55 | -1.91 |
| 200-250 starter | 38 | 9.22 | 67 | 10.82 | -1.61 |
| 150-200 mid | 27 | 8.08 | 62 | 9.75 | -1.67 |
| 50-150 reserve | 63 | 6.37 | 141 | 7.79 | -1.42 |
Every band points the same direction. Four of five clear the -1.5 ppg threshold with n >= 10 per side. The reserve band misses by 0.08 ppg.
Here is the kill shot. The cliff scales with usage. At the 300+ workhorse band (exactly the volume tier where dynasty rosters bet the highest draft capital and trade premium), age-27+ backs produce a full 3 fantasy points per game less than their younger counterparts at the same touch load. That is the largest within-band delta the numbers have produced in any cohort this year, including the H-27 alpha-WR and H-28 sophomore-WR draft-capital tests (both failed). The mechanism is not that the team cuts his carries. The mechanism is that his legs give out first. Same carries, less output. That is not a selection artifact. That is a biological tax.
What the engine already figured out
This is the rare case where the consensus and the engine were already holding the same position. The engine's RB curve already pegs peak at 25, decline beginning at 26, and the workhorse decline slope is the steepest of any position. Both the takesmiths and the engine arrive at the same roster-side answer: 27 is the cliff.
What this cohort test adds is a magnitude estimate the engine was not explicitly fitting against. -3.02 ppg at 300+ touches is a specific number. Whether the existing curve correctly predicts that number is the recalibration question, and that requires Gate 2 (an age-neutralized projection variant) which does not exist yet. The cohort confirms the direction. The depth of the drop still needs a clean read.
What to do about it
For roster decisions: if you're holding a workhorse RB entering his age-27 season at 300+ projected touches, the historical base rate is roughly 3 ppg of decline relative to younger RBs at the same load. That's one full tier in the half-PPR landscape, the difference between a top-12 weekly start and the back of RB2. The "sell window 25-26" framing the takesmiths are pushing this week lines up with the data, at least on the cohort axis.
For the engine: Gate 2 has to get built before any modifier ships. The engine already has an RB age curve, and the question that actually matters is whether the existing curve correctly fits the -3.02 ppg cliff at 300+ workhorse age 27+. The cohort result says the effect is real. It does not say the engine is currently mis-calibrating it. A clean read