&gt;but for the average programmer it&#x27;s pretty close (skills are quite homogeneous<p>I don&#x27;t think that&#x27;s right. First of all, programming skills are not homogeneous at all, they are in fact widely dispersed. A bad programmer can very easily destroy value by slowing down his team, in a way that doesn&#x27;t happen in e.g. a factory environment. It&#x27;s also not easy to judge programmer skill pre-hiring, so starting salaries are biased toward the mean, making good programmers underpaid and bad programmers overpaid.<p>Additionally, there are biases, morale considerations, and cultural issues that prevent compensation being equal to value added. Businesses are incredibly averse to firing people (there are some good reasons for this of course, e.g. morale). There is also very strong inequity aversion (again partially a morale issue) that makes it impossible to pay top programmers what they&#x27;re really worth. Both of these issues lead to significant deviations.