Off the clock
How the top 25 actually gets built
Ranking 25 players across seven decades directly is hopeless — you end up comparing a 1960s center to a 2020s point guard with nothing in common. Two phases make it tractable instead.
- Position battles. Build a depth chart — every point guard stacked against every other point guard, same for each position. Comparable skill sets, comparable roles.
- Era duels. Where two or three players overlapped and both have a real case for "best in the league right now," settle it head-to-head before merging everyone into one list.
Phase 1: the depth chart
Same 25 players as the top 25, just sorted into position groups first. Hit the button to watch them merge back into the actual ranking.
- SF1 #1 LeBron James 2000s–2020s
- SG1 #2 Michael Jordan 1980s–1990s
- C1 #3 Kareem Abdul-Jabbar 1970s–1980s
- C2 #4 Shaquille O'Neal 1990s–2000s
- PF1 #5 Tim Duncan 2000s–2010s
- SG2 #6 Kobe Bryant 2000s–2010s
- SF2 #7 Larry Bird 1980s
- PG1 #8 Magic Johnson 1980s
- C3 #9 Bill Russell 1950s–1960s
- PG2 #10 Stephen Curry 2010s–2020s
- C4 #11 Hakeem Olajuwon 1980s–1990s
- C5 #12 Wilt Chamberlain 1960s–1970s
- SF3 #13 Kevin Durant 2010s–2020s
- C6 #14 Nikola Jokić 2010s–2020s
- C7 #15 Moses Malone 1970s–1980s
- PF2 #16 Giannis Antetokounmpo 2010s–2020s
- PF3 #17 Dirk Nowitzki 2000s–2010s
- PF4 #18 Kevin Garnett 1990s–2010s
- SF4 #19 Scottie Pippen 1980s–2000s
- SF5 #20 Kawhi Leonard 2010s–2020s
- PG3 #21 Chris Paul 2000s–2020s
- PF5 #22 Charles Barkley 1980s–1990s
- PG4 #23 Oscar Robertson 1960s–1970s
- SG3 #24 Jerry West 1960s–1970s
- SG4 #25 Dwyane Wade 2000s–2010s
Runs on the View Transitions API — same static HTML/CSS/JS GitHub Pages already serves, no server needed. Falls back to an instant snap if a browser (or reduced-motion setting) doesn't support it.
Phase 2: era duels
The depth chart still leaves ties — players who overlapped and both have a real claim to "best in the league" in a given stretch. Two of those calls, straight from the reasoning already behind the rankings above:
1980s · SF/PG
Bird vs. Magic
Bird gets the nod (#7 vs. #8) — better defender, ahead-of-his-time shooter, and did it with lesser teams around him. Magic's case is the best-passer-ever argument and a Swiss-army-knife game; he just never had to do it without Kareem and Worthy next to him.
2000s · C/PF/SG
Shaq vs. Duncan vs. Kobe
Landed #4, #5, #6 — in that order, back-to-back. Shaq's peak was the most dominant of the three, which is exactly why neither Duncan nor Kobe was ever really considered the best player in the league in a given year despite both being inner-circle greats. Duncan edges Kobe on longevity and two-way impact; Kobe's efficiency and playing Robin to Shaq's Batman cost him the last half-step.
Do that for every position and every overlapping era, merge the results by rank, and you get the top 25.