Who are the NBA's most overpaid players? Who are the best bargains?
On the heels of free agency, when teams collectively spend billions of dollars while players secure the proverbial bag, we're left to ponder those two simple questions, neither of which has a clear-cut answer.
Until now... sort of.
There have been many great NBA models throughout the years built with the intention of ballparking how much each player in the league is worth on a per dollar basis. Jacob Goldstein built a great one years ago for BBall Index, which was subsequently taken out of the public sphere once he was hired by the Wizards. John Hollinger extended Goldstein's work with his $BORD tool at The Athletic.
I would have a better shot of beating Derek Zoolander in a walk-off than keeping up with their modeling skills. That didn't stop me from spending the weekend teaching myself how to build my own rudimentary salary tool.
The goal: Find the NBA's most overpaid and underpaid players.
For those that just want the results, I'll lead with them. To follow the journey of how I got to those numbers, keep scrolling!
Without further ado...
MORE: Why a KD trade isn't worth Celtics breaking up Brown and Tatum
The five best contracts for the 2022-23 NBA season
5. Zion Williamson, Pelicans (Base salary ranking: 105)
- Actual salary: $13.5 million
- Projected value: $34.2 million
- Difference: +$20.7 million
4. LaMelo Ball, Hornets (161)
- Actual salary: $8.6 million
- Projected value: $34.0 million
- Difference: +25.4 million
3. Ja Morant, Grizzlies (118)
- Actual salary: $12.1 million
- Projected value: $38.1 million
- Difference: +$26.0 million
2. Darius Garland, Cavaliers (156)
- Actual salary: $8.9 million
- Projected value: $41.1 million
- Difference: +32.2 million
1. Desmond Bane, Grizzlies (346)
- Actual salary: $2.1 million
- Projected value: $38.7 million
- Difference: $36.6 million
Honorable mentions: Robert Williams, Herb Jones, Tyrese Haliburton, Evan Mobley
Bane is the most underpaid player in the league using my tool. Veterans earning the minimum like Luke Kornet and DeAndre Jordan will make more than him. But he's worth the same as max players coming off their rookie deals like Deandre Ayton, Shai Gilgeous-Alexander and Michael Porter Jr.
That shouldn't come as a huge surprise to people who watched Bane closely. He finished in the top 30 in EPM, the all-in-one stat that I used to build out my tool. If Bane continues his level of production, he should get that Ayton level of money on his next deal.
That all of the names on this list are still on their rookie deals also shouldn't come as a surprise. Elite young players return insane value in their first four years because of the structure of rookie contracts.
MORE: How Warriors' signings bolster title defense
The five worst contracts for the 2022-23 NBA season
5. Davis Bertans, Mavericks (90)
- Actual salary: $16.0 million
- Projected value: $4.4 million
- Difference: -$11.6 million
4. Doug McDermott, Spurs (103)
- Actual salary: $13.8 million
- Projected value: $1.6 million
- Difference: -$12.2 million
3. Bradley Beal, Wizards (4)
- Actual salary: $43.3 million
- Projected value: $26.4 million
- Difference: -$16.9 million
2. Tobias Harris, 76ers (15)
- Actual salary: $37.6 million
- Projected value: $17.6 million
- Difference: -$20.0 million
1. Russell Westbrook, Lakers (2)
- Actual salary: $47.1 million
- Projected value: $11.1 million
- Difference: -$36.0 million
Honorable mentions: Terrence Ross, Julius Randle, Caris LeVert, Talen Horton-Tucker
Westbrook is still an OK NBA player. But only Stephen Curry makes more than him ($48.1 million), and Westbrook's production has only been a little better than league-average since moving to the Lakers.
Harris is another example of a guy who should be getting starter-level money. Instead, he is being paid like one of the top guys in the league. Harris is in the top third of NBA players in EPM. That isn't bad, but he is being paid more than All-NBA First Team guards Luka Doncic ($37.1 million) and Devin Booker ($33.8 million).
Beal is in the first year of a new five-year max, and he is already significantly overpaid on that deal. He should decline a little more with every passing year at this point in his career. That deal is going to be the worst in the NBA in its final years, and Beal has a no-trade clause.
The last two contracts on this list, which belong to McDermott and Bertans, come from a period when teams were grossly overpaying for one-way shooters. Both are turnstiles on defense, limiting their impact. That makes them worth around league-minimum deals, way less than the actual figures that they are earning.
MORE: How much does Westbrook have left in the tank?
How I built my salary tool to evaluate NBA contracts
So, how does one determine player value? It's the problem that all NBA front offices are facing. I initially did what any writer with limited programming and statistical skills would probably try. I typed "NBA salary model" into the Google search bar. That was a dead end.
Next, I turned to people smarter than me who had done this type of work before (see Note 1). Unfortunately, their projections for the upcoming season were not built out yet.
I finally made some progress when I remembered that Seth Partnow had gone over this very problem in his excellent book, "The Midrange Theory." I went back to my copy and flipped to Chapter 7, titled "Mind the Cap: Player Value and Roster Construction."
Partnow outlined the basics of how you'd go about determining how much a player is worth. The steps are as follows:
- Pick an all-in-one metric like RAPTOR, LEBRON, DARKO, EPM, RPM, etc.
- Take the all-in-one metric and multiply by the amount of time that a player is on the court to get to a wins produced number.
- Find the cost of an average win. Multiply that figure by wins produced to get to a player salary number.
I decided to use Taylor Snarr's Estimated Plus/Minus (EPM) as the basis of my salary tool because it's considered one of the best all-in-one metrics available (see Note 2).
The next step is the trickiest. In order to guess how much a player is worth, you need to estimate how many minutes he will play. As my genius friend and NBA stats guru Kevin Ferrigan explained to me, this is an inexact science, and a lot of modelers struggle with it.
I had my own method, though: straight-up guesswork. I also had my own random number generator, created by timing the intervals between two small children throwing toys of varying sizes at me while I worked.
From there, I found the cost of an average win (see Note 3). Multiplying estimated wins with cost of a win yielded an average contract value.
Let's use Westbrook as an example to tie it all together. We had our impact number for him, from EPM (-1.1). My guesswork at his minutes put him at 2,500 for the season. That placed Westbrook at +3.2 estimated wins (see Note 4). To get to Westbrook's salary, we do the following basic math:
Estimated wins (3.2) * Cost of average win ($3.46 million) = $11.1 million salary
Westbrook's actual salary of $47.1 million as compared to a value of $11.1 million is clearly a gigantic albatross, but you didn't really need to spend all weekend noodling around in spreadsheets to figure that out.
The tool did provide some less obvious points of interest. Dorian Finney-Smith, on a new deal of $12.4 million per year, is still one of the better contracts in the league. Jones is another absolute steal. The league seems to have realized that 3-and-D wings are insanely valuable, but they remain underpaid as a group.
My tool certainly wasn't the best one ever made. Snarr did 99.99 percent of the work for me in building out EPM. Hollinger's $BORD is also a much better public tool for these purposes. But I was pretty happy with how my rinky-dink salary tool turned out.
The results were at least way more interesting than coming up with a completely subjective list myself, and they passed the sniff test. For the cost it took to build it out, I would judge my tool as properly paid.
Note 1: The good people at BBall Index did give me their list of the most overpaid and underpaid players from last season, which used some of Goldstein's old methods. (They use a much more sophisticated process than what I did.) The underpaid list also included a bunch of productive players still on cheap rookie deals: Garland, Bane, Jones and Trae Young. Max players that missed a lot of games and/or underperformed landed in the most overpaid category: Kyrie Irving, Paul George, Damian Lillard, Klay Thompson and Westbrook.
Note 2: A real modeler would bake in some projection for improvement or decline over the next year, but I took the lazy way out and assumed a player's EPM value would be the same for this upcoming season as it was last season.
Note 3: Cost of an average win is found by dividing total payroll ($4.3 billion) by the number of wins in an NBA season (1,230). That yielded the number we want: $3.46 million per win. There are many problems with this approach that Partnow outlines in his book, but in our quest to find massive outliers, it should do just fine.
Note 4: To convert EPM to estimated wins, I reverse-engineered a formula of minutes/1,475 * (EPM + 3).