Methodology and limits
A roster score is only worth arguing about if you can see how it was reached. This page is the whole method: where every rating comes from, what the engine weighs, which official records are imported, which layers are model estimates rather than measurements, and what this tool still cannot tell you.
What this is
All-Time Basketball Lineup is an unofficial fan tool from DD42. It is not affiliated with or endorsed by the NBA, any team, or any player. It takes ten players you pick and runs one deterministic, versioned calculation over them: the same ten players always produce the same score, with no randomness, no model sampling, and no influence from anything you did earlier. AI never determines a score anywhere in this product. It only explains results the engine already computed.
Where the player ratings come from
Every rating is calculated, not assigned. Each of the 197 players in the pool has their public career record committed to this repository as raw input, and a single fixed formula turns that record into offense, defense, usage, sustained production, and pedigree numbers on a scale that starts at 40. There are no per-player adjustments and no hand-tuned values: changing one player’s rating is only possible by changing their inputs or by changing the formula for everyone. Nothing is capped at the top. The anchor tables continue past their strongest calibrated point, so a player better than everyone else keeps that distance instead of sharing a maximum with the next four players, which is why a handful of ratings read above 99.
The raw inputs come from www.basketball-reference.com, retrieved 2026-07-31. Only uncopyrightable statistics and award facts are used. Editorial rankings from video games, television lists, or other publications are never copied.
The window rule
A player is rated over a peak window, never a career average and never a blend of unrelated career-best seasons. The window is up to five seasons that are close together in a career, and each season must clear a minutes floor so an injury-shortened cameo cannot become someone’s peak. Offense and defense each get their own best window, because players whose offensive and defensive primes do not coincide would otherwise have one skill measured outside its peak. The rule is the same for everyone, so nobody is favored by it.
Five seasons rather than three, on sample size alone. Three seasons of a rate statistic rewards one hot stretch. Widening the window cost the short, brilliant peaks a few points each and left the long primes untouched, which is exactly what a sample-size correction should do.
What each rating is built from
- Offense: offensive box plus/minus over the offensive window, mapped onto the rating scale through a fixed anchor table.
- Defense: defensive box plus/minus over the defensive window, plus a capped award term for All-Defensive selections and Defensive Player of the Year, because box scores are close to blind to perimeter defense.
- Usage: usage percentage over the offensive window, describing how much of the offense ran through the player.
- Sustained production: career win shares above a replacement rate, the only rating that reads the whole career rather than the peak window. Win shares rather than VORP, because VORP is built on box plus/minus, which does not exist before 1974, so a VORP term would silently score fifteen of these players at zero.
- Pedigree: an index of verifiable honors, built from All-NBA First Team selections, MVPs, Finals MVPs, championships, and All-Star appearances. It is career stature, not a claim about locker-room behavior.
The single number on a player card, the peak overall, weighs those at 32.4% offense, 17.6% defense, 30% sustained production, and 20% pedigree. Peak and career are therefore worth half each, and the offense-to-defense balance inside the peak half is 55 to 30.
Honors are priced by what each one measures rather than by how famous it is. An All-NBA First Team selection is worth 3, because it is awarded every season and is the honor closest to being explained by measurable individual performance. An MVP adds 2 on top of the First Team selection it almost always comes with, so an MVP season is worth 5 in total; the discount is there because MVP voting carries a measured bias toward players on winning teams, holding production constant. A Finals MVP is worth 1, a championship 0.5, and an All-Star appearance 0.25. A championship is priced low deliberately: it is a team outcome, and the playoff term already measures how the individual played in the postseason.
Players are compared on the unrounded score, never the number printed on the card. Where two players print the same rating they are shown as tied, because a difference the card cannot display is not a difference this model claims.
What happens when the statistic does not exist
Box plus/minus begins in 1973-74 and usage percentage in 1977-78. Earlier peaks fall back to win shares per 48 minutes for offense, to win shares scaled by rebounding presence for defense, and to a player’s share of team true-shot attempts for usage. Those fallback scales were fitted by matching quantiles against the players whose careers span both eras, so a 1962 rating and a 2016 rating land on the same scale rather than on two scales that happen to share a range. This is the single largest source of uncertainty in the product, and it is treated as such below.
The committed ratings are locked to the formula by a repository test that recalculates every player from the raw inputs on every build. If the inputs or the formula ever changed without the ratings being regenerated, the build would fail rather than ship a silently inconsistent pool.
The seven scoring categories
A complete roster is ten players, two at each position. The engine scores it across seven weighted categories. These weights are read straight from the scoring engine, so this table cannot drift from the code that produces your result.
| Category | Weight |
|---|---|
| Offense | 30% |
| Defense | 25% |
| Lineup & role fit | 20% |
| Bench & 48-min coverage | 10% |
| Matchup versatility | 10% |
| Leadership | 2.5% |
| Shared NBA experience | 2.5% |
Offense, defense, and bench scores come from the rated players themselves. Lineup and role fit and matchup versatility come from role tags and position eligibility: shooting, playmaking, rim protection, switchability, and how many slots each player can legitimately fill. Shared NBA experience is named carefully on purpose. It counts verified teammate seasons and nothing else, so a low value means this exact group is unproven together, not that they would clash. It carries 2.5% of the score for exactly that reason.
The overall roster score is that weighted sum, clamped to a 40 to 99 range, then mapped to a letter grade and a plain tier label through fixed bands. The tier and the letter can never disagree, because both read the same number.
Official season and award data
Franchise eligibility, scoped ratings, teammate evidence, and every honor shown on a player card come from official league data rather than from anything DD42 decided. Two imports supply it, both reproducible from committed scripts.
- Career feed version
- nba-stints-2026-08-02
- Award set version
- nba-awards-2026-08-02+nba-all-star-appearances-v1
- Scoped version set
- 2026.08-pilot-7
The career feed
The official NBA career feed provides 2,761 exact team stints, 2,650 structurally separate season aggregates, and 1,189 season-specific All-Star game appearances across 197 mapped players. A stint is one player with one team in one season, which is what makes traded seasons legible instead of averaged away.
- https://stats.nba.com/stats/playercareerstatsNBA.COM · RETRIEVED 2026-08-02
One detail matters more than it looks. That feed records All-Star game appearances, so a player selected to an All-Star team who did not enter the game is not represented. The interface says “appearance” rather than “selection” for that reason, and the pedigree index inherits the same limit.
The award history pages
Season-level MVP, Finals MVP, championship, Defensive Player of the Year, All-NBA First Team, and All-Defensive Team records are imported from 6 official NBA.com history pages.
- https://www.nba.com/news/history-mvp-award-winnersNBA.COM · RETRIEVED 2026-08-02
- https://www.nba.com/news/history-finals-mvp-winnersNBA.COM · RETRIEVED 2026-08-02
- https://www.nba.com/news/history-defensive-player-of-the-year-winnersNBA.COM · RETRIEVED 2026-08-02
- https://www.nba.com/news/history-all-nba-teamsNBA.COM · RETRIEVED 2026-08-02
- https://www.nba.com/news/history-all-defensive-teamNBA.COM · RETRIEVED 2026-08-02
- https://www.nba.com/news/history-nba-championsNBA.COM · RETRIEVED 2026-08-02
Together with the All-Star appearances that is 2,283 season-level records in total, and every one of them is tied to a specific season, so a franchise or era mode can count only the honors that were actually earned inside its scope.
| Record | Count |
|---|---|
| All-Star game appearance | 1,189 |
| All-NBA First Team | 357 |
| Championship | 230 |
| All-Defensive First Team | 210 |
| All-Defensive Second Team | 133 |
| Most Valuable Player | 71 |
| Finals MVP | 57 |
| Defensive Player of the Year | 36 |
Franchise and era modes
All-Time rates a player at their career peak wherever it happened. A franchise or era mode answers a narrower question: how good was this player in seasons that actually belong to that scope? Answering it honestly means throwing data away, and the rules for what gets thrown away are fixed.
A qualifying season
A season qualifies for a franchise scope when the official career feed shows a real stint with that franchise, meaning enough games and enough minutes that a token appearance cannot claim a player for a team. Franchise identity follows canonical continuity across relocations and renamings, so Minneapolis counts as Lakers, Syracuse as 76ers, and Philadelphia and San Francisco as Warriors. All 30 current franchises are defined this way, and 7 era definitions cover the league from the 1950s to the 2020s. For an era scope, a season qualifies simply by ending inside that decade.
The seasons a scoped rating is built from
Inside the qualifying seasons the engine picks a window of up to five seasons, each clearing the same minutes floor and spanning no more than six calendar years, and it picks that window separately for offense and for defense. Offense and usage come from the best offensive stretch, defense from the best defensive stretch, and the player card says which case applies and names the seasons on both sides. Sustained production is the exception: it totals every season inside the scope, including ones too short to qualify a version, because a shortened season is still production.
Scoped modes rate this way because All-Time does, and the alternative was worse. One continuous window read well but produced two different ratings for the same career: Kobe Bryant, who never played for anyone but the Lakers, was rated 92 offense and 77 defense All-Time and 91 and 67 as a Laker, off the same twenty seasons, purely because his best defensive years and his best offensive years were not the same years. A scope now changes a rating only when it actually removes seasons or honors.
Why some seasons are visible but excluded
When a player was traded mid-season, the career feed records the exact stints, but the advanced statistics for that season exist only as a combined line covering both teams. Using it would leak another franchise’s statistics into this franchise’s rating. So that season still establishes eligibility and is still shown to you, but it is excluded from the performance window and the player card says so explicitly. Scoped pedigree works the same way: only awards earned inside the qualifying seasons count, and only playoff runs made for that franchise or inside that decade. The one exception is a scope that holds a player’s entire career, which excludes nothing and so counts his career totals.
These are betas. Every other franchise stays blocked until it has scoped versions generated and checked, because an incomplete pool would quietly produce a confident-looking score built from missing seasons.
Analysis-only layers, and their limits
Four layers on the results page go beyond the seven categories. None of them changes your published overall or category scores. They are shown because they are useful to look at, and labeled because they are estimates.
Hybrid role estimates (hybrid-role-profile-v1)
15 lineup-fit attributes are estimated for every player: shooting gravity, primary creation, rim pressure, interior scoring, off-ball value, offensive rebounding, point-of-attack defense, wing defense, interior defense, rim protection, defensive rebounding, switchability, ball dominance, role flexibility, scalability. They are calculated from the derived ratings, role tags, and position eligibility through one transparent formula applied identically to everyone. They are model estimates, not tracking data. No optical tracking, play-by-play, or shot-location data is used anywhere in this product, and no number here should be read as a measurement of what a player actually did on the floor.
Lineup compatibility beta (lineup-compatibility-v1)
Every legal five-player unit your roster allows is enumerated and scored on those estimated attributes, and the winner for each of 6 purposes is reported. The search is exhaustive rather than sampled, so the result is stable. Its inputs are still estimates, so treat the ordering as a model opinion about fit and not as a prediction of what any five would produce.
Rotation beta (staggered-rotation-v2)
The rotation converts position-level minute targets into 12 deterministic 4-minute blocks. Always true of the result: every block fields five distinct players in positions each is eligible for, every player gets at least eight minutes, and the blocks add up to a full game. Usually true: nobody exceeds their rounded minute target by more than one block. On roughly a tenth of legal rosters no schedule can satisfy both at once, so the cap widens a step at a time rather than the page failing. Minute targets are a target, not a promise.
Matchup pressure index (benchmark-matchup-v4)
Your roster is compared against a fixed field of 13 archetype opponents, and each matchup gets a 0 to 100 pressure index. Pressure is not a win probability, not a point spread, and not a team rating. It is a relative calibration that says which of those thirteen opponents stresses your particular roster most, on a scale that only has meaning inside that field. It does not enter the published score. In Challenge Mode a tactical emphasis can move it, and that effect is capped at three points in either direction.
Historical calibration, and what it does not establish
Two statistical bridges are fitted from official league history. Both are real, both are measured on data they never saw during fitting, and neither one is a forecast of your roster. This is the most important section on this page, because it is the easiest thing here to overclaim.
1,723 official team seasons are committed, covering every season ending from 1947 to 2026, with advanced metrics available from the season ending 1997 onward. A games-weighted binomial logistic model was fitted on 652 team seasons through the season ending 2018, then measured on 240 later team seasons it had never seen, from the season ending 2019 onward.
- Coefficients
- intercept -0.0051, net rating 0.1364
- Holdout mean error
- 2.60 wins per 82 games
- Holdout worst case
- 10.1 wins per 82 games
360 completed playoff series, from seasons ending 2003 to 2026, were reconstructed from official game logs, with home court and each team’s official regular-season net rating. A symmetric logistic model was fitted on 240 series through the season ending 2018 and measured on 120 untouched later series. Reversing the two teams always returns exactly the complementary probability.
- Coefficients
- net rating difference 0.2833, home court 0.3251
- Holdout Brier score
- 0.213
- Holdout accuracy
- 68.3%
Your roster is not on either of these scales
Both models take an official team net rating as their input. A DD42 roster score is not a net rating and has not been calibrated onto one. In the code the two readiness flags that would allow a forecast to be published are both false, and they are checked by tests, so this is a fact about the build rather than a promise on a page. That is why this tool shows you no expected win total and no series probability anywhere.
- Regular-season forecast: not ready, blocked by dd42-roster-to-net-rating-calibration and schedule-strength-and-game-variance-model.
- Best-of-seven forecast: not ready, blocked by dd42-roster-to-net-rating-calibration and matchup-and-tactical-adjustment-calibration.
What the calibration does establish is narrower and still worth having: that official net rating maps to historical results with measurable, published error, so when DD42 roster signals are eventually placed on that scale there is already a yardstick waiting and a holdout to be judged against.
Results that surprise people, and why
A ranking is only worth anything if you can see why it disagrees with you. Three results draw the most argument, and all three follow from choices stated above rather than from a mistake. If you think the choice is wrong, that is a real disagreement and a useful one.
A championship is a team result, so it is priced at half a point here, against three for an All-NBA First Team selection. Russell has more championships than anyone and that pricing costs him more than anyone. Note what is not happening: he is not being missed by the data. His defensive rating is the highest in the pool, ahead of every modern center. What the model declines to do is convert his team’s titles into his individual rating.
Roughly a third of the rating is sustained production across a whole career, not a short peak. Malone is fourth in this pool on career value above replacement and was named All-NBA First Team eleven times. A model that rewards being excellent for a very long time will rank him high. A model built around peak brilliance would not.
This one is a genuine weakness rather than a defensible trade. His defensive rating is near the top of the pool, but the rest of the rating is built from box score production, and defensive playmaking, communication and rotations leave almost no box score trace. Every player whose value is mostly organisational is understated here, and he is the clearest case.
Known limitations
The honest summary: uncertainty is highest for pre-modern players, and it is highest of all for their defense. A rating for a 1960s center and a rating for a 2016 guard are printed in the same font and are not equally well supported.
- The pool is a curated 197 players, not every player who ever qualified. Inclusion is an editorial judgement; only the ratings are formula-driven.
- Pre-1974 individual defense carries materially wider uncertainty. Box plus/minus does not exist before then, so those defensive ratings rest on win shares scaled by rebounding presence, which is the only individual defensive signal the era recorded at all. Steals, blocks, and the offensive and defensive rebound split were not recorded until 1973-74, and team offensive and defensive ratings only from 1996-97, so no better defensive signal exists in any source this product holds.
- Usage percentage begins in 1977-78. Earlier windows estimate shooting load from a player's share of team true-shot attempts, which is a proxy, not the same statistic.
- The All-Defensive team begins in 1969 and Defensive Player of the Year in 1983. Players who peaked earlier cannot earn the defensive award term the same way, so seasons leading the league in defensive win shares before 1969 stand in for it.
- Offense and defense are each rated over their own best five-season stretch, which for many players is two different periods of a career. A rating therefore describes a player at his best in each phase, not a single continuous prime. Every mode now works this way, so an All-Time and a franchise rating are directly comparable, and a player who never left one franchise gets the same rating in both.
- The playoff term reads scoring, efficiency, rebounding, and playmaking from traditional box totals, because playoff box plus/minus does not exist. It is close to blind to defense, and it measures a player against his own regular season rather than against the difficulty of the round he reached.
- Team-specific advanced inputs are missing for some traded seasons, so those seasons are disclosed and excluded from a scoped performance window rather than blended in.
- Role profiles infer basketball traits from ratings, role tags, and position eligibility. They are not optical-tracking measurements, and no play-by-play or tracking data is used anywhere in this tool.
- Rules, pace, league size, and competition differ enormously across these eras. Nothing here adjusts a 1962 season to modern conditions; ratings are calibrated within the available statistics, not translated between eras. The pre-1974 scales were fitted to reproduce the box plus/minus distribution, and box plus/minus’s own author notes that older players did not dominate the game the way modern players can, so whatever compression that carries is inherited here rather than corrected.
Found something wrong?
Wrong inputs are the failure this method is most exposed to, and a reader who knows a player’s career will usually spot one before we do. If a rating, a season, a team, or an award looks wrong here, report it with the official source that shows the correct value.