Interviewing / candidate qualifying tips
-
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'.
-
No, referrals from people I work with or have worked with.
Brady Kelly wrote:
referrals from people I work with or have worked with
That IS the old boy network. I am not disparaging it, it works well, and I don't understand why hiring someone you know is good is considered a bad thing.
Opacity, the new Transparency.
-
Tip #1: Don't waste your money with worthless recruiting / head-hunter firms. Place an ad on Dice and you will get the exact same resume list head-hunters will give you. Tip #2: A code test is a good pre-screening tool. Best to require it use data you publish from a webservice you control. You would be surprised at how many ".NET Developers" cannot access a web service. Give a dead-line for submission. Tip #3: You get what you pay for. If you have a low budget hire college grad with no experience, professors letter of reference, a C or B average, and a degree in Computer Science and train him or her (who am I kidding, him). Don't get the A average people, some just work hard to pass but can't code and the rest will drop you like a bad habit when a good gig comes around. Tip #4: Low ball the candidate, price-wise, if they accept it they are desperate and you don't want them :p
Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. A man said to the universe: "Sir I exist!" "However," replied the universe, "The fact has not created in me A sense of obligation." --Stephen Crane
Ennis Ray Lynch, Jr. wrote:
Tip #4: Low ball the candidate, price-wise, if they accept it they are desperate and you don't want them :p
That just happened to me, sort of. A friend called and asked if I was up for a 'two weeker' (literally 80 hours), and I said yes. He asked my rate, and I said 300/hr, but I can go down to 200, because I'm desperate. He went and quoted 200, before seeing if they would pay 300, so now my new scoot and Christmas holiday take second saddle to merely eating and paying my bond.
-
I personally believe that trying to glean something from a programming test at interview time is worthless. The length of time available limits the complexity and the situation will always be somewhat contrived. My method has always been to have a first interview during which I explain, in detail, what the role involves. I whose them the application(s) in action, I show them source code and database structures. I converse with them about these (few, if any , outright questions - a conversation is necessary - I need to work with these people and know I can do so at a technical level). If available I show them some crap code (maybe some prototype code, maybe something that's causing issues - but nothing too complex) and get them to understand the issues and help suggest improvements (e.g. in once case we had a 'fetchObjectFromDb' method that fetched a massive customer object by selecting from the customer table, then for each 'id' on that table, selecting from the child tables and building the child objects (Name, Address, and other business objects). I asked them to think of any issues (this object was used even if the app was displaying just the customer name in a list, and required up to about 200 calls to the DB to populate all of the objects). Discussion was my point - I didn't expect them to have an answer off the top of their head, I wanted them to think about, and discuss with me, the problem. At the end of the interview, after their opportunity to ask any questions about the requirements of the role) I would tell them that, if called for a 2nd interview they would meet the team (not applicable in your case, I guess!) to make sure they would get on with the members, and be able to ask them any questions - and the team could ask them questions too. And finally I would tell them that, if they were not 100% comfortable with their ability to perform the role I had discussed, that they should get back to me before any second interview to discuss the issues. I insisted (and meant it) that this would not preclude their selection, but that if hired they would be on probation, and I treat probation VERY seriously. If they were unable to perform according to my expectations (which I had carefully explained) using the code base and DB they had been shown, I would sack them during probation. No second chances. Of the 12 or so candidates I employed over 8 or 9 years, I sacked one. (I'm sill not sure if he had some mental illness, was on drugs or what, but the guy that turned up to work could have be
_Maxxx_ wrote:
Of the 12 or so candidates I employed over 8 or 9 years, I sacked one. (I'm sill not sure if he had some mental illness, was on drugs or what, but the guy that turned up to work could have been a completely different person from the one I interviewed - he managed to use the letter 'O' instead of a zero in some test SQL inserts he wrote, and couldn't tell why it was failing, for example!_)
I have a mild mental illness (anxiety disorder), and even when I've been on drugs, that might have happened, but has never gone undetected for more than a minute or two.