Fog Creek

1. Why Hire the Smartest Programmers?


Learn how hiring the best programmers benefits the whole team and how they can make 10x the difference.


Think of what a programmer is doing. Every single line of code that a programmer writes involves several decisions. You have to decide what line of code to write and then you have to decide, you know if you’re calling a function what are going to be the arguments to all of those parameters. If it’s an If statement – that’s a decision. And every single one of these decisions is sometimes a judgement call, and the smarter you are the better the judgement call is going to be and the more likely that code is to work.

There’s an aria in Mozart’s The Magic Flute, called The Queen of the Night and it’s sung by a Soprano who has to, I think twice, hit this high note called and F6. The average Soprano cannot sing this song, they cannot do the Queen of the Night at all, ever. And I think the same thing happens in software. You want to hire programmers that can reach the high notes, that can do the really excellent achievements and that come up with great ideas, that come up with great designs that maybe the average programmers would never come up with in a million years.

Another thing that programmers want to see is who they are going to be working with. And when they’re trying to decide whether or not to take your job, or the job offer at Google, or Microsoft, or whatever shiny company on the hill is making them an awesome offer, they’re going to be thinking about who they are working with. And that’s one reason to only have smart people in the company, it’s if someone feels like they’re going to be coming to work and the other programmers that they’re working with are idiots, they’re going to write bad code and they’re going to have to make up for it, or if they’re just sort of unpleasant people in any kind of way, then the truth is that makes a less attractive workspace. So one reason to hire smart people is because they’re smart and the other reason to hire smart people is because smart people want to hang out with other smart people and they want to have intelligent conversations and they don’t want to have to clean up someone else’s bad code. Very few programmers actually just want to be the superstar programmer in a team full of idiots. Most programmers would prefer to be a superstar programmer in a team full of superstars.

There’s a Professor at Yale University, Stanley Eisenstat, who teaches a course called Systems Programming and it’s considered the sort of weed-out sophomore course in Computer Science. He gives his students a lot of programming assignments. I think just about every week, there’s a pretty major programming assignment to be done. The programming assignments, just to give you some idea, are things like: write a command-line shell for Unix, write a macro-expander, write a compressor using Lempel-Ziv-Welch compression. And each of these assignments, he gives them every year, and he gets a whole new batch of CS students that come in and have to work on these problems. They’re all done in C. And, students started complaining after a while that this course was just taking way too much time. And a lot of students went to the University Administration and said ‘you know for Eisenstat’s class I have to spend like 40 hours per week just on the programming assignments, and that’s way, you know, it’s disproportional to any other class.’ And Professor Eisenstadt said to the Administration ‘well this is true for some students, but other students seem to be able to do this in a lot less time.’ And the Administration said to him ‘well, prove it.’ And so he started asking the students to keep a log of the time they spent on each assignment. And so the students, when they do the assignments are also required to tell him how much time they spent on that assignment, on that particular programming assignment.

And the data set he got is extremely interesting, because what he has here is a bunch of students, roughly, they’re all Yale University students, so they’re all very smart right, and they’ve already sort of pre-selected, and they’re all doing the same programming assignments. There’s like literally, there may be 30 of them one year, all writing the same Lempel-Ziv-Welch compression algorithm. And some of them do it in 4 hours and some of them do it in 40 hours. And I took at look at some of his data and did some analysis of it and one of the interesting things that I found is that there’s no correlation between the amount of time they spend on a project and the grade that they get. The grade of a project is also completely objective, it’s done by a computer program that runs and tries a bunch of different inputs and gives you a completely objective grade, so there’s no human intervention in what grade you get. And yet, there is no correlation between the quality of the code and how long you’ve spent working on it. And when you think about it, it says something really interesting. It says that even among smart programmers who are able to complete a given amount of work, the amount of time it takes them to do it can vary by an order of ten. And that’s pretty extreme. The programmers that I want to hire are the ones that take maybe a tenth of the time, rather than the ones that take ten times as much.