by Patrick Appel
A reader writes:
I'm a software engineer. It is well-known and not disputed by anyone who works in the field that the most effective professional programmers can be thousands of times more productive than the least effective. If this seems unlikely, keep in mind that one programmer who writes a lot of bugs that other programmers have to fix actually has negative productivity, and it can be hard to figure this out until after the damage is done. I used to teach classes for professional programmers, and even among my students, this was easy to observe.
I am not aware of a single organization anywherenot even here in Silicon Valleythat has come close to a pay scale where programmers' pay varies by even one order of magnitude, and certainly not three. In fact, what we tend to do is lay off and refuse to consider hiring anybody over 35. The reason often given is that they demand more money.
This makes sense in a way. If you can't tell who is good, you should hire whoever is cheap. Measuring programmer effectiveness is really hard.
A good programmer will solve a problem in fewer lines of code and take less time to do it than someone else. So counting lines of code or hours spent doesn't work. Counting bugs not found also doesn't work--other programmers, upon seeing an elegant solution, all agree that it's exactly how they would have solved it, and are blind to the rejected alternatives and the problems that would have arisen. More than once, when I have gotten something finished on time and it works without needing a lot of bug fixing, I've been told that's because it was an "easy" problem. Meanwhile, the team that misses the deadline and spends a week of all-nighters is rewarded for their obvious dedication and hard work. The good programmer who just solves the problem may not even be aware at how difficult the problem would be for some of their colleagues.
Within a company, you develop a reputation and people see your work. But the code you write is a trade secret, and you can't easily take it with you. Whether you're good or bad, nobody who wants to hire you can see a complex version of your work. They can try weeding you out by making you write code on a whiteboard, but that's sort of like asking a pianist to hum for an audition.
The brilliant thing the Indian outsourcing industry did was to throw out the idea of programmers needing to be the best. (I don't mean to insult Indian software engineers--some are as good as anybody else, but just by sheer numbers, it's safe to say that most would have chosen another line of work if they had as many other opportunities as Americans do.) They realized that if you can hire a lot of mediocre programmers in India, you can quote a low hourly rate, and even if it takes 20 times the effort, it doesn't matter if the cost is about the same and the delivery is predictable. And it's a lot easier to predict how long it's going to take 20 programmers to do something than to tell if the one guy you hired is at the top of the field or the bottom. With the 20 average programmers, it might take twice as long. With one programmer, it might take 1/20th of the time of the average team or it might take 100 times as long.