Complex vs Complicated
The NBA has a salary cap and maximum salaries. A team can spend a certain amount of money each year and each player is limited to how much they can be paid. If you have a salary cap, why do you need a max salary? The usual answer is that you don’t want a team paying a player 99% of the salary cap and then the rest of the roster splits the remaining 1%. But a team constructed like that won’t win. And there are spillover effects. There’s the Larry Bird exception, the mid-level exception, the Qualifying Veteran Free Agent Exception. All these exceptions are band-aids to fix unforeseen consequences.
The NBA has turned a complex system into a complicated system. A complex system means that there are a lot of interconnected parts and thus many relationships between those parts. A complicated system is difficult to understand. A complex system, with enough iterations, reaches an equilibrium as players understand how everything relates to each other and the pros, cons, and tradeoffs.
The NBA never waits for an equilibrium. Instead, they see an undesired outcome and create a rule to prevent it. Instead of allowing teams to make mistakes, they pass rules that create ludicrous actions. Teams must have first-round draft picks at least every other year so now options to swap picks are used instead.
Complicated systems favor teams that read the fine print and use loopholes which the league then creates more rules to close and the cycle repeats. What would happen if there was a strict salary cap that was tied to a percentage of league revenues? Some teams would overpay superstars at first and those teams would be unsuccessful. Teams would learn from that example and eventually, different strategies would be employed until some win out and are broadly adopted.
Micromanaging to outcomes rarely results in those outcomes happening.