Showing posts with label recruiting. Show all posts
Showing posts with label recruiting. Show all posts

Sunday, March 15, 2009

Hiring Developers

I had a fun exchange on Twitter recently with @jamesiry and @codemonkeyism about how to hire developers. I think my thoughts on hiring are a lot different than most folks. So I thought it would be a good topic to expand upon.

First off, I must admit a lot of influence from Steve Yegge on this topic. For me, that was one of those times when you read something and you find yourself constantly thinking "yes exactly, I know what you mean." In other words, it was very consistent with my own experiences and opinions, but better articulated than I had ever been on the topic.

Otherwise my opinions on this matter are partially from my experiences plus a healthy dose of my flavor of logic. I am a big believer in being skeptical when people make statements based on their experiences. This is a common mistake, maybe the most common logical error that people make. Talking about and learning from your experiences is a good thing, but if you want to make a generalization, then you better have a lot of experiences to draw from. That is not even good enough, as your experiences need to be quite varied. Small sample sizes and skewed samples both lead to flawed conclusions.

Ok with all of that out of the way, I think the best approach to hiring developers is to take a very engineering-centric approach. There are things that a (software) engineer does that a scientist does not worry about. An engineer never assumes they will get the best solution on their first try. Instead they plan for mistakes. They plan for ways to measure these mistakes, so they can make adjustments and know if their adjustments are effective. Engineers also plan for failures.

So how does this translate to hiring? First off, you have to realize that a non-trivial fraction of the people you hire will be mistakes. You will get it wrong. In my experience, you get it wrong around 25-50% of the time. That's just my experience, so you should be skeptical about that number. However, it is not the exact number that matters. What matters is that if you think you will rarely get it wrong, that a bad hire is an exceptional event, then you will wind up with a lot of bad developers and it will cripple you.

This assumption can be hard to swallow. A lot of people will just say that this is wrong. However, once you get over this point, then everything else is downhill. If you know that you will make bad hires, then you will instrument your system (in this case your development organization) to check for these events and react to them. You quickly realize that it is key to make this assessment quickly. Do it in three months if you can, six months at worst. Assign a mentor to new hires, carefully pick their first project, whatever. Remember that a new hire is worthless for several months anyways, so the only important thing they can do during that time is prove they are a good hire, not a bad one. If you hire somebody because of an immediate need, you are running your organization poorly -- bring in a hired gun (contractor.) Anyways, it is also very important to make sure the new hire knows that this assessment is going on and that possible results include being laid off or a different position.

So all of this is the end goal, if you will. It is all after the hire. What interest most people is the before the hire process. Again with all of the above in mind, hiring is straightforward.

1.) Attract talent. This is hard. You have to get people to want to work for you. Maybe you hire recruiters. Maybe you use word of mouth. Hopefully you will try to create a good environment and culture for developers. As much as he annoys me, I would still recommend reading Joel Spolsky's ideas on this topic. I think Joel is totally wrong when it comes to the hiring process (actually on most things), but that he gets a lot right when it comes to creating a good environment for developers.
2.) Filter. This is easy. Resumes are the standard result of attracting talent. You can do dumb filtering, like insist on some type of degree, some number of years of experience, some knowledge of a particular technology. Or you can do something more subjective, like look for people who went to certain schools, worked for certain companies, or in certain environments like startups, consulting, enterprise software, whatever. Filtering can get more elaborate. Maybe you have a phone interview and ask some easy questions that you are sure any decent developer will know. Or you send them a similarly easy test of some sort. I am not saying that these are all good ways of filtering, just that they are options.
2a.) But what about traditional interviews? I am not a believer in the traditional, technical interview. It is a huge waste of time. Most people like to give candidates some tough programming or logic problem. Or maybe they go for the open ended design question or puzzle. Here is where I most concur with Stevey Y. All these typical interview techniques do is identify people who think like you. If you are really smart, then maybe this is good, but there is a good chance that you are not really smart. We all think we are smart, it is impossible to be objective about this. Microsoft and Google are both famous for their tough interview questions, but it is ridiculous to think that they are unique in the type of questions they ask of candidates. It is just the opposite. Every software company asks the same kind of questions and they still make a lot of bad hires.
3.) Personality Litmus Test. This is also easy. The one thing you can usually accurately ascertain from an interview is "will I be able to get along with this person?" and "will my team get along with this person?" If the answer is no, then do not hire them. You might think "but it is ok to hire a really smart person, even if they are hard to get along with" but then you are forgetting that you are not very good at determining if a person is smart or not. So just take that out of the equation. Remember the bad apple studies. If you think there is even a shot that somebody is a bad apple, cut the interview short and send them home. Note: I am assuming here that you are not a bad apple, hence that you would not get along with one of these types.

And that's it! If the candidate passes your filters and you think you can work with him/her, then make an offer. Remember that there is a good chance you are getting this wrong, and plan accordingly.

Tuesday, May 29, 2007

Recruiting

Does anyone enjoy recruiting? Probably not. I've done a lot of recruiting in my career. I've read a lot of resumes, conducted phone screens, and of course interviewed countless candidates. After a while, you think you've seen everything. But every once in awhile, somebody comes along to prove to you that you haven't. I just had an experience like that.

The candidate started off harmlessly enough. Let's call the candidate in question Paul. Paul's resume came to me from a recruiter. His resume was kind of interesting. He had done a nice mix of Java and C++. His overall experience was ok, nothing too unusual. His education was also solid, if unspectacular. I see a lot of Java developers who don't know anything but Java, so the fact that he had done his share of C++ attracted me to him. I figured, what the heck, let's setup a phone screen.

The phone screen went ok. He clearly was unprepared for it and knew nothing about the company that was interested in him. That's a huge negative in my book. If somebody from a company is going to give you a call, you should at least do five minutes of research on the company and read their website. Now if the company doesn't have a site, ok, fine. Or if you read it and you can't comprehend it, that's fine too. But do your homework.

Paul wasn't the first candidate who had not done his homework, so I pressed on. I was immediately struck by his arrogance. He wanted me to sell him on my company before he would do anything else. Again this was unusual, but I usually give a "here's info on the company" diatribe at the end of an interview, so I just went ahead and did it at the beginning.

As things became more technical, Paul again did ok. His answers showed decent experience, though they were definitely lacking depth. I pushed for more detail on a few things, and again got mixed results. I moved on to a design question, and he actually did pretty good on that one.

So at this point, I had formed an opinion on Paul. He was a definite "maybe." I don't like to bring maybe's on-site. Bringing a candidate on-site meant a lot of people spending a lot of time to interview him and then discuss the results of the interviews. Luckily, I have an extra tool to use for maybes: a quiz. It's a simple quiz on programming fundamentals. It's often hard to drill down to fundamentals over the phone. This was the case with Paul, so the quiz was well suited for him.

The quiz is automated. I give the candidate an email address. They send an email to it whenever they feel like taking the quiz. It immediately sends the quiz back to them. They send their answers back. Everything is timed of course. That's key actually. The quiz is easy, but the speed that people are able to answer easy questions says a lot about them.

I told Paul about the quiz and asked him if he wanted to take it. He said ok, so I sent him the instructions for taking the quiz.

Last night as I was getting ready to go to bed, I received an email from Paul. In his email he said that he didn't have the time to take quizzes for every would-be suitor. He felt that his degree from an "acclaimed" (his words, certainly not mine) college should be enough to prove that he doesn't need to take a quiz. So if I wanted him to take the quiz, I would have to pay him $85.

I found this so funny that I almost didn't believe it was for real. I must admit, I have never heard of a job candidate who would demand money for being interviewed. What arrogance! What audacity! It's still almost too much to believe. And his reasoning? Because he went to an "acclaimed" college.

I know a thing or two about educational snobbery. I have been guilty of it myself because of where I went to college. I've never gone this far. For the record, Paul had a bachelor's degree from a public university. I won't say which one, but it's a huge school with over 50,000 students. There's a good reason why his education didn't jump out at me as anything special when I read his resume.

Anyways, I let Paul know that I would pass on his offer and wished him well in his job search.