Interviewing Notes

I've just gone through the grueling process of finding another job. You know the standard procedure. Put in resume, get phone screened, suit up for a real interview, and finally pray for an offer from a company. It's really a terrible experience, like dating. There are a few things that irked me about the whole process, places where we can improve upon as an industry, and things that I swear I'm never going to do if I ever get to interview another human soul.

  1. Brain Teasers - Whoever invented these must have really liked pain. The same amount of pain as shooting yourself in the foot and using morphine once you get shot to shoot yourself again. It's such a terrible way to test anything, I'm not really even sure what you gain from watching someone solve a brain teaser. Instead, I sit there sweating, frantically hoping an answer blurbs out that is somewhat correct.
  2. Stack the Interview Team with People who LIKE People - Computer Science isn't exactly known for our... social prowess. However, there are still tons of socially normal and adjusted people working in these companies. Make sure everyone on the interview loop knows how to make people feel comfortable, knows how to read people, and talks in manner that people can understand. I had one interview where the interviewer spoke so fast, and he never took a breath that I couldn't even understand the problem he asked me to solve. When I asked clarifying questions, he breezed right past the answer. Within the first five minutes of the interview, we were talking about different problems.
  3. The use of algorithmic questions, e.g. write a binary search tree - I always assumed they tested for intelligence with these questions. Now that I'm a bit more mature, I see they simply test to see if someone did their homework before going into the interview loop. I still think they are useless, but maybe testing for preparedness is a good thing? On a side note, anyone getting a PhD, make sure you know dynamic programming cold. Every single big company asked me a dynamic programming question.
  4. If you have the luxury, make sure at least one interviewer on the loop has the same background as the candidate - I don't know why some companies, who had compiler engineers, interviewed me with people who knew nothing about compilers. When it got to the question of what did you do in your past, the interviewer had blank stares because they didn't really get what was going on. I don't blame them at all, few people in the world really know compilers. But I think this is probably a luxury few companies can afford.
  5. Have a philosophical / judgement test interview - I never thought I'd appreciate it as much as I do, but I went into a set of interviews asking to see the engineers code. I just wanted to spot check the quality of a random engineer to see if the engineering culture produced high quality code. The discussion somehow got into a very philosophical debate about what is good code, how do you judge code, how do you balance code quality versus ship time, how does that affect team dynamics, etc. The company was awesome enough to show me some code and we discussed their code for an extra 30 minutes, which gave me MUCH more insight into their engineers than any standard interview ever could. I feel like this should become a standard part of the interview process.
  6. Startups have real problems - The interview process at startups feel so much more real than the ones at big companies. Startups have problems they need to have solved yesterday. Big companies have the luxury to pull you through a dog and pony show. It feels like startups have to focus on real problems and hire accordingly, e.g. they have very little leeway in teaching new people. Big companies hire for brains, not the ability to solve problems, with the result being lots of smart people but not necessarily the most effective. Both approaches work, look at Google who institutionalized the hire for brains approach.
  7. Breadth vs Depth - Startups look for breadth, you will do everything under the sun, including talking to customers. A big corporation shields you from those parts (for good or bad depending on your point of view). I like to break my brain every few years, so jumping into a whole new area is exciting to me. Universities seemed to have figured this out as well with the Professor Sabbatical. Every 7 years, you're supposed to go somewhere else to learn something new to keep your brain sharp. At the moment, it makes me worry about people who stay at a company for 10+ years, but I've seen evidence to suggest it doesn't really matter (Good to Great, my own boss at Adobe and Michael Franz). I still don't have a solid opinion on this yet.
  8. People are our core asset / We give lip service to people are our core asset - There is definitely a way a company approaches interviews that gives credence to this. As you walk around the company, just look at what kind of hardware engineers are using. You can tell by the interviewer's demeanor. Are they just here? Or do they care enough to really try and find good candidates. It irks me when I see an interviewer half ass the interview itself. I can't imagine what everything else looks like.

Take everything here with less than a grain of salt - I haven't done enough interviewing to make a very solid opinion. Nor have I experimented enough to try different strategies and actually evaluate how the candidate turned out. It's also a numbers game. We as an industry just don't have enough time to really sift through thousands of resumes to find one person. I just wish there was a better approach to finding people. It's an important problem and probably something I'll be thinking about for the next 40 years.