If you have a skill graded from 1-10 with 10 being the best, and you have 10 people, 9 rated 5 and 1 rated 1, then the sample average is 4.6 and 90% are above it, yet noone is actually good. This explains driving...
There are also multiple definitions of "good developer" (speed/output level vs maintainability vs project definition and architectural influence vs firefighting vs...).
That doesn't mean they're all what a company needs at a given time. This leads to another way you end up in hard managerial conversations: you're good at X, but the business has changed and Y is driving our bottom line much more than X now, but you have no interest in Y and are resentful that you aren't being rewarded as handsomely for X anymore. What do you do if you're a manager who knows the odds of X being that important again in the future are very low (maybe there's enough structure in place now with automated testing and such that firefighting is way less critical than it was when small), but the one-time-star starts complaining that their raises have gotten smaller as they've resisted coaching/directional changes for the past year or two?
And if you're completely transparent with salaries, you've got an extra problem: this person could be higher paid than some of the people contributing the most right now, and explicit specific knowledge of that will just make even more people unhappy, if you aren't in a position to simply raise everyone's else's pay to match.
Representative ranges (with room for overlap for e.g. someone peaking at one level vs just starting at the next) give you many of the benefits with far less of the ego bruising. Generally you-as-employee can get a feel for what these are after a couple years even without it being explicit, IME.
"you're good at X, but the business has changed and Y is driving our bottom line much more than X now, but you have no interest in Y ... he odds of X being that important again in the future are very low"
This should be open discussion whether you have transparent salaries or not. Long before it comes to salary decision, the topic of "we need more Y, learn it" should happen. Not just because of salaries. If transparent salaries force it, then it is a good thing. Not just because of fairness, but because developers often focus on the wrong thing. And because when manager opens it, sometimes it turns out there is obstacle for doing Y that can be overcome with help of manager.
I mean, really. If you valued X in the past and just merely praised people for it and now it is changing to Y, be clear and tell them. It is very unlikely that your ninja coder turns from best to worst overnight just after slight strategy change. If he was so awesome, he will be able to learn new thing fast - unless there is some kind of resentment going on in his head which usually have little to do with strategy.
Non transparent salaries dont prevent people talk, dont prevent resentment either, but you usually end up with humble/shy coders having much lower salaries then overconfident ones. And I seen that humble/shy getting really resentful when he figured it out.
I think the point is that most of us believe we are better than average at salary negotiation and that is not true. I won't hide my bias. I abhor wall street journal and articles like these don't do any favors. However, articles like these are horrible even if it showed up on my New York times. If the WSJ thinks salary disclosure is harmful, will they also advocate that public employee's salary should be confidential as well? What a bunch of bullocks.