About the interview room series
The posts about our interviews seems to have strike a nerve in some people. So I thought I would respond here to all the comments at once.
Some stats about our hiring process:
- We worked with 2 recruitment agencies, looking for a 5+ years experience in C#/.NET, Server Side work, OSS experience / NoSQL experience, multi threading, TCP/IP, REST…
- We got 23 CVs to review, and did phone interviews for most of them.
- We actually interviewed 9 candidates, had 3 potential hires and made an offer to 2 of them.
Unprofessional – I don’t know about you, but a large part of running a business is finding good people. And having people that are severely under qualified show up is a problem. In the same way that I talk about problems in code or silly patterns or horrible processes, the part about hiring people is just as important. I am quite careful about not giving away any details, but that is about it. I’ve had people comment that I am gloating. But nothing could be further from the truth, if anything, those are mournful posts. Because if that is the state of the industry…
Those are insulting questions – a few people said that they thought that the questions were insulting. Look at the numbers, we had two thirds of the people fail to answer them. I had a candidate with 13+ years of experience who looked quite promising get up and leave mid interview because the candidate couldn’t solve a string sort problem with full internet access. I had people submit code that made my eyes bleed. And I think that people don’t understand something about those questions. The coding questions won’t get you hired. The coding questions are there to keep you from getting hired. The assumption is that you should be able to solve those questions blindfolded while dancing the cha-cha and typing with your left earlobe.
Due to the large number of people who can talk the talk but not walk the walk, I am assuming all candidates incompetent until proven otherwise. And yes, I absolutely agree that this is a sad state of affairs.
Those are not relevant questions – “In these days on the Internet, I'm not at all sure I do care someone knows how to sort a string.” Well, we are building databases, we actually care quite a lot about things like sorting. But leaving that aside, we don’t actually care how you do the sorting. Most candidate uses List<T>.Sort, and that was fine. But I think that the key point is, if you have internet access and an hour, and you can’t implement a sort algorithm, you don’t get to work here.
You should be mentoring them, not discouraging them – I think that someone just missed a turn in the road to reality. I didn’t show up at a Teach Kids to Program and laughed at their inability to do three stars code. I was conducting interviews for a senior position. That meant that I was limiting candidates to 5+ years experience. Actually going through the interview process cost us. A lot. It effectively shut us down for a day or two, and took about three full days just to do the interviews. There is a serious cost here.
And having people that are drastically unqualified show up and take our time is a very costly waste. Look at the number above. Out of 23 people, I posted about 3, because they crossed all the limits that I can think of. In contrast, we had a bunch of other people we talked to or even interviewed that didn’t make the cut for being potential hires. They weren’t bad by any means, but they just weren’t what we were looking for.
I am not sorry, if you don’t show up ready to answer stuff that a first year student should be able to, you are cheating. Certainly me, and probably yourself. At that point, I’m going to stop wasting my time and move on to more productive avenues.
Comments
Same experience here. Interviewed six people for a senior developer position, and only one of them was able to solve the fizzbuzz test: http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html
After that we asked candidates to submit solutions to simple questions beforehand. That got us much better results.
Wow Ayende, this is one of those times where I really disagree with you and I don't even understand your drastic posh position. Short background, I am an Architect, 10+ years of experience and I also manage and mentor people, so I can say that I know a bit about what you are talking about. Well, first of all you can interview your candidates in the way you prefer, it's your company and they will be your employees ... so it's up to you honestly. What I really disagree it's your posh attitude in writing down this post. If you believe that because I don't know how to sort a string in C# (considering that I have works with probably 10 different languages) I am cheating ... well dude you should consider that you are working in one of the thousands LOB sectors of IT, and trust me, in some other situations you may never wondered how to sort a string, even because I will just Google it as my brain should remember things more important than methods provided by a class ... I am not discussing the way you screen your employees, again, it's your company and it's your business, but please don't say things like that: "I am not sorry, if you don’t show up ready to answer stuff that a first year student should be able to". Do you still remember how to calculate sin and cos without using a calculator?? Honestly I don't because I got my degree 10 years ago and I don't feel incompetent at all ... and trust me, I am not. Please come back to the normal Ayende and remove this "posh" smell on your posts. An affectionate reader ...
That main problem I can see is that you hiring through recruitment agencies You are an open source project, why aren't you hiring from the pool of developers that are already engaged with your project? If you aren't talent spotting people from your community, or you don't have talented developers in your community then that is your problem righ there. Talent from recruitment agencies is always going to be scraping the barrel. Most of the candidates probably hadn't even heard of your project and are therefore not the type of candidate you are looking for.
Your problem isn't the quality of the candidates available from recruitment agencies, it is your inability (or unwillingness) to recruit the people from your community.
I completely agree with your points. It is a right to require senior positions, and evaluate them accordingly. And I agree that some simple coding exercises are "tests" in the proper meaning of our world: if you can pass it, it doesn't mean you are good, but if you can't, for sure you are not good.
In every company I've done interviews, my bosses were crazy because of the number of people I've refused; but once they started to get the good ones, they began to trust me more and more.
In the end the job market is a market: everything is a trade-off between quality and price, and if you need a Ferrari and you can pay for it, I don't see the problem.
My first question in interviews is: what is the difference between a virtual and an abstract method? You can hear the more interesting theories...
Sadly I would like to conclude how nowadays many so-called architects are not able to code even the simplest code... But maybe they are very good in speaking, so real and tangible exercise are the only ways to discover them!
I agree with almost everything. One point though: I am very sceptical of anything that people say is a "red flag". Any single failure (to know or to conclude something) can be a fluke. Triggering a "red flag" on a single (severe) failure can be very wasteful as it can get good candidates sorted out.
Invest 5 more minutes and give them multiple chances. Little additional cost and much more protection against "spurious failures". There are all kinds of reasons why someone might severely screw up any single question or assignment, and still be a great candidate.
I agree with you and think you're right to post this so that some candidate somewhere might realise why they're still looking for a new position after several unsuccessful interviews.
It's the job of the interviewer to bring out the best in the candidate. I'm sure you'll agree. But if a candidate refuses to "jump through hoops" then what the heck do they expect do 9-5 other than "jumping through hoops".
@raffaeu - I wouldn't expect someone to know how to calculate Sin function without a calculator. But if they say "I've no idea or understanding of what forces are in play" then they're a cargo cult type. I don't know the answer off the top of my head but I think it's something to do with the ratios between two lengths or something. I'll show you that I understand the principle.
Raffaeu, If you consider someone who can't do basic tasks like that a developer, I wish you all the best, but I don't think you'll be able to get anywhere. Remember, this is a test where you have the entire internet open to you. So yes, if you don't get to do that within a reasonable time frame, you aren't qualified.
This isn't an issue about remembering algos, this is an issue about completing a pretty basic task, and people horribly failing in it.
Jack, We currently employ three people who came to us via the project. But we want people who can work in our offices, and that is a different story all together.
The hiring process will always be a matter of taste. But I mainly agree with the content of this post.
Of course, stress and anxiety come into play during the interview. Therefor I always take the time to make the candidate comfortable with the situation and make sure he loosens up. This way you also get the see the social skills of the person in front of you.
I believe the hiring process should be inline with the mission and vision of the company. At least the candidate should know what type of company and job he is applying for. I would also like to be sure that a senior developer knows how to solve problems using the resources available to him or her.
While I might not necessarily agree with Ayende's choice of interview questions, I certainly understand the difficulty in hiring the appropriate, even best candidate for the job.
I came to dislike mundane trivia questions and memorable coding puzzles. Yes, there are many programmers who can't program (i.e. FizzBuzz), but if you give a good candidate the FizzBuzz test when he's never heard of it before, they will assume there's a catch -- there's no possible way a serious job interview would require writing something that has a for loop and 3 if statements!
When I interviewed for my last position, as a coding challenge I was given a suite of failing tests, and was asked to make them pass. I though it was a great idea, and have since adopted it myself. As an interviewer, not only do I have to come up with good, readable tests for the candidate to understand (they might not have any unit testing experience), but also it's an opportunity to show how things REALLY work, if they are accepted for the position. I mean, you do write tests, don't you, Ayende? :)
I suggest: pick an easy domain which requires some design, come up with a bunch of failing tests/specs/scenarios, and have the candidate implement them. You could also pair program, if they don't get the process, no need to leave them alone in the room for an hour.
My 2 agorot.
Igal, A) A candidate has the chance to ask questions B) You are way overesitmating the abilities of the people who failed those tasks.
Ayende is a very good programmer. Very few people are very good programmers. Some still think they are. Ayende wonders why not all people are like him. That is worth a story?
Some may call you arrogant or posh. And I could agree on that.
I always worked with mediocre people. I do know that this is might appear as a problem. But it is not limited to any particular industry. Everywhere MOST people are just not excellent. And it very seldom that excellent people meet. And when they have excellent technical skills they might often lack social skills. Excellence includes also always knowing the basics and being able to explain them.
If you really think you discovered something worth noting, you are just showing your problems:
Your total lack of knowledge how skills are distributed in society. Your total lack of knowledge how people overestimate themselves when applying for a job. Your total lack of ability to compromise with people's individual stories if you see potentials even when people lack some basic skills.
Ayende, it seems you are a very inexperienced recruiter. Face it.
You found two people and you are still complaining. 2 out of 23 is quite okay for searching for a senior.
Daniel, You. are. kidding. me. right? Do you really think that it takes a "very good programmer" to sort a bunch of strings?
Oren, as someone mentioned, your main problem is that you're using recruitment agencies. Candidates who come through those are typically below the bare minimum that is often required.
The reason for that is simple - all the good ones are happily employed, and if not, they're probably coming to ALT.NET meetings, where you could recruit. Sure, you might get 1 or 2 people, but those will be the droids you're looking for.
Yes, the candidate has the chance to ask questions, but don't forget - they're under tremendous stress. So it's reasonable to expect them to shut down under all the pressure. I know I have, many times, throughout my career.
People are commenting on the attitude of Ayende, however note that they are indeed applying for a job developing a database system.
I've seen horrible programmers succeed in my line of business because there is room for error. Most business applications are really not quite complex, and require mainly people that are able to translate business rules (which might be complex in the functional sense, but technically aren't challenging at all) into code.
It's absolutely horrifying that people don't grasp what they're trying to accomplish (RavenDB is no forms-application), and indeed, fail at sorting strings. He's not asking for sorting-algorithms, he's asking to sort an array. Whilst I don't know most of the sort algo's out of my head myself, it's only a Google-search away. I know of their existence, and I know how to find & interpret them.
What frustrates me even more now is that, with most major companies in my country, what I've learned is that people are no longer judged by their skill set and general IT-hunger, but by their experience-year-count (weighed against an average including all these sub-par developers). As such, even if you're convinced you could pick up a certain role, you're simply not allowed to prove yourself because "you're a junior that has only 3 years experience". Cynically, funny thing is, 10 years of data-entry-application-experience is worthless in environments like these.
Ayende, no, I didn't say that. I said excellence is also still knowing the basics unprepared and under stress (Job = existence, loan pay-down, food, status). Often people doing education or coaching are very well with these tests btw. Why should I limit your choices by superficial, measurable indicators?
I have a room full of devs here, mixed levels: Junior, Advanced, Senior. I BET I could write an easy (as in Ayende-easy) test that NOONE would pass because I know what they know and what people usually do not know. They still perform quite well in their work. I would not exchange them for A-grade test performers because the social connection is very healthy and people are nice and engaged.
Should I feel superior?
Should I get angry that no one knows what I suppose them to know?
I only questioning your attitude, not the FACT that someone was inapt to solve the string sorting task.
I once did professional assessment for a large company. I had the CVs before and all my favorites didn't get invited due to some standard test like yours. The two remaining were not even able to explain what their last work was ("Something with banking."). But they knew their sorting algos, man, they did...
Perhaps, you are looking for measurable standard coding machines, not so much humans who are problem solvers. People who think out-of-the-box.
Daniel, You keep going around the very simple fact. Given a computer with VS and Internet access, we have had people who couldn't sort strings. There are no hidden traps, no secret knowledge. Just an IDE, a compiler and unlimited internet access to solve a really basic problem.
Ayende is right, period.
Ayende is developing a DB you have to know/learn about sorting, performance and so on.
and let's take it simple, get the bloody source off github and have a look through hand see how it is done . if you really want to work with Ayende you have to research your victim :)
as @sanderd sayd , you should not limit yourself at programmers with 5+ years. interview somebody with 2+ , believe me there are smart people over there too.
Ayende, I think I could finish the task. I was not talking about the task. I was discussing your attitude and my experiences compared to yours. I hope that is okay for a comment in the topic of recruitment.
"The coding questions are there to keep you from getting hired." This is what triggered my response.
You don't want to hire these people and you didn't do it. So all is good. Where is the point in posting a rant this if your great assessment strategy worked out?
So your point is ridiculing them? The recruiting agency? The bad, bad world that is not on the level that you insist on? What are we supposed to think of you? What do you want to achieve with your initial posts about the tests?
Your tone is a bit posh/arrogant and provocative and you create responses that disagree. Don't you wonder that some people dislike your attitude? They don't mean the very test/task itself. You seem to ignore the rest of my statements. That's ok, while disappointing, but no one is forced to discuss beyond his boundaries of comfortable topics.
I like a lot of your work and your posts and hold you in high esteem for being a developer icon. It is not surprising that you also have some areas where you not excel (in my opinion).
“There’s no shortage of talent, only a shortage of companies that talent wants to work for.”
http://flowchainsensei.wordpress.com/nocv/
Is there a reason you're not getting good applicants? This just tells me to expect a grilling:
http://ayende.com/blog/160901/hibernating-rhinos-practices-we-are-hiring-again
Nothing about culture, beliefs, all the soft human stuff.
I used to disagree with the previous posts, but listen people: An hour _with_ _internet_ _access_!. Google, StackOverflow or even MSDN should get you past anything, unless you are competely new to C# or really horribly nervous, but in that case you'll just have to do better on your next interview with another company.
I've had good luck with the whole simpl-ish imprecisely specified homework assignment You let them scope the assignment and tell you when they're ready for the interview. Failure to complete the assignent on time says a lot. You'll see tendencies to over-engineer, under-engineer, coding choices et c - lots to talk about.Have them document their assumptions ahead of the meeting so you can see them as you review the code so that you are armed with questions before the interview. I'm fairly certain you would have a hard time coping with the interview part if you had had a friend write your code or copied it all off the internet.
Daniel, I don't know what your experience is with hiring people. Mine has been that my problem has never been "I can't find people to apply". Mine has always been "I have too many people at the gate". My approach is simple, and is meant to disqualify people as soon as possible. Because the more time I spend on a candidate that isn't going to make it, the more costly it is.
Jon, I got the first 3 employees from the blog. I have been very happy with them. If you care about culture, etc, you can read the rest of the blog. I am quite explicit about all of that there.
Unfortunately, in my experience, there seem to be less and less developers that want to improve. I've been doing this for 13 years and still want to get better every day.
It's a problem that I experience day to day in the LOB world.
If any of you thinks that these interview questions are even about the programming itself, you are mistaken.
What a simple question like "sort these strings" is testing is if the candidate can deduce what needs to be done, type it into google and apply a sane-looking result in his or her code. The fact that some people aren't even able to do that is shocking.
I've seen this happen a lot as well and I don't consider this to be something you should "work around" because these are "mediocre" programmers. It means they are programmers who aren't able to solve a simple problem with deductive reasoning and a bit of internet searching. You will need to hold their hand every step of the way.
I don't think a senior programmer should need to have their hand held.
I think Hanselman makes a good point about the nature of many developers:
http://www.hanselman.com/blog/ImAPhonyAreYou.aspx
You are clearly an excellent, and very high profile, developer, but I wonder if you're not getting quality applicants because they think they'll never measure up to you, so you get the over confident ones. I know I would be very nervous.
I don't understand how people can disagree with Ayende here... he's looking for senior developers with talent. Not being able to answer those questions means is a really strong indication that those candidates didn't meet his criteria. And for those who simply don't like his 'attitude', I mean cmon. What's wrong with developers pushing each other to raise the bar?
Ayende,
to give an answer: I do indeed get too many applications when I hired people. I never said it is hard to find ANY people. It is hard to find capable, socially acceptable, expressive, engaged, verbal, tolerant, versatile people. Technical capabilities are indeed a factor. Depending on if it is system programming, product development, LOB with customers on-site or gfx card driver development the importance shifts a bit. But as long as you are not a one-man-show with unlimited funds others factors are indeed important.
I can teach someone how to sort a string in 15 minutes. Often, I cannot teach someone to treat a customer in a friendly manner in years. I fear the offices I have been, full of grumpy ignorant coders of the 80s who never react to a simple "Hello".
It is obvious you didn't answer one of my questions or even the topic addressed. I was offended/annoyed by your attitude not the test details, I find it odd how you just ignore the nature of my comments. I still don't know what your point in "venting" and ridiculing (if that was your point) is.
I must indeed see though that a lot of technical "nerd" people are not even logically capable to realize that there is something beyond measurable facts. Jon Canning's reminder of Scott Hanselman's excellent classic post is much more the world I live in. Some people are bit insecure yet very capable. Not you indeed, you are very self-confident... So go seek more Ayendes and rule this world with them. That's cool.
Enjoy your day.
Daniel, You seem to be under the impression that I am looking for a best friend in those interviews. I don't. I actually care very little for their inter personal skills. If they have those, great, I can use that. If they don't, that is fine, we have a great place for backend developers and we can shield them from interacting with customers. I don't really care if they respond to a hello, or if they are socially acceptable. This is a development position. I intend to pay them to code. They should be able to do that. Anything else is extra.
By your logic, I can find a really nice, easy going, people person. That person would have a small problem of not being able to read and write, but other than that, he is super cool. I am sure that you can teach reading/writing in about a month or so. So why not go for it, this is a great hire. Think how well the customers will like the friendliness and the smile. Spread the joy around.
Your argument is invalid, because the people I posted about _cannot code_. And the key requirement for their job is being able to code. And I am annoyed by that because they presented themselves as being able to do just that, while they weren't even to complete a very simple task.
Thanks for clearing that up. I think this response is very, very revealing about your attitude and idea of work. You just want code robots (even for seniors). I understand that now. Good luck with that approach.
It's good that there is place for both of us in this world. I think though that people with your attitude and people with my attitude should totally avoid each other in work circumstances. As I do not live even near Israel I did not plan to move to your place anyway so we can rule that out personally. :-)
Just wanted to say "thanks" for this, Ayende :)
Try tripling the salary and you'll find qualified candidates flood in. Paying the average you can only find the average. Sadly in this industry average means gross incompetence.
Daniel, If I wanted a code robot, I would build one. I am looking for talented developers. You seems to be confusing that with the cheerleaders squad
This series feels like American Idol for developers, without the star performance at the end. Just a long line of poor performers that everyone can look down on. The whole thing just feels mean.
I'd prefer a series highlighting some amazing solutions people created. But I'm just a sub-par coder with decent social skills, f-me right?
Not so Xing, watch this:
http://www.youtube.com/watch?v=u6XAPnuFjJc
If you have an interviewee who can't type "how to sort strings in C#" into a Google search field and see that the very first result shows about nine ways to do this and implement one of those methods, no, that person is not a programmer, that person is probably not even competent to perform heavily scripted tech support. They should not have ANY JOB in IT. At all. If that person purports to have five or more years of experience in the field, I wonder how bad they have lied to everyone they know for all of those years (or whether their current CV is the fraud).
It's perfectly acceptable to have a really hard programming challenge (obviously the one mentioned previously isn't that hard) in an interview if the position qualifies the need. However the real challenge isn't filtering the bad ones out, it's getting the good ones to show up.
Ultimately the quality of candidates you attract to interview with you is your responsibility. Complaining on a blog series isn't making the perception of the company look any more attractive to work for. It will deter some good candidates from ever showing up.
Good developers have options. Hiring them is not doing them a favor. If you're having a hard time finding good developers it's because they are somewhere else. That needs to be fixed.
NetFlix engineering blog for example talks about a lot of the distributed systems work. This isn't actually about educating people. It's about making public the kinds of challenges they work on and trying to make the workplace sound very attractive to work at. NetFlix does a lot of these kinds of things to attract talent and raise the bar of who they interview.
If you keep going to the same well, you'll keep getting the same water.
We have a much tougher programming test in our interview process than the one mentioned earlier in this blog series but 90% of our candidates pass the test.
Every employer competes with other employers for the employees at the level they expect to hire.
You have to realize that this blog is very public facing and has a lot of readers. These kinds of blogs hurt your hiring process not help.
There are a lot of different ways to hire and there's no "right" way but I'm commenting based on my experiences going through really bad candidates and learning how to fix that problem. Now we don't have that problem anymore.
To Jon,
I'm aware the effect of monetary incentive. However that only applies when the worker are already paid a comfortable living. Otherwise everybody would have a PHD degree.
I really don't get the angst that people are feeling about Ayende's recent posts. I've also been in the position of having to hire other developers, and it is frustrating to come across applicants that are clearly not qualified for the position they are seeking.
Everyone is blasting Ayende for his attitude, but where is your anger at these so called developers who essentially lied about their skill level? Why is it OK for them to say they're an expert in C#, yet can't code their way out of a paper bag? It's not like he was expecting them to have an encyclopedic memory of esoteric areas of the .NET framework. He even gave them access to the Internet to Google solutions if necessary, for Pete's sake.
The primary expectation I have of my developers is the ability to solve problems. If he didn't know exactly how to sort strings, he damn well better know how to use Google and search for "c# sort strings". My mantra has always been, "Never remember anything you can look up." Worst case is that I would probably give the guy credit if he was able to explain how he worked through solving the problem even if he didn't have completed code.
Ayende is running a business, not a charity. As he stated, it costs money to interview and weed out the wheat from the chaff. It's even costlier if he hires the wrong person. Some of you think that he should consider the intangibles like personality. And what happens when that extremely nice guy isn't able to write code? It may give you the warm fuzzies, but it certainly doesn't help his bottom line.
These posts read like the DailyWTF. It's sad what people try to pass off as senior-level skills. Would you hire a guy to build an addition to your house if he's never used a hammer? Maybe he's a really nice guy? Why should it be any different when hiring for a senior developer position?
Sorry for my rant, but I think the people who are critizing Ayende for being "posh" (I don't think the word means what you think it means) are just not being realistic. Most likely they haven't been in the position of not only hiring somebody, but having to write the checks.
I found the posts arrogant and unprofessional and if people read this blog, it's not surprising to me why you aren't getting qualified applicants.
It's not a question of being a nice people person or knowing how to code. I'm senior enough to know what I don't know, and I want an environment where I collaborate with others. Using each persons strengths to build something wonderful.
I don't want to be micromanaged. I don't want to be belittled. I don't want to be treated as a child or an idiot. And that's how you come off.
That doesn't mean I'm an idiot, it just means i don't want to work for you.
Kelly, As of right now, I have over 5.5 thousands posts on this blog. The great majority of them consist of public discussion on the challenges and tasks that we are handling. I actually have a large pool of people that I can draw on, that isn't really the problem. What I am looking for, and what I got in the end, was talented people with passion and knowledge. The reason for these posts is that people showing up lacking the basic skills really annoys me. And I am fine with someone thinking "maybe I don't make it" not showing up. Because the people I post about (anonymously, mind you) aren't the people I didn't hire. Those are the people that I can't figure out how they ever have the nerve to show up and waste both our time.
Xing, I don't know where you are from, but the people I hire get more than a comfortable living.
I don't mean to hijack this blog, but remember, Ayende has stated that he's looking for a LOCAL developer. Now I'm not sure what the job market is like in Israel, so it's hard to say whether using recruiters is the best way to find talent. Besides, he didn't say that was the only way either. He's even said he's willing to consider people who would relocate, but I'm not sure what visa restrictions, if any, there are.
Kelly mentioned how NetFlix uses their blog to highlight the work they do to attract talent. Anyone who's read Ayende's blog knows that he's very open about what he works on. In fact most of it is open source and available on GitHub. He's also talked about the culture of his company. He's stated that he's not looking for developers that spend all their time at work, but does want developers that are passionate about programming. He feels that developers that work on open source projects have the same drive that he does.
Again, I don't see a problem with any of that. Is Ayende opinionated? Of course. But man, who wouldn't want to work for someone that loves programming?
I just don't get this "Kumbaya, can't we all get along" PC attitude that's so en vogue these days. All so nobody gets their feelings hurt. In the real world, not everyone gets a trophy.
Steve, I think that you are missing a major point. I am getting qualified applicants. Quite a few of them were more than adequate. I am posting about the people that shouldn't have shown up. And please don't assume how I am running the people I actually hire, you have no knowledge of that, and your guess is quite off the mark.
Ayende,
If you are getting good candidates in the process then that's really great for your company :) I wish that was more clear in the blog posts.
Kelly, Look at the numbers. 23 candidates, 9 interviews, 3 potentials. 3 really bad candidates that really annoyed me. Let us say another 3 that are a "are you kidding me" worth that.
Oren,
As a candidate, I also have to make asumptions. I try to learn about the company, the environment I'd be working in, and the people I'd be working for. It is a two way relationship. I've worked in many bad environments, and when I'm in an interview I'm also looking for red flags about the place. There are so many bad jobs out there, so many misrepresented jobs. So many asshole managers to work for.
I'm just giving you my impression. There's no risk I'm going to interview because I live a long ways away. :-)
One of the hard lessons I've been learning in life is how to deal with idiots. You can't shield yourself from them. It's impossible. Getting angry or mad really doesn't work. Telling them they are idiots doesn't work. Having the soft skills to get what you need from them, while generally ignoring them and not letting them bother you is an incredible thing. Something I am trying to be better at.
You have two kinds of posts here... interesting technical discussions, and rants about how stupid people are. Whether it's this interview thing, or complaining about people emailing support and so on. I find those rants to be unprofessional. I don't necessarily disagree with them, but it does promote a negative image.
I have seen similar cases to what Ayende describe here. Our approach is to hire the ones that can stand the multiple hurdles we put in front of them.
When they come to the office the first thing they have to sign is an NDA form. Sure enough, it is a pretty boilerplate form, but the effort to read the legalese already set the mood. If they are gonna break fast, they break here.
After that they have the interview. Depending on how well they go, it can take from 15 minutes (not worth it) or 2 hours (worth it, so we are looking to understand how he can keep the thing going). I usually play the bearer of bad news and a collegue does the good guy routine. Some had discover the fake, and pointed it out, but it usually works to give mixed signals.
We then tell them that the day/time of their choosing we are going to send them an exercise. They have exactly 1 week to do it. Not a minute more. That reveals 2 things: if they cannot stand that we are going to push them every day to be better, they never call us back (we dont lose time). It also shows if they are able to plan in advance to ensure they will have enough time. It also allows them to dont feel observed.
The exercise itself is pretty arcane for people without the proper background (lets say pretty much noone)... it involves image processing, parallel programming and GPUs. Also in the technology of their choosing. The only requirement is I should be able to load it in the proper IDE and run (no effort on our part). If you know what you are doing, you can do it in 2 hours of so. If you dont... well you wont finish it.
They also must provide a technical report for an architect and a manager (they have to reconcile the two different perspectives in 2 pages).
We dont expect them to finish it, the fact is the best hires didnt finished it either. What we achieve here is understand how they deal with something they are not supposed to know how to do.
And even if they succeed we have another team interview (with Veto power) and a psycologist 3 hours detailed examination.
The trick is that except of the exercise topic (so they cant prepare) we tell them in the first 5 minutes how "hard" it is going to be. Granted, we lose 9 out of 10 hires but the process itself haven't failed to spot the really great people.
Skilled in problem solving, even if they havent work with a particular technology before.
I agree with Ayende that someone to hire must be able to code, but I want them to be a pretty rounded person in the other aspects too. I refuse to believe Ayende mean he just need them to code only. Because without the other qualities (in the long run) he wont be able to build a team.
Skilled people likes to work with skilled people; if that is your target, you must make sure you are building the proper environment for that to happen.
"Who is John Galt?" ... Enough said. I feel for Ayende's frustrations.
Maybe Oren doesn't understand how intimidating he appears to others? Incompetence comes with overconfidence. By aggressively admonishing weak applicants(anonymously) you may be filtering out many potentially good ones.
"The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt." -Bertrand Russel
I think of myself as a fairly smart developer who is quite terrible at interviewing. The sorting algorithm thing strikes a nerve for me because I bombed a similar question in an online interview with Amazon. The question was easy enough. Primary sort by whether or not the number is even or odd, secondary by value ascending (i.e. [1,3,5,2,4,6]). 1 hour to do it in Java. They also made me implement the actual sort algorithm from scratch, which I'm glad you don't do.
Should have been a cake walk right? Just write a comparison that checks parity first. But, interview pressure got to me and I screwed it up. "Oh, I need to make two separate lists, which I'll them merge together". From there, remembering enough Java to actually get that written consumed most of my time (what do you mean, I can't make a LinkedList<int>, but LinkedList<Integer> is ok?... I've been doing .NET for the past 5 years. It's the little things...) So yeah, I ended up turning in bubble merge sort and clicking on how stupid I was right as I clicked submit. They rightfully declined to continue the interview process.
Sure, I screwed up, but I don't think I would have failed an interviewee over it. It got the job done, but poorly. I like getting a candidate to that point so my next step can be to point out their flaws and see how they go about fixing them. Saying "wow, this guy screwed up a question that a college kid would have gotten" is a bit missing the point. There should be some things that you expect a college kid to get right and an experienced person to get wrong. The college student knows how to write a sort algorithm because he's been studying them relatively recently. The experienced developer should be able to identify a bad design and clean it up.
That's the main focus when we interview folks here. During the phone screen, we propose a problem and ask for a high level solution. (usually, a slow web app is making DB queries on every pageload. You need to tell us to cache reads and buffer writes) If candidate passes that, the first thing they do in the in-person interview is code that solution up on the whiteboard. Their first pass always sucks. Concurrency will bite you in the ass every time. So, we look at their solution and say "what about this?" "what about that?", see how they fix it. It's less important that they write code in a silo than it is that they can work with the team and fix the crappy code that all of us will inevitably write.
Well, HTML trimming ate my previous post. One of those LinkedLists has type argument of int and the other has type argument of Integer. LinkedList<int> vs LinkedList<Integer>
@Kelly Sommers and @Christian Duhard - I believe I disagree with your hypothesis that putting up posts like this attracts fewer good programmers (or removes potential good candidates). At least, I'd have to see numbers on it, rather than accepting it prima facie. The reason for this is that while I consider myself to be a fairly decent coder, these posts have actually induced me to consider applying, despite the fact that I have no real database experience; I would rather work at a place where I'm going to learn from fellow coders who are good, and I know it'll just make me a better developer in the long run. And, perhaps, if I'm lucky, maybe I can teach them a thing or two also, which is something I like to do. Put differently, these types of posts make me think of it as a kind of challenge to apply and beat the interviewer. I will simply assert that there are MANY others like me, and yes, we're probably mostly all avid gamers. :)
I think the end result is that we must remain agnostic as to whether or not posts like this are hurting his candidate pool.
It's interesting to think about another case as well: Do Oren's numerous technical/design/whatever/relatively-positive-sounding posts attract better developers to his candidate pool? I don't think we can base any supposition for this on his experience over the past couple posts; since he worked with recruiting agencies, there's no reason to believe the candidates do or do not even know who Oren is. Certainly more people read the posts, but do more people apply? I think it may be unknowable, without real numbers.
What I do believe is that having worked with recruiting agencies in the hiring process in the past, they will gladly falsify anyone's resume in order to meet their quota. This is why I personally do not take any jobs involving them; I believe that in general, they are more unethical on average than recruiters direct from companies, and my experience has borne this out. I've met people who, I would guess, have only touched a keyboard in the sense that they have had one broken off their head in a bar fight once.
Incidentally, I'm obsessing over the alternate question I asked earlier. Oren, do you keep any statistics on who has applied via the blog vs you got from open-source projects vs recruiting agencies? I'd be interested in just seeing the numbers, if they exist, and if not, that's fine too. Just really curious now.
@Kyle Szklenski I am pretty sure I would never apply due to the style. That only matters if we pretend I'm competent. :)
@Mike Ruhlin
I had an odd experience with Amazon. Their interview process needs work. They eliminate many perfectly competent candidates if my experience was typical.
@Christian - Ha, nice. My point is simply that we can't be sure that more are not applying than applying due to posts like these, unless we saw actual numbers. It seems counter-intuitive, I won't argue that, but because one example exists of someone who would rather apply to companies like this (i.e. me), it can't be asserted to be true. Not trying to break this into predicate logic, but...
~(good posts) -> ~(good candidates)
I can't tell if that implication is true or not without having the numbers. Take the contrapositive to see it: good candidates -> good posts. This is clearly not necessarily true; he might just be getting lucky with the candidate pool, or has been putting up massive compensation packages and such, but his posts are garbage. We know that's not true with Oren (his posts are usually really good), but it might be with others.
Another explosive controversy started by this blog... the only person who can re-unite the readership is Steve Ballmer with his famous chant.
Is this deliberate just as it provokes reaction. These types of blogs, getting devs who do open source, interviews etc seem to come around every year.
Perhaps this helps. Sonder
http://www.dictionaryofobscuresorrows.com/post/23536922667/sonder
Fwiw, I'm leaning toward Ayende's side on all this. If a job applicant comes in for a post requiring X years of experience, and can't solve a programming question given ample time and full internet access, they're in the wrong line of work, and their claimed years of experience is most likely BS.
Since my company is also an open source endeavour, some of our interviews tend to be mere formalities. The last 3 people we hired were already long-time contributors to open source projects we have worked with. At this point it may be an unstated requirement, but I consider it hard-and-fast: if you want to pass yourself off as a passionate, enthusiastic programmer, it ought to be trivially easy to verify this. Either there's a lot of code out there on sourceforge, github, etc with your name on it, or there's not. And if there's not, then you're probably not the skilled self-starter we're looking for.
I think this raises the very touchy education subject of who defines what "experience" means and how devs get it. I've spent years in a job that gave me a false sense of experience, only to emerge unemployable because my "experience" was stunted compared to others.
Some people are lucky (and don't know it), while others can't find a mentor who can actually help advance their skills. If two-thirds of people can't pass the test, there is something wrong with how less experienced devs are trained.
Christian, You do realize that I am selecting people who would work closely with me, right? If I am too intimidating during the interviews, what do you think the reaction would be if the new hire has a bug they can't solve? Or have to go through a code review?
Mike, I've'd people that turned in non working code. That didn't disqualified them. It has to be a lot worse than just not working. And I usually look for additional hints, see the actual posts for the summary of the details that turned us off.
Kyle, Previously to the current recruitment drive, I have had 4 people employed via the blog, and none via any other means. This counts only local employees, we have had 4 - 8 non local devs working for us at various times that we used, all of them are through the blog / OSS. This is the first time that we actually used a recruiter. Actually, we used 2. One of them really didn't pan out. The second recruiter has a friend of us working there, and we got both great service and the people we made the offer to.
Yawn, We do a recruitment drive about every year, yes.
@Ayende
I think you may have misunderstood or i wasn't clear. The style and tone of your blog likely intimidates other developers in general. I wasn't talking specifically about the content of this post. I wasn't trying to criticize you at all. I was just opining on the possible side-effects of your blog's content and tone.
I'm 100% with Ayende. On the other hand I also remember to fail singleton question once - white board + stress = disaster in my case ;) But I took It as my personal failure.
Generally, how I see this, problem is in whole industry - 90% of devs are just not meant to be devs - they don't like it, they don't think of it, they are not professional - they just make $$$ for 8h/day.
@Christian
Sometime I hope there're more "intimidating" blogs to keep the mediocre out of this industry. What truly intimates me is the code written by those incompetence developers.
I don't understand this whole vibe of 'Oren is intimidating, and these posts will filter out a lot of good candidates'. Good candidates are all about learning and solving challenging problems in interesting ways. To work under the influence and leadership of some one of the capacity of Oren, I don't know which 'good' candidate would just pass by. If you are intimidated, chances are you are not very confident in your abilities to learn from an industry leader like Oren.
If I were living in Israel, and if I were happy with the package offered, I would show up every year to his interviews until I get hired.
Hi,
what I tried once - quite successfully - is to tell the candidate to ask ME questions. Whatever he wants, regarding of course the technical requirements for the job, e.g ASP.NET MVC, jQuery or whatever.
This turned to some really interesting discussions and from the kind and the depth of the questions I learned a LOT about the candidates....
@Christian Duhard
Agreed about Amazon's interview process. Their hiring process has a whole set of scale problems that most people don't face. Thousands of similar positions to fill, and being a high profile company means a LOT more unqualified people will seek them out. So, I understand what they do, and think it can be fascinating to see the different approaches they implement. I've interviewed with them a couple times and have heard stories from others. Seems like they change their process all the time. It seems like somebody who wanted to work there shouldn't be discouraged by one bad interview and just try again a little later? I don't know how they would feel about repeated applications though. Seems maybe they wouldn't even notice.
@Eau - Are you saying the entire interview was them asking you questions? The "so, do you have any questions for me?" question is pretty standard at the end of an interview, but I think if you led with that I'd crack.
Lately I've been thinking that for senior positions, it would be helpful to ask the candidate what questions he asks when he interviews somebody (and what answers he expects, what insight he hopes to gain from the question yadda yadda).
@Mike: NO.... the idea was that the candidate should ask me technical question, sort of like a "reverse interview", e.g. "What exactly does the yield operator do in C#?", this of course leads to interesting discussions, because I can then ask some more detailed questions back, etc.
I empathize with Ayende on this subject, he shares a great deal about his company that you won't get from most other software companies, and continues to engage objectors with a level head and stays on point, for that I respect him.
I think if this story was shared with most of the objectors of this post, in private, there would be much less debate.The friction caused appears to be as a result of presenting the information on a public blog.
As an Australian I find this post to be a little insensitive to the candidates that might read it, and in Australia this would commonly be considered unprofessional.
However.
I also share a co-working space with an Israeli national. There have been times I've found Ayende's responses to be short or abrasive and asked for an opinion from my co worker and he doesn't see a problem.
My co-worker explained many of the social differences living in Australia to that of Israel and I have come to read Ayende's posts with a better understanding of his intent and I don't believe he is trying to embarrass these individuals.
It would be great, though, if one of the candidates could come forward and express their opinion of this blog series :)
Totally agree with you, Oren. I'm having a deja vu reading this blog entry. I had exactly the same depressing experience trying find an experienced C# developer a few years ago. I had dozens of CVs claiming years of C#/.net/whatever yet the candidates were almost completely useless at any kind of coding. Most were eliminated by a telephone interview.
I had one guy turn up claiming to have been developing in "C-HASH" for years. I had a double-take when I heard him say C-HASH. I asked him something like, "So which version of C-SHARP did you start with?" and in his reply he continued to call it C-HASH! Arghh!!! :-)
Almost none of them could write a simple "Hello World" console app in C# or solve a simple fizz-buzz problem.
So I am getting ready to start a new round of interviews. We have in the past given a compter with an IDE and database environment and asked them to code a solution for a set of business rules. Since our last major process overhaul which was adding the analysis in the first place we have moved to services and WCF. This gets too drawn out for a developer to create the whole thing from scratch in a few hours DB to GUI. What advice would you have on setting up the skills test. My boss has asked me to create a patchwork of an application with some parts there some not and some broken and have them fix it and document their changes.
Teke, That really depend on how much time you expect to have with a candidate. If it is a few hours, that is more reasonable, and I would take an OSS app that is similar to what you are doing and put some bugs in it and have them fix that.
Teke, That really depend on how much time you expect to have with a candidate. If it is a few hours, that is more reasonable, and I would take an OSS app that is similar to what you are doing and put some bugs in it and have them fix that.
Comment preview