Hiring Engineers, a Process
hueniverse.com
hueniverse.com
I would never, ever hire this guy. With his hubris and self-centered worldview there's no way he'd work well with a team, and with his apparent aversion to writing code under any circumstances other than inside his own delicately-crafted bubble, I'd have serious doubts about his ability to hit a deadline.
Nor would I trust him as a manager. He walks out of an interview (multiple!) because they asked him to code (how dare they), then interviews the guy who responds to (an incredibly ridiculous) code test with a jokey response? Sounds like a great way to make friends, and a terrible way to find job candidates with strong skills.
Even if he was the greatest programmer/manager in the world, unless you're looking for a solo developer who doesn't need to produce within a given timeframe or a manager who values a "cold call with attitude" over a first-class résumé, you're in for a world of hurt.
"I hate technical interviews and I waste the recruiter's time because I can't be bothered to write a little bit of code in an interview. But when I hire I don't want to read resumes, just code, well, BECAUSE"
Talk about being a self-centered, idiosyncratic prick.
Thank you very much, but this is one thing I won't accept in a job.
Assuming that Credit Suisse surprised him with the coding section of the interview, I can't necessarily fault him for walking out, because at that time, he realized that he didn't want to work for that company.
The response to the riddle is arrogant. So you don't like riddles, that's fine. Extend the same courtesy to the interviewer that you would want to see as an interviewee; if you don't want to work there, politely thank them and leave.
Asking to see open-source contributions is fine, but I don't agree with the idea of giving somebody homework. They could easily ship that work out to a friend or hire a cheap contractor. More importantly, it's the company investing almost nothing in the interview process, and yet asking the candidate for a substantial amount of return.
During my interviews, I have candidates pair up with team members and work on code. This is subtly different from homework, in that my company invests as much in the interview process as the candidate, which pays off as members of you team get a test-drive of what the candidate will be like on his first day.
I had the same initial response to the tone of the post; I thought it was a little self-important sounding. But then I reread it, and a lot more of it made sense on the second read than the first.
This doesn't happen very often, but every once in a while I get one of these "oh we're so interested, you're so great, you did so well in the interviews ... <silence on the line for 3 weeks>".
Or, when I bother to write you a cover letter, you can bother to write me back 2 sentences, even if you don't want to hire me. "I'm too busy" is not an excuse. I'm busy too! If you can't take the 30 seconds to copy-paste a nicely written canned message and edit it up to let me know you want / don't want me, then you suck. It's just common courtesy, and you're not exempt from it.
You also can't pressure me to make a decision once you've made an offer. I'm going to shop around, just like you shop around. You probably don't have a hiring emergency for the one junior position you're hiring me for, so shove it. Or just hire someone else, but quit calling me to pressure me. I understood the first time. I almost fell for this when I was fresh out of college.
You also really shouldn't be claiming IP rights on unrelated things I work on out of office. That's my business and my work, and I shouldn't need permission from you to own it myself.
Where is the decency? I see this post as a reaction to that frustration.
If I had to choose between hiring someone with an attitude or the kind of sheep that will jump through pointless hoops I think I prefer to gamble on the former.
I recommend reconsidering "culture fit". The "culture fit" meme is poisonous. Mostly to the profession, but also to you, because it'll cause you to eject people who would be solid performers, eventually in favor of prima donnas who will underperform, feel no ownership of their work, and use your team solely as a stepping stone.
If you're convinced that "culture" matters, find a way to distill it to the culture attributes that directly implicate job performance. But then make sure those attributes don't exclude whole classes of life circumstances, like parenthood.
PS: I interviewed at Bloomberg about 10 years ago and enjoyed the experience immensely. I got hammered with concurrency and distributed systems questions; everyone who talked to me was smart. Maybe it depends on the group you're talking to there.
I once interviewed an otherwise brilliant developer that was militantly anti-TDD and anti-pairing, both of which are attributes that both myself and my team considered to be essential parts of the business of building software; working as a part of an engineering team is about more than just writing code.
Considering cultural fit helps you avoid hiring prima-donnas that are unwilling to be a member of the team, and it's also a good way for a candidate to know whether or not they will be happy working with a given company.
That kid wouldn't have been happy working with us, and the team didn't want to work with him. He was a competent developer, but not a good fit for the culture of the team, and not hiring him on that basis was a good decision all around.
1) [not directed at tptacek but a comment in general] I really, really detest all this use of the word culture when it is nothing more than clique behavior from high school wrapped in some passive aggressive defense. We get it, you want ego boosting over getting stuff done and won't hire old folks (35+) or people different from you. You care more about drinking buddies than actual friggin finishing and going home to real friends and family to recharge. Real culture is enriching and amazing in its diversity. You are calling a Yugo your Ferrari.
2) and prove in court
When I'm in Japan, I'm still very American, but my sense of personal space has changed because it works differently in Tokyo. Likewise, I notice all kinds of details that were completely invisible before, but that are important in Japan.
This doesn't mean any of my fundamental beliefs needed to change to suit Japan, nor does it mean that I'm entirely satisfied with the way the Japanese run things, but I've managed to find a niche for myself where I can be happy without driving everybody around me too crazy.
Other people have had more or less luck. Some people just adore every aspect of Japanese culture and never want to leave, and a great many more that end up either going home, or living a bubble of foreign friends and bars in Roppongi. I'm somewhere in the middle.
When I think of cultural fit at a company, I think of the same sort of process. You either identify with the evolved culture and practices of the company enough to be happy and productive, or you don't.
If you don't fit in, that's not a bad thing. It's the same as coming to Japan and discovering that you really don't belong there after all.
Do you release that's probably 90% of engineers out there, and maybe 95% of the good ones.
You can work and make great software without using heavy handed processes like TDD and Pairing, which in my opinion it only helps junior/inexperienced developers a bit, but hampers the productivity of the good ones.
But yea, it seems that the place wouldn't be a fit for him, but there is no need to call him a prima dona. He was right to stick with his guns, and you guys stick with yours, but keep in mind that you are limiting yourself to a very small subset of engineers that both like TDD/Pairing and are good at what they do.
Prima-donna programmers tend to be vain, demanding, and incapable of receiving or acting on constructive criticism.
More often than not, they're also not particularly productive, either.
Whether or not you do TDD is unrelated to any of those personality traits, and I've interacted both with excellent developers that had a myriad of reasons to not test, as well as horrible prima-donnas that were religious about TDD, but only if you did it the One True Way That Only They Could Understand.
As someone who's hired hundreds of people and worked to build three startups, I am increasingly of the opinion that it's critical to carefully study the hiring practices of companies that appear to employ a consistently high level of talent, like Google. And Google's talent base was one reason I thought the employees of my last startup would be happy there, and argued (to me) in favor of an acquisition by them. (Virtually all of them are still there, too.)
That said, entrepreneurs should take with a grain of salt any definitive pronouncements about hiring practices. In my experience, hiring and organizational design are not solved problems yet, by any means.
The alternative is bug fixes and inceemental tweaks and improvements to existing systems. These are often of a more technical nature, but they are also 90% about understanding existing code, which means that the candidate would need copies of the existing code base. I'm not sure I would be comfortable dishing that out to random strangers, which job candidates essentially are.
How do you do this in practise?
* We test a lot of web applications, so we rigged up a sacrificial web app that we run on random EC2 instances and have candidates take an hour or two seeing what they can find in it.
* We test a lot of crazy custom client/server stuff, so we built a client/server system with a custom protocol that we have candidates reverse and then attack; we tried to calibrate this so it'd take less than 2 hours to beat.
* We write a lot of fuzzers, so we have candidates write a fuzzer for a file format.
Key attributes of good practical tests in our experience:
* They can't take too long to complete.
* They have to relate somehow to the actual work candidates would be doing within the first six months.
* They have to produce results that are objectively comparable in some fashion to those of other candidates, so we can learn from the trends. This is probably the most important thing I've learned about hiring in the past year.
We'll probably swap the fuzzer challenge for a memory corruption challenge sometime this quarter, because the fuzzer scores high on the first two attributes and low on the last.
I'd love to do a crypto challenge (mail sean AT matasano dot com if you'd like to do a bunch of crypto challenges, by the way; just say "Thomas told me to mail you"), but they score low on the first two attributes.
So if I was doing engineering interviews again (About 10 years of my career were as a full-time dev), I'd probably look to:
* Taking a time-inefficient algorithm and making it faster
* Taking a space-inefficient system and making it tighter
* Writing an importer for a specific file format
I agree that actually asking candidates to jump in and produce code for issues in Github is a losing strategy. In particular, because you're making it unnecessarily hard to learn from your hiring decisions; when you look at someone who is kicking ass on your team, can you go back to the hiring decision that selected them and see whether they outperformed or underperformed a metric and adjust the metric accordingly? If not, your hiring process is suboptimal.
Where I'm having a hard time seeing this play out, is for a business that has an in-house software platform supporting it. Or for shops that develop and maintain a products.
I do not care about resumes.
If I get on the phone with you because of your cover letter and haven't read your resume, I will probably never read your resume.
Regardless of whether I ever look at your resume, it's very unlikely to have any impact on our hiring process. We use practical tests and, to a much lesser extent, 1:1 interviews on concepts; the practical tests have been so valuable that we're moving towards doing more of them and less subjective interviews.
Your resume fits almost nowhere in this process.
on one hand: a dev cannot put their thoughts about a problem set into code on a white board.
on the other hand: a dev answers all problems with code on a white board.
i find it hard to believe that taking a dev away from their desk and providing a whiteboard with marker is so different that it would make one become a "bad developer" incapable of solving a problem.
i find it easy to believe that the dev has just not practiced coding on a whiteboard. therefore, when asked to do so, cannot bc of to anxiety from not practicing.
if one can write english on a whiteboard and not get anxious, then why would a professional developer get anxious about writing c++ or java on a whiteboard?
like i said, i go back and forth on this when it comes to interviewing people.
But a candidate is going to have to bend himself somewhat towards a company. If hired, adopt their coding standards, source control, and bug reporting systems, at least. A candidate who refuses to bend at all during the interview process is a big danger sign.
Asking someone to code for a non-coding position is dumb. Asking someone to code on a piece of paper is not. The interviewer should be forgiving of silly syntax mistakes, of course. If you can't remember the order of arguments to strstr(), that's okay. If you don't know strstr() exists, that's a problem.
* Don’t ask those who interviewed the candidate before you what they think. Form your own first impression.
For some reason, some people feel the need to grab you before stepping into an interview and gush about the candidate "This person is AWESOME! I'm really excited about them!", which, if you aren't cognizant of it, can heavily skew your evaluation of them and basically destroys the point of having multiple people interview a candidate.
The lone exception might be if a candidate is so unbelievably bad that you want to save everyone's time by ending the whole thing early, but hopefully your screening process is good enough that it doesn't happen often enough to worry about.
Let's say we're interviewing someone for a role with HTML5, CSS, and JavaScript. If the first interviewer ran out of time before getting to JavaScript, I should probably start with that.
Or, if an interviewer noticed any red flags, we can use the following interviews to gather more information. If I was told that a candidate complained loudly about being overworked, then I could spend more time discussing time management and the way he works. Maybe he legitimately was overworked, or maybe he's a complainer, or not very good at prioritizing his work.
Finally, it helps if there's at least one recruiter or a manager that you can give real-time feedback. Recently I was on an interview loop of a candidate for a very specific role. I quickly realized she was a terrible fit for this position, but she'd actually be perfect for a different one. I went to our recruiter and explained the situation. He was able to reorganize the schedule so that the candidate spent the rest of the day interviewing for the right position. If we had just continued without any feedback, it would have wasted a lot of time and we would have missed out on a great candidate for the other role.
I know I am not the target demographic for this company as I am no coder and I don't really have any interest in contributing to open source development, even if I were a coder. Surely there are other/better ways of initially judging potential new recruits?
As far as I can tell the author is an open source advocate so I guess I wouldn't fit into the "culture" but ignoring those who aren't as into open source as the author would exclude a number great of people who might contribute greatly to the company (and a missed opportunity to convert them into open source advocates/fans/contributors).
Is there some kind of signing bonus if you make it through the interview process and get an offer? I think there should be.
More seriously, it sounds like they go out of their way to avoid giving their applicants any work someone might profit from.