Wednesday, November 15, 2006

Is Joel Spolsky Right About Hiring?

Joel Spolsky is opinionated about hiring great programmers. That's fine. He recognizes that great programmers produce at a rate that's gaudy compared to the average programmer. There are certainly people smart enough to be a great programmer, but lack the will to do it. Thus, in principle, a Ph.D. in computer science is bright enough to figure out most of the complexities of programs, but it may frustrate them to no end to actually do it.

But Joel has the luxury to hire as he wants. As I've pointed out numerous times, his blog allows him to get some fame, at least, in enough circles that he can get talented programmers to apply. Needless to say, without his blog, he'd find his talent pool far, far thinner.

There's still an additional issue. Joel is cautious about how much business he takes on, and indeed, the worst thing that could happen to Joel is to have a project that requires two dozen programmers to accomplish. He'd have to reject such projects, because he needs the time to find the programmers he wants.

Indeed, even places as vaunted as Google or Microsoft who try to hire the best, may end up having to "lower" their standards to get enough people to do what needs to be done. Having said that, this lowering of standards often leaves them with people that are still far above their competitors.

Joel does get one thing right, and it's somewhat sad, but true. He assumes that great programmers are, well, born, but not made. More properly, there's some things you can teach to improve the skill of a programmer, but that takes effort most companies are unwilling to take. They'd prefer that programmers have already reached the stage that anything they need to learn, they can learn on their own.

And someone like Joel wants programmers that show good judgment, meaning they don't get distracted on coding or research that doesn't pertain to what needs to be done, and yet be careful enough not to write quick and dirty code that forgets to deal with strange cases.

The point is that, given his company, he has the luxury to refuse people, because he never has the need to have, say, 20 people hired in three months. He simply couldn't find that many good people because as well known as Fog Creek Software is, it's still an elite community that's heard of them. They lack the day-to-day recognition that Microsoft and Google has, and this is even among people who program for a living.

Indeed, Joel could almost say "I wouldn't hire someone who had never read my blog or heard about the company", because it means that person isn't savvy about the technical world around them. These are the same folks that are likely not to have heard about Ajax, Web 2.0, Reddit, Digg, and so forth.

And of course, I haven't even bother to talk about the fact that if you take his philosophy to the extreme, then any talk he presents to colleges (and he has been doing that lately) could start with "Most of you, I would reject in a heartbeat. You're not good enough to work for my company, and frankly, most of you shouldn't even be working at all, because if I would reject you, so should everyone else".

That's, of course, far too mean to say, because it might scare off the good people too, who usually aren't so narcissistic to believe they are the best (a few believe that, but they can be a pain to work with, especially if they are right--which makes it a reason to avoid hiring them as well).

This strategy is basically like professional sports. Most people playing college sports will never make a living as a professional, and frankly, they don't. They have to seek alternatives. To be fair, those that make it to the pros are handsomely compensated. And to be fair, if you're above a certain level in programming competency (which might be a bar set very high), then you can have as many of that skill of programmer as you could want.

What I mean is this. Competitive sports directly pits athlete against athlete, and as athletes get better, what used to be good enough is no longer good enough, because they have to compete against better players.

This is less the case with programmers. If you're smart enough to understand algorithms, graphics, math, etc. and you're able to master new material and software quickly, and you're savvy enough to decide whether you should take path X or Y, then you're probably good enough to be a top-notch programmer. And anyone who can pass this threshold should be good enough. Theoretically, that can be as many people as you'd want.

Practically, it's hard to get programmers to this level, because it takes a certain attitude and intelligence to reach here.

To sum up (which I find I need to do often), hiring as Joel suggests is not often feasible unless you can control how much work you need. This is exactly why Joel refuses to do consultingware. He simply lacks the manpower to do that, and this would force him to hire someone just to get stuff done, and therefore, people he'd ordinarily reject, he'd have to take a second look. And unlike the mostly fuss-free management he does now (or his second-in-commands), he'd really need to have someone to budget, manage, cajole, teach these folks so they could get stuff done.

No comments: