Right up front, people should all be treated with equal good and fair treatment.

However, people are not equal. Thank the heavens they are not equal - vive la difference! Employees specifically are not equal. They are all unique, but more imnportantly, in the field of knowledge workers, they operate at vastly different levels of effectiveness and efficiency.

In my field, that of software development, there are many kinds of effectiveness that are important. There are those that make good decisions - such as what kind of tools are appropriate for the job. There are those that have a nack for naming things well. Those that make elegant designs that are not only easier to implement, but withstand the future well. There are those that code effectively. Their code is efficient and easy to maintain.

There are also those who work long and hard, making code that works, right now, for the case in hand. Sometimes that code is hard to read. Harder to maintain, and contains numerous assumptions that only hold in the one case they are coding for right now. They are not necessarily any faster (or slower) than others who write more elegant, maintainable code.

Then there are those that work hard at terrible code, code that remains buggy for iteration after iteration, with cut and paste repetition of the same “cargo cult” snippets borrowed from some place that used to work.

The problem is, these people can all command the same rate of pay. The same opportunities for advancement. Most companies have no way of telling which worker is which - and in fact will often promote the worst decision makers because those people (often desperately) want to run things instead of trying to do their job.

Even if the best people are advanced, their pay scale is only incremental, whereas their real output is a force multiplier in the organisation. There is no mechanism that can reward excellence without moving it out of its sphere of expertise. To get more money, I would have to become a manager. In what universe can a manager add more value to a company than the lead developer of their main product (software)?

One thing that would be needed is some way of evaluating this contribution beyond “lines of code”, or projects completed on time (which is often bogus because of who sets the timeline and the feature sets). Unfortunately, the expertise to recognise that sort of value is not often (if at all) possessed by management. It is much easier to see if a sculptor is an apprentice, journeyman or master by simply looking at their work (and asking how long it took to produce). How do you evaluate someone who can choose the tools for a team, implement the build environment, take the requirements and turn them into a useful design, and then lead the actual coding on a successful project? Was it done well (How would you know)? Was it done fast (could it have been faster)? Will it be maintainable? Could someone else have done it better in some respect (almost certainly - but at what cost)?