-Software developers typically aren't comfortable negotiating, nor are we well versed at it. Therefore, we accept job offers for less than we know we are worth and accept raises offered rather than negotiate raises based on our actual performance. -We have no collective bargaining capability, and anyone can enter the field. In Canada engineers have a professional designation, the software industry is typically not a part of that collective. Lawyers have the bar exam to pass before they can practice. These restrictions restrict the labor supply in those industries to ensure higher wages. In our industry anyone can join, even foreigners, or employers can even outsource the labor to another cheaper country. This has the combined effective of raising the labor supply, and reducing our ability to negotiate as a group. -It is difficult to measure the performance from one developer to another. Look at sales as an industry, it is very easy to measure a top performer. If we were better able to demonstrate performance it would be easier for a developer to earn 50% more than his/her peers. Where I live some shops that hire refuse to pay even 10% more for a developer because they are filling head count and treat developers somewhat like a commodity.
The above realization has left me a little jaded. I love this field, but realize that I can earn more selling software than building software.