Interviewing / candidate qualifying tips
-
mincefish wrote:
I don't want to work with people who don't have other things to talk about when you're having a beer after work.
So being able to enjoy a beer (or socialize after work) with a co-worker takes precedence over how they perform on the job? That seems like a strange metric on which to base a hiring decision. /ravi
My new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com
-
My company has decided that after 4 years of me doing 100% of the IT work, we need another developer. This person will work directly under my supervision and be tasked with maintaining a C# distributed WinForms app as well as some ASP.NET work. We've hired a headhunter to pre-qualify candidates and set up phone & in-person interviews. And this is the point where my inexperience with hiring really comes to light. I'm getting a little better at the face-to-face and phone interviews, but I'm still not sure how to qualify a person skill-wise. It seems like right now all I'm doing is saying things like "Do you know C#? Have you use SQL Server?" And naturally the candidate tells me that yes, they have. Can anyone give me some tips on how to gauge just HOW experienced or skilled someone might be in the areas that I require? I've asked for code samples, but some candidates can't provide that as it is most likely property of their previous employer. And I'm not sure that 1 class file will really give me a good reference point as to their skill level when taken out of the context of a project as a whole. I've also considered giving a small test, but I'm not too sure how long or difficult I should make it. Suggestions or comments from those that have experience with hiring and interviewing would be most appreciated at this point.
We give them a piece of paper with a vague written description of a real world scenario that we have solved. Sit them in a room for half an hour with some blank paper and a pen and tell them you want them to describe their proposed solution when you return. Two of us go back with a white board and just invite them to talk about their solution. It's interesting to see: * Can they communicate well * Are they confident * Do they look you in the eye * Do they start writing code * Do they draw diagrams * Do they ask questions..."Im not sure about X. if its A I'd do this if it's B I'd do this". This is a big one for me, the scenario is purposefully a little vague, if they make assumptions and then are unwilling to consider that they might be wrong it ends pretty quickly * If you change the requirement slightly can they think on their feet? * If they misunderstood or have gone down the wrong path are they prepared to rethink their solution or do they dig their heals in and insist they are right? * Both interviewers ask a few questions quickly without giving time to answer, do they cope and answer each when given the opportunity or crumble under pressure * Ask them to write out one of the solution's algorithms in code on the board while you watch This is a technical interview, its sole purpose is to determine if this person is someone you want to touch your code. If they do well there is a "soft skills" interview which I dont usually do. In your case I suspect you are going to have to do quite a bit of adjusting to working with someone else. If it's going to just be the two of you you'll really need to get along so take your time and be confident in your decision.
-
We give them a piece of paper with a vague written description of a real world scenario that we have solved. Sit them in a room for half an hour with some blank paper and a pen and tell them you want them to describe their proposed solution when you return. Two of us go back with a white board and just invite them to talk about their solution. It's interesting to see: * Can they communicate well * Are they confident * Do they look you in the eye * Do they start writing code * Do they draw diagrams * Do they ask questions..."Im not sure about X. if its A I'd do this if it's B I'd do this". This is a big one for me, the scenario is purposefully a little vague, if they make assumptions and then are unwilling to consider that they might be wrong it ends pretty quickly * If you change the requirement slightly can they think on their feet? * If they misunderstood or have gone down the wrong path are they prepared to rethink their solution or do they dig their heals in and insist they are right? * Both interviewers ask a few questions quickly without giving time to answer, do they cope and answer each when given the opportunity or crumble under pressure * Ask them to write out one of the solution's algorithms in code on the board while you watch This is a technical interview, its sole purpose is to determine if this person is someone you want to touch your code. If they do well there is a "soft skills" interview which I dont usually do. In your case I suspect you are going to have to do quite a bit of adjusting to working with someone else. If it's going to just be the two of you you'll really need to get along so take your time and be confident in your decision.
Josh Gray wrote:
In your case I suspect you are going to have to do quite a bit of adjusting to working with someone else. If it's going to just be the two of you you'll really need to get along so take your time and be confident in your decision.
You hit the nail on the head. The idea of bringing on a second developer has been brought up once or twice in the past 2 years or so and I've always resisted it. I'm having a hard time trying to accept that someone else is going to be touching projects that I've worked very hard on and take great pride in. I'll freely admit that I'm a total hack and certainly, someone else could come in and easily improve my software--and by extension--my work abilities. I just have a fear of constantly butting heads with someone who has a Masters in CS telling me that my app doesn't follow a single design methodology and is insistent that we do things THEIR way.
-
Josh Gray wrote:
In your case I suspect you are going to have to do quite a bit of adjusting to working with someone else. If it's going to just be the two of you you'll really need to get along so take your time and be confident in your decision.
You hit the nail on the head. The idea of bringing on a second developer has been brought up once or twice in the past 2 years or so and I've always resisted it. I'm having a hard time trying to accept that someone else is going to be touching projects that I've worked very hard on and take great pride in. I'll freely admit that I'm a total hack and certainly, someone else could come in and easily improve my software--and by extension--my work abilities. I just have a fear of constantly butting heads with someone who has a Masters in CS telling me that my app doesn't follow a single design methodology and is insistent that we do things THEIR way.
kryzchek wrote:
I'll freely admit that I'm a total hack and certainly, someone else could come in and easily improve my software--and by extension--my work abilities. I just have a fear of constantly butting heads with someone who has a Masters in CS telling me that my app doesn't follow a single design methodology and is insistent that we do things THEIR way.
I am unqualified. Three of the people that have worked for me here have phd's in CS. It's really no big deal. One of them came from a very different background with an emphasis on test driven development. He's been a massive influence on our team and we are much better off for it. It's not a case of doing it my way or their way, its about accepting that they have different experiences and being willing to learn from each other. Try to keep in mind that its not really your code but your employers code, they paid for it to be written, they own it, they profit from it and it's your job to make decisions about that code that will benefit them. My advice is to be open with people about the role, what your concerns are and what you hope they will bring to the table.
-
My company has decided that after 4 years of me doing 100% of the IT work, we need another developer. This person will work directly under my supervision and be tasked with maintaining a C# distributed WinForms app as well as some ASP.NET work. We've hired a headhunter to pre-qualify candidates and set up phone & in-person interviews. And this is the point where my inexperience with hiring really comes to light. I'm getting a little better at the face-to-face and phone interviews, but I'm still not sure how to qualify a person skill-wise. It seems like right now all I'm doing is saying things like "Do you know C#? Have you use SQL Server?" And naturally the candidate tells me that yes, they have. Can anyone give me some tips on how to gauge just HOW experienced or skilled someone might be in the areas that I require? I've asked for code samples, but some candidates can't provide that as it is most likely property of their previous employer. And I'm not sure that 1 class file will really give me a good reference point as to their skill level when taken out of the context of a project as a whole. I've also considered giving a small test, but I'm not too sure how long or difficult I should make it. Suggestions or comments from those that have experience with hiring and interviewing would be most appreciated at this point.
Make it simple - something solvable in 10..20 lines. Try to help them when they get a detail wrong - it's not about "right" or "wrong", but how they approach it. If the candidate cobbles together something that works, let him discuss what could go wrong. I wasn't convinced if that is such a good approach - until I first saw the results. Even after heavy pre-screening there were lots of surprises. It also helps readjust the compromises you invariably make when expectations meet reality. Bonus points if the candidate asks for clarification of the requirements, and can tell you what he's going to do. The other thing I am looking for is passion. What project was most interesting for them, why? What was good, what was bad? Also can they explain the prupose of a previous application to a non-programmer?
Personally, I love the idea that Raymond spends his nights posting bad regexs to mailing lists under the pseudonym of Jane Smith. He'd be like a super hero, only more nerdy and less useful. [Trevel]
| FoldWithUs! | sighist | µLaunch - program launcher for server core and hyper-v server -
What one does outside of work should be none of the company's business (unless it's detrimental in some way which is unlikely). But on the other hand, "chemistry" with one's colleagues is a valid concern so I kind of understand.
No argument there - the ability to interact well with coworkers and be a team player is essential. I was referring to the requirement that the potential new hire has to "have a life" outside work. /ravi
My new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com
-
Marc, your're the guy we google when we want the defintive answer on a technical question!
Don Burton wrote:
Marc, your're the guy we google when we want the defintive answer on a technical question!
My gf finally caught on that I tend to make up a reasonable sounding answer. I guess I can't live by the "I'm right until proven wrong" principle anymore. :sigh: Marc
I'm not overthinking the problem, I just felt like I needed a small, unimportant, uninteresting rant! - Martin Hart Turner
-
I work primarily in C++ and one very good method to weed people out is talking about multi-threading. My team lead and came up with a one question interview: how would you make two processes on the same computer communicate with each other? While there are many answers for this, there is one vastly superior to the rest and the question is how long they take to arrive at it, if at all. The biggest problem I've run into are developers who claim a more central role at a previous employer than they really had. For example, they may claim they helped design something, when their help consisted of one suggestion if that. To get around this, just talk about details and then verify them with his previous manager--doesn't matter if the potential employee listed them as a reference or not. In fact, if they didn't list their manager but insisted they got along with him or her, that's a huge warning sign that something is wrong. (It's important to verify that relationship; I've had a managers that lied to me and misrepresented my work to upper management.)
Joe Woodbury wrote:
While there are many answers for this, there is one vastly superior to the rest and the question is how long they take to arrive at it, if at all.
I would think a queue. Is that more-or-less correct? Marc
I'm not overthinking the problem, I just felt like I needed a small, unimportant, uninteresting rant! - Martin Hart Turner
-
Joe Woodbury wrote:
While there are many answers for this, there is one vastly superior to the rest and the question is how long they take to arrive at it, if at all.
I would think a queue. Is that more-or-less correct? Marc
I'm not overthinking the problem, I just felt like I needed a small, unimportant, uninteresting rant! - Martin Hart Turner
Marc Clifton wrote:
I would think a queue. Is that more-or-less correct?
Exactly, though shared-memory queue is more precise. If they say named pipes, they are summarily shot. We've actually interviewed people who fumbled around and finally said TCP! To which we answered "Yes, but what about using shared memory?" To which we've gotten the reply, "What's shared memory?" Needless to say, those people are shown the door immediately. We even had a guy suggest writing the file to disk and the other process would poll (yes, poll) that directory.
-
Make it simple - something solvable in 10..20 lines. Try to help them when they get a detail wrong - it's not about "right" or "wrong", but how they approach it. If the candidate cobbles together something that works, let him discuss what could go wrong. I wasn't convinced if that is such a good approach - until I first saw the results. Even after heavy pre-screening there were lots of surprises. It also helps readjust the compromises you invariably make when expectations meet reality. Bonus points if the candidate asks for clarification of the requirements, and can tell you what he's going to do. The other thing I am looking for is passion. What project was most interesting for them, why? What was good, what was bad? Also can they explain the prupose of a previous application to a non-programmer?
Personally, I love the idea that Raymond spends his nights posting bad regexs to mailing lists under the pseudonym of Jane Smith. He'd be like a super hero, only more nerdy and less useful. [Trevel]
| FoldWithUs! | sighist | µLaunch - program launcher for server core and hyper-v serverOne of my favorite stories. Interviewed at a satellite office of a well known company by a gang (flock?) of developers. One developer asked me to go to the white board and write a string reverse function. I wrote "strrev()". Later, a developer asked how Intel implemented the hardware to prevent collisions with two processors. I said I could tell him but it didn't matter because that wasn't why I was interviewing. One of the other developers commented that that was dumbest question he ever heard, so I scored points there as well. Didn't get the job, but nobody did. Turns out they interviewed lots of people, but never hired anyone. I found out later through my brother that when corporate found out, they went ballistic and eventually fired the satellite office manager.
-
Marc Clifton wrote:
I would think a queue. Is that more-or-less correct?
Exactly, though shared-memory queue is more precise. If they say named pipes, they are summarily shot. We've actually interviewed people who fumbled around and finally said TCP! To which we answered "Yes, but what about using shared memory?" To which we've gotten the reply, "What's shared memory?" Needless to say, those people are shown the door immediately. We even had a guy suggest writing the file to disk and the other process would poll (yes, poll) that directory.
Joe Woodbury wrote:
Exactly, though shared-memory queue is more precise.
See, this is why I fail interviews. Because the idea that the memory is shared is like, so obvious. ;) Marc
I'm not overthinking the problem, I just felt like I needed a small, unimportant, uninteresting rant! - Martin Hart Turner
-
John Simmons / outlaw programmer wrote:
They're not serious about being a programmer. Don't hire them.
I do not own a laptop because I just cannot work on such a crammed keyboard and monitor (No, not even for a short while. Thanks for asking. I've managed for so long without it). I think that it's a personal preference. There may also be those programmers who are serious, but don't have the money to buy a laptop. All those laptops that I've ever purchased and used were given to me by my employer. But I pester them continuously and give it back to them. Emails will be checked on the phone while on travel.
“Follow your bliss.” – Joseph Campbell
Rajesh R Subramanian wrote:
I do not own a laptop because I just cannot work on such a crammed keyboard and monitor
Most people connect the laptop to a full mouse/keyboard and one or two large monitors :-) The only time the laptop is used as it is is in a long flight or in an airport.
Regards, Nish
Nish’s thoughts on MFC, C++/CLI and .NET (my blog)
My latest book : C++/CLI in Action / Amazon.com link -
Rajesh R Subramanian wrote:
I do not own a laptop because I just cannot work on such a crammed keyboard and monitor
Most people connect the laptop to a full mouse/keyboard and one or two large monitors :-) The only time the laptop is used as it is is in a long flight or in an airport.
Regards, Nish
Nish’s thoughts on MFC, C++/CLI and .NET (my blog)
My latest book : C++/CLI in Action / Amazon.com linkThe only time my ;laptop gets used is when either my wife or myself are traveling (or interviewing).
.45 ACP - because shooting twice is just silly
-----
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
-----
"The staggering layers of obscenity in your statement make it a work of art on so many levels." - J. Jystad, 2001 -
Rajesh R Subramanian wrote:
I do not own a laptop because I just cannot work on such a crammed keyboard and monitor
Most people connect the laptop to a full mouse/keyboard and one or two large monitors :-) The only time the laptop is used as it is is in a long flight or in an airport.
Regards, Nish
Nish’s thoughts on MFC, C++/CLI and .NET (my blog)
My latest book : C++/CLI in Action / Amazon.com linkI know, I know. I've also thought having to buy an additional keyboard, mouse and a monitor (sometimes a dock) is a pain and a complete waste of money. It just doesn't make sense to me. I don't think I'll ever waste money on buying extra keyboard and monitor because I've to buy a laptop.
“Follow your bliss.” – Joseph Campbell
-
Anytime you change something on the customer you have the program use C# code to figure out which dataset needs to be told to change info, then it sends the info to an SQL server, which then changes the info using code in the dataset, which is then sent to the program, which then sends the changes to the actual data on the SQL server and that newly upsated dataset sends the info to the form to update what it says... We think retarded monkeys with typewriters could have done a better job.
At describing datasets? Definitely.
-
We tend to start off with a logic test (it's a programming test, but it's not specific to a language). We then move on to ask some fairly specific OO, .NET and SQL questions, to which there generally is a specific answer. We then move onto some questions asking them to talk through solving a problem. We use designing a chess game from an OO point of view, and designing a database schema for a car rental company, and simply keep asking more probing questions about their answer until we feel we've guided them to a good solution. If they don't seem to get it, drop it. You'll know if they seem to know what they're talking about. For instance people who can design database will get what you want from them straight away. People who are book-learnt will waffle about normalisation, but never really get there. We decided we'd rather hire someone who's very logical than someone who can quote MSDN. For us, there's been a direct correlation between book learners and poor scores on logic tests. The last guy we hired simply admitted he didn't know the answers to a few of the more tricky questions, rocked the logic test, and within 2 months was writing some fantastic code; he made a real contribution. He also had a social life outside work that wasn't programming. The others who could quote MSDN just wanted to program when they got home. I don't want to work with people who don't have other things to talk about when you're having a beer after work.
mincefish wrote:
I don't want to work with people who don't have other things to talk about when you're having a beer after work.
Where do I apply? BTW, for senior, senior guys, how about basing the database design on chess as well? Rules and history. Maybe Go as a more formal game for a DB?
-
No, referrals from people I work with or have worked with.
-
My company has decided that after 4 years of me doing 100% of the IT work, we need another developer. This person will work directly under my supervision and be tasked with maintaining a C# distributed WinForms app as well as some ASP.NET work. We've hired a headhunter to pre-qualify candidates and set up phone & in-person interviews. And this is the point where my inexperience with hiring really comes to light. I'm getting a little better at the face-to-face and phone interviews, but I'm still not sure how to qualify a person skill-wise. It seems like right now all I'm doing is saying things like "Do you know C#? Have you use SQL Server?" And naturally the candidate tells me that yes, they have. Can anyone give me some tips on how to gauge just HOW experienced or skilled someone might be in the areas that I require? I've asked for code samples, but some candidates can't provide that as it is most likely property of their previous employer. And I'm not sure that 1 class file will really give me a good reference point as to their skill level when taken out of the context of a project as a whole. I've also considered giving a small test, but I'm not too sure how long or difficult I should make it. Suggestions or comments from those that have experience with hiring and interviewing would be most appreciated at this point.
I would suggest the following: 1) Ask the candidate to solve the problems that you have faced. 2) Ask them to code so you have an idea as to whether the person can code. Also, you can identify failures in the code. 3) Check for skills which match your needs This should give a rough idea as to whether the candidate is suitable. HTH
-
What one does outside of work should be none of the company's business (unless it's detrimental in some way which is unlikely). But on the other hand, "chemistry" with one's colleagues is a valid concern so I kind of understand.
I like 'chemistry' :cool:
-
Marc Clifton wrote:
I would think a queue. Is that more-or-less correct?
Exactly, though shared-memory queue is more precise. If they say named pipes, they are summarily shot. We've actually interviewed people who fumbled around and finally said TCP! To which we answered "Yes, but what about using shared memory?" To which we've gotten the reply, "What's shared memory?" Needless to say, those people are shown the door immediately. We even had a guy suggest writing the file to disk and the other process would poll (yes, poll) that directory.
Joe Woodbury wrote:
We even had a guy suggest writing the file to disk and the other process would poll (yes, poll) that directory.
I've actually done this with a DB table instead of a file. :suss: People were queuing up (haha), even people without any stake, just called from a neighbouring company to see this wondrous demo, and almost opening bottles of bubbly, when I discovered some security issue that didn't allow my ASP component to call another, out of process, component. It took all of about five minutes to implement the db solution, and the bottles were quickly opened to many cheers, but only about three people in the room knew just how evil I had been. BTW, what is shared memory, besides what the name tells me? I started coding on ABAP/4, moved through VB6 into C#, so I have never really had to get involved with memory. BTW again, isn't there a DCOM related answer for this? It would be a lot more secure and 'managed'.