Hiring Developers: You're Doing It Wrong
devinterviews.pen.io
devinterviews.pen.io
Other people just never applied. I remember manning the booth at one of those college campus events and it was very lonely. I probably talked to three students that day. Nobody followed up with us. I even had the distinct feeling that students avoided eye-contact with us and made beelines for the booths of the big established companies.
In the end, our hiring interview process for interns was 'do you want to work for us? yes? you're in' and for full-time applicants it was simply non-existent. I think in the last three years we did not interview a single person.
I often wondered why that is but I have never found a good answer. In the end it worked out for us. The company was acquired by Google.
Still, I would have liked to have some applicants and interviews once in a while because I keep reading so much about them and I wanted to practice being an interviewer to avoid pitfalls as described in the article.
US is out of option leaving with some European country. I've heard Germany has a very vibrant software industry.
Can you please give a little more information about heading over to Germany?
Do you want to think of getting a Master's here ? This i) helps you get here ii) gives you more access to startups who would be hesitant to take the burden of visa processing
But be prepared to deal with a borderline byzantine visa system, though ... about the only thing I can complain about.
Get yourself a xing.de profile. Headhunters find me there all the time.
If you are looking for an iOS or Android job: Apply at Neofonie Mobile, we're hiring :-)
From my experience (Lot's of Java backend stuff). A lot of companies in Berlin are looking exactly for Java backend developers. Some are looking for Grails, Rails or Python developers.
On the other hand: There are many Hackerspaces and meet ups in Berlin to find like minded people:
http://www.c-base.org/ (Android Round Table, Lisp, Wifi-Hacking)
https://berlin.ccc.de/ (CCC-Stuff :-))
http://berlinwebweek.de/ (various stuff, some about business, some about hacking)
People apply for jobs without skills, without hobbies involving development, without experience and without even looking at the website.
I simply don't understand it... Are they hoping to get employed to twiddle their thumbs? Do they think they can pick it up on the fly?
So I ended up hiring ex-colleagues and friends who I convinced to start working for us. In the mean time we took 2 interns a year offering a job to the suitable candidate(s). This we we were able to hire staff.
The slow hiring process meant I needed to outsource some projects abroad to off shore development companies.
It is a give and take. If developers are in high demand, it is the companies turn to show their value to the employee in advance.
Just saying, maybe a better presentation could help. Also working in a software company is a kind of dreadful outlook, even today (neon lights, specs filled with hundreds of pages, dreary meetings...).
"Oh, yeah, I see - you've got 10 years of experience. But what's that? You don't have a diploma? Nor a 'Ausbildung'? Sorry, in this case I just won't look at your prior work - no matter how cool it might be. Have a gut day, sir! No job for you."
This gets to the heart of the matter, and you very quickly feel out someone's knowledge, ability, and most importantly, how well they collaborate on a problem. Because in a startup you will need collaboration, and likely under the highest stress moments you've seen in your life.
I also feel like this gives applicants a much better opportunity to learn about their possible future company and coworkers, and whether they themselves would like the fit. If you have not done this sort of interview, even if you have never pair programmed, try it out. It's very effective.
What I'm still trying to learn, is what screening process to use ahead of this. Sadly, you can't invite everyone for an on site day long interview. The best I've come to is to look at what applicants have made on their own time or alternately how they talk over the phone about topics and problems they're excited about. Resumes are nearly useless.
That's a bit more involved than the lighter-weight solution in the same vein - remote coding tests facilitated by a collaborative website. But it's something I haven't heard of yet.
Most competent people would scoff at a suggestion like this, and I suspect that competent employers know it.
I guess we can differ in opinion on what is 'reasonable' but I say that requiring what you're proposing is too much for me personally to take any such employer serious.
(on the part of the 'past initial screening', the employee can't know or verify this. If there are 50 applicants, and there are 15 selected in the 'initial screening', is it reasonable to ask for 150 hours of unpaid labor from these people? I posit it's not.)
The GP was talking about doing the 'screening test' for everybody who passed a first qualification stage. I don't know where you work, but having 15 'might qualified from a cursory glance at CV' applicants is very normal. Basically it's everybody who can use a computer and format a CV without using Comic Sans, and is smart enough to phrase his work experience or degree so that it sounds like it might have something to do with the advertised job offer.
How many good candidates have been willing to do it?
That's the fact that matters, not an argument about what people "should" do.
> If they're considering 4 offers and can't spend 10 hrs on each, then why on earth not?
Suppose that I'm considering two offers. One wants 10 hours and the other doesn't. Are you seriously suggesting that I shouldn't take that into account?
The answer to "why not" is "because even if getting a job is my only priority, paying extra for a chance at given job isn't".
We gave him a two-day project to complete for us, and compensated him with what we thought to be a fair stipend for his time. He completed the project, we hired him, he cleaned up the project, and we actually put it into production a week after his hiring date.
Everything worked out fine, and the developer in question is quite competent, sane, and rational.
I'd have to disagree that all resumes are nearly useless though. We need some way of screening people and I think we just need to improve the resume format. Perhaps by making a tech resume more structured and uniform across candidates things could be improved. I built MightyCV with the aim of doing this - it's a resume platform with hackers in mind. I'd like to see MightyCV become a service that shepherds candidates towards producing a resume that is actually useful to tech recruiters. A MightyCV allows you to hook into the API's for HN, Github and Stackoverflow. When integration is activated this means recruiters get a useful at-a-glance overview of what people have actually been up to in the community. I'm toying with the idea of using an aggregation of these metrics to produce an overall MightyCV score. I'd then like to create a MightyCV map that resume owners could choose to place themselves on. Candidates electing to be included on the map would only appear if they had attained a certain score. It'd be a little like how down-vote privileges work here on HN, i.e. you have to earn your way on to the MightyCV map. I guess if I set the score threshold high enough then this map could become a good source of resumes within our sector that weren't entirely useless.
Also I liked the OP's suggested list of questions too:
- What's the last project you worked on at your former employer? - Tell me about some of your favorite projects. - What projects are you working on in your spare time? - What online hacker communities do you participate in? - Tell me about some (programming/technical) issues that you feel passionately about.
I'm going to give some thought to how I could incorporate these questions into MightyCV. I might even consider making them compulsory for all MightyCV owners. What do people think? Is forcing people to include something in their resume a bad idea?
Anyway, if you've read this far you might be interested in seeing what a MightyCV looks like. Here's mine: http://robeastham.mightycv.com (For those paying attention I don't think my theoretical MightyCV score would be high enough to get me on the MightyCV map at the moment. Answering SO questions is on my list of things to do in April).
If you like the look of it and want your own MightyCV then sign up for the private beta. There is a beta code and link in the first entry for experience within my resume. There are a couple of bugs I'm ironing out at the moment, mainly associated with the LinkedIn profile importer, but otherwise it's fairly robust. If you try it, I really hope you like it.
Yes. My favorite is to ask the candidate to go on a webpage he has been working on, show me the source, and we start discussing it together. I can ask him to explain some markup, or simple javascripts. Then the key point is when I go and criticize a part of his work. Two bad reaction: immediate yes ("sure boss! you are right boss") and immediate no ("who are you to criticize my work?"). I take the guy who really starts to think, check if I could be right, and accept to discuss the technical point of view.
Other point: I need to shake his hand, it tells me a lot!
Someone with a good handshake either:
* just naturally learned to shake hands in the way you like
* found out that handshakes are important to first impressions and spent time perfecting theirs (including maybe a handwarmer in the pocket...).
Does either of those things reveal any important traits?
People naturally have different levels of perspiration & circulation in their hands, particularly when nervous. Anyone going for a job interview they care about should be at least moderately nervous.
So someone might have a cold clammy handshake purely through genetics. How many strikes against them should that be? Firmness and eye contact are based on habits, generally -- again, the developer who's thinking ahead to the "important" parts of the interview will just give you the handshake they learned as a child. How many points against them should it be if it's very soft (because they were raised by an arthritic grandmother)?
Too much rambling for a small point, but I just want to say you should try to reserve judgment on exactly this kind of thing until they've had a chance to relax a bit, get talking, etc..
Personally, my handshake is probably pretty good, but I'm not going to be really at ease talking with you until we've been interacting for at least a few months. I've learned to fake it over the years (and keep calm enough in the face of strangers that I can think straight, for the most part...), but the hiring process is definitely harder on introverts.
I went through an phone interview a few months ago that included some quizzes, talking through solutions to invented problems, etc., and was glad she agreed I could hang up the phone while I thought (and took notes)... this resulted in a much better answer than I would have given if forced to think through it while on the phone with a stranger.
It's not an issue for me only because I work for my own firm, something I had to do to get out of such bizarre situations. But it's an issue for many programmers who are told that working on their own projects is stealing time and mental energy from the company. I can certainly sympathize with the talented developer who, told that the company owns all his private projects done in his own time on his own equipment, simply chooses to leave at 5 and spend time with his family rather than have passionate private work seized and shelved by a firm who had nothing to do with its creation. It's really the rational choice if you think about it and something very valuable in a developer is rational thinking.
The company can claim inventions you made during work hours, and can forbid you to compete with them directly in your free time. That's it.
The process was to work together with a senior coder on problems of escalating difficulty. Starting with
1.upto 10 do |i| { print i }
"What does this do?"And ending with "Here's a legacy application we maintain. Add a new widget to the dashboard. Think aloud."
During the day you had lunch with the team.
Even so, that process didn't work perfectly for them. They hired me and about 6 months later they decided to fire me.
Subsequently they've focused on hiring people they already knew. For example, they've hired Darcy Laycock (http://sutto.net/), who they've known through the Rails community for years.
... and in all fairness I'd sack about 5 of me to get a Darcy on board.
Edit: I also had to take time off for studies and I suspect they really wanted all-hands-on-deck.
My answer would be "bombs with syntax error," assuming this isn't something that just looks like Ruby.
1. Phone screen (~45-60 mins). I'd spent ~15 mins going over what the company does, what the work environment is like, the team structure, the personalities, the technologies, etc... I'd try to "sell" our opportunity to jazz up the candidate and get them at least curious and hopefully very interested. I'd weave in a little of why-are-you-changing-job, what-was-your-experience-like, or what-would-you-prefer, and then ultimately we spent the majority of time on a recent project that he/she can talk about in depth. I pushed on a few related technical aspects to those projects to see if the candidate could clearly explain himself/herself technically.
2. First round (1.5-2 hrs). If I liked the candidate's potential after the phone screen, I'd invite him/her to our office to meet me and another engineer. We'd go into more depth about their recent project(s), and then go through a design/code exercise for a web application (the company builds web apps). The exercise was very open-ended (there's really no one correct way to do it). The design/coding choice depended on many factors, and we helped steer the conversations so the candidate could talk about those factors and what he/she would do to handle each of them (including when not to handle certain situations).
Along the way, we also probed into how he/she would work with other team members, how/whether to "challenge" another colleague, what/if any development process he/she would follow.
There was no trickery, no reversing a string, no linked lists. But I might ask how one would deal with concurrency conditions (two users trying to claim a single resource), how to scale with traffic, etc...
The candidate was encouraged to ask questions throughout the interview. It was a two-way street after all.
3. Second round (another 1.5-2 hrs). If first round went well, I'd invite the candidate back to meet a few other employees (e.g., another engineer, a Product Manager, a designer for example). I asked these other employees to ask anything they'd like, but at the end be able to tell me if this candidate would a) be smart, b) get things done, and c) have right cultural fit. If anyone had strong objection from this round, it almost always resulted in no-hire.
Equally important to hiring well is to let employees go quickly if they don't fit. That's a separate subject worth its own post.
I still think asking coding questions is extremely important. Programming is one job where you can actually test skill in the interview (unlike management for example, where you mostly have to rely on personality, work history, and references). I don't know why you woulnd't take advantage of that opportunity.
As for culture fit, obviously you need to do that too, but that's somewhat orthogonal to what else you ask about in the interview.
I think in practice it's almost impossible to determine if someone is a "good" hire based solely on an interview (regardless of technique). It is possible to determine is someone is a "bad" hire based on an interview however.
As an interviewer, Open Source contribution is one of the first thing I look for about a candidate.
If you do this, please take into account the time they wrote the code too - they might have improved their skills significantly since then.
Just having committed to an open source project would put you way ahead of most of the people we interview.
I hate tech interviews so much, that I never do them. I mostly do unconsciously what this article lays out. I would say personally I've experienced better than average hires if I happen to be positive on the person, doing what this article suggests in an interview. I have missed good people (was overridden) and have failed tons of tech interviews where I thought I would be an excellent fit on the other qualifications.
You'll have to ask my co-workers if I'm good, but they tell me I am.
My response to my manager was "this dude wont work"
I've also has people tell me that they read the study guides for the Microsoft certification exams. I'm not trying to start an argument about the value of certifications. I think it is questionable though when asked how someone keeps up with the latest technology, they reply that they read books with content of questionable real world application, from a single company, that are updated every three or four years.
Assuming you are a web dev, Im sure you know which browsers support which html5 features, which ones play which video types natively, and the newest css3 tricks that everyone except probably IE supports.
There is changing course with every shift in the wind and there is understanding which way the wind is blowing and charting your course based on the fuller picture. (and of course there is "the wind is blowing?")
1) Software development is a TEAM work, so asking one questions like "how did you design this or that" is just pointless. We did design that on that specific period of time...Our motivation was ... 2) Good Developers Copy, Great Developers Steal (altered from P.Picasso), so we all use Google, HN, GitHub, wikipedia and alike to innovate our solution, so if you ask me B-Tree algos, I'm sorry, but I've to look at wikipedia... 3) Hiring process is just a scumbag for both parties, you impose big, the other party imposes big. So what? You're not Google, and he's not Kevin Mitnick... 4) I think, companies should try to get the personality, not the KLOCs of applicants. If you gonna ask programming puzzles, please be authentic and ask something related to you. Not just copy a Googlr interview question because you liked it.
1) Simple programming challenge (< 30 minutes) by email. To see if they can actually write good code. Resume/age/experience/location mostly disregarded.
2) Casual discussion-style interview to get to know how they think and behave.
3) Short term contract with a predefined project (< 3 months) to see how they work over time.
4) Full time hire with salary + equity.
But I do agree with the other poster. Most high quality devs I know, worth their weight, won't sign on for that. Their view is that its a slap in the face from day one, and disrespect like that from management never gets better over time.
Contractors make significantly more money than full time devs partly for this reason. They're compensated for shouldering the risk of keeping a full book of work. Getting a good developer to work as a contractor for what will eventually be their FT wage is almost kind of a scam.
This is a simple, practical issue. You're Sam, a developer with 5 years experience. You have a choice between two roughly equal jobs. One prospective employer offers you a full time job tomorrow; the other offers you a 3 month auditioning contract. Which offer do you pick?
Anyways, I don't see why this is a cop-out any more than any other hiring procedure. No company has anywhere near a 100% success rate - this procedure acknowledges the shortcomings of a traditional interview process (namely that succeeding on an interview and succeeding as a developer are two very different animals) and tries to address them.
Agreed. But tptacek's point seem to be that this new process addresses the perceived weaknesses of traditional processes by moving all the downsides/risks to the potential employee. I think the hiring firm can signal their honorable intentions more clearly if they would pay a significantly higher salary during "probation" - something that compensates for lost benefits etc.
Edit: staunch mentions elsewhere on this thread that he is offering higher rates during probation.
Going to work for a company with employees of varying skill is no big deal; every company above a certain size has people who probably shouldn't have been hired. Going to work for a company with shady management, however, is a deal-breaker.
So I accepted a position like that and it worked out fine, but honestly, I will never do it again. I only accepted it in the first place because I was a desperate, inexperienced hire without any alternatives. Now I'm more skilled and have experience that demonstrates at least some ability. Accordingly, I don't need to take those kinds of risks.
Just because I'm good, maybe the boss's wife decides she doesn't like me or I lose some political blame-the-new-guy game, or they decide on entirely different qualities in a hire, or whatever. In this climate that sort of risk is their problem. I also won't do 10 hour programming 'tests' and I'm pretty reluctant to do several full-day programming interview marathon sessions. It sucks, I don't want to take the time off for that crap, and most importantly...
I don't have to.
This means there are places I can't work at, but there are plenty that would be glad to have me, and that suits me fine.
I've always heard that, yet when I look for contract work, it's always at equivalent or less than my hourly equivalent as a full-time dev. Full time was $100k - $115k/yr, contract was $40 - $50/hr, in the SF Bay Area.
I don't know, I don't really consider it "normal" or "market rate" if there isn't an open market for it.
I appreciate your wisdom, though, don't get me wrong. It just makes me question the typical advice espoused by people.
Also if you work 40 hours a week at the employer's place of business, are provided with all the tools you need to work, are paid directly by the employer, and are told what hours to work and how to do the task, the IRS will consider you an employee. Maybe if its only for 90 days you can get away with calling the person a contractor, but I think you're walking a fine line.
1) It makes it very easy for either party to end the relationship in a natural and simple way. Minimal hurt feelings/embarrassment/harm to morale, etc.
2) The project is at least semi-isolated so it's very clear how skilled the person is. They don't get lost in some "training" mode as a new hire spending 6 months "ramping up" on the primary codebase. They (hopefully) get an early win and earn respect and confidence from the beginning.
This is of course because he said he didn't care about location, so there's no moving costs and so on...
I spent many years hiring and working for companies that did it the way most people do it. The results speak for themselves: most companies suck to work for and most of them suck because of a few (or not so few) bozos and the environment they create.
I agree that three month contracts should be compensated at contractor wages rather than employee wages, unless the company is also paying for health benefits, some sort of portable retirement plan, etc. Otherwise you're giving up those items in return for zero commitment from the company. Not a good deal.
If you work at an excellent company, you can learn much, much more than you do at an average job, and you'll likely make connections with better people. Working with excellent people at a job has many of the same benefits as studying with many excellent people at a university. It's one of the biggest reasons to go to an elite school, and one of the biggest reasons to work at a very selective job.
If it's a great company, I think it's worth giving up some of those things for the chance to work there. If you can show them that you're much better than average, they'd be stupid not to bring you on full time. It's mainly risky if you don't think you can demonstrate that.
There are three risks compared to a FT offer - (1) the business goes south and they can't afford to bring you on FT (in which case you might be screwed even if you had gotten a FT offer), (2) you're not a cultural fit (in which case, it's the better outcome for everybody) and (3) you don't meet their standards.
During the 90 day contract, both you and the employer must technically still be "looking" (the company still has an FT headcount to fill, and the dev still doesn't have a job). But the company is inherently better positioned to deal with the uncertainty: companies hire many people simultaneously, and keeping a req open costs them nothing. Individuals, on the other hand, have a very hard time conducting a serious job search and doing their 100% on a full-time job simultaneously.
That is not actually a risk in the FT dev model, where the incentives are structured differently; it is instead very much more like the "up or out!" model of the Big 4 accounting firms or investment banks: you got the shot at the gig, now work your ass off to make sure you can keep it!
If you are a friend of mine and you are staring down the barrel of one of these "contract-to-hire" offers, take my advice: turn it down. We've been hiring nonstop for the past couple years, including for dev, and it is ludicrously, insanely good to hire good people. You hold all the cards, except (tragically) the one labeled "knowing what you're worth".
Personally, I'd rather work at a company that falls into the latter category.
I don't think most people even question how ridiculous it is that companies interview a person for a couple hours and then agree to work with them for many months or years before they will even consider firing them (usually only after additional months of trying to "work it out").
In my opinion the best recruitment tool is having a team that a potential candidate would be really happy (and lucky) to work with. You can only do that if you keep standards up and hire slowly and methodically. A bit of a pain in the beginning, but worth it for everyone involved in the end.
Now sure, this guy is the rare 10% that is completely honest and pure, I will assume that and he has no ill motive at all. But the other 90% that he has no control over is the real issue with this. Most people with talent that have been around the block a couple times have gotten burned by this scam and avoid these scenarios like the plague. If you are a reputed expert the way you handle this is either handle it as a straight consulting job at your standard rate (which should be something like $180-$250/hr if you are any good at what you do or $120 if you are a newbie) for the 90 days, or you put a big fat penalty in the contract that if they say no at the end they have to pay severance to cover the full cost of both of your relocations, the one out there, and the one back, including losses from the required hasty real estate transactions. Will they agree to these? Usually not, and that's the point. You really only want to do business with people who are fair dealing, not people looking to cheat contractors through false promises.
Another scam is the two day long interview where you work on some serious problem the company is having and it happens that you are known as an expert in that field, your name coming up on some searches. For me it was Windows graphics drivers. Back in the 1990s I would get tons of job interview requests and then would be treated to two days of intense querying to "prove" that I knew how to solve their problems in detail during which they either took a lot of notes or recorded the interview. Lots of other people get this one too.
Another related scam is the programming problem you are supposed to solve which should take 30 minutes, but as an expert it takes a full week. Instead of being a puzzle it is something obviously related to their business.
Just say no to all these! I know the bright eyed and bushy tailed kids won't listen, but this old geezer has to warn them nonetheless.
Of course, that is provided that the company would be paying my standard consulting rate for the relevant 3-month period.
I haven't worked anywhere that didn't at least have a 3 month probation period.
(Every job I've held has had this in some form or other. I'd wager it's common in countries with termination rules that aren't quite so, uh, "at will" as the US'.)
I'm happy to pay higher hourly during the contract to compensate for the lack of benefits.
I'm happy to pay a (naive) employee more than they asked for because I know what the position is worth and have no interest in tricking them.
This isn't generosity, it's just good long-term business IMHO.
It wasn't until the third interview that I asked him to write an algorithm to sort an array and when he couldn't I suggested instead writing an algorithm to see whether the array was already sorted. When he couldn't do that either he told me I was asking the wrong questions and not letting him show off the code he was good at.
To this day I have wondered and never discovered what type of code doesn't involve arrays, loops and comparisons however I do now ask candidates to write code right at the start of the interview loop. I simply never anticipated how many non-programmers would apply for programming positions.
It's not to say I haven't sorted arrays, I certainly have, but whatever standard library I'm using almost always does it for me... and pretty damn well at the same time.
Depending on how much time you have to interview (and I suggest you take the time if you're going to hire someone!) the "standard" dev interview can do pretty well at weeding out candidates who clearly lack basic skills. Joel Spolsky is a proponent of this and I agree.
I've found that passion is a great indicator of future success, and you can usually get a good quick read on whether they are serious about software development by asking people about their favorite projects, what they spend their time working on, and what interesting things they see happening in the field.
Programming questions certainly aren't the be all and end all, but as a filter they are useful.
I've never hired anyone, but I can tell you that I could write a linked list in a handful of languages. I can also tell you that it doesn't say much about what I know (or perhaps more importantly, don't). Problem solving is what is important, more important than ability to write code on a whiteboard.
Then they brought me in for a tech interview where they plunked me down in front of a computer to architect a small application for a type of problem I might encounter on the job. I thought it was fair and it probably gave them reasonable insight into how I code/think/present my solutions.
I've had a lot of "write a linked list" style and they're draining. The quality of the applicant being pulled in to do CS trivia is going to be all over the place since that type of an interview can be gamed fairly easy if someone has a desire to do so.
Although I was the only candidate among many who did not claim any experience in the actual technologies listed in the position, I was also the only candidate who turned in the take home exam. I also completed my working code in 8 hrs rather than the week time limit. The others all quit the exam at various stages because they did not possess the tenacity to hunt down technical knowledge online required to implement the proof of concept software. At the third interview, they asked me how I came to my solution and why I chose certain methods in order to validate that I completed the work myself.
This seemed like an great alternative to other exam experiences I'd had. At another interview, a non-technical company officer asked me a technical question and then couldn't explain it. The question was so opaque that it took thirty minutes of probing and badgering him to even understand the question. By this point, I was ready to write them off and leave. They lost their largest customer the next week and I would've been laid off if I'd joined them.
As far as "CS puzzles" - binary search, trees, linked lists, hashtables, etc: None of those should be puzzles. If you're giving interviews that people can "memorize" an answer to, then the problem is how you're doing the interview. A proper conversation, including code, will quickly sort out if the person just memorized a one-line Haskell quicksort, or actually knows what they're talking about.
I've certainly implemented it, but there's no way I have it memorized, it's not an obvious algorithm at all. I'd be flabbergasted to be asked to implement it from memory with no warning. It seems clear to me that one would be testing for if the person happened to have looked at the algorithm recently, not if they were competent.
If you don't remember this, it's OK. If I was the interviewer I'd still give you the description above and see if you could implement it. Most candidates cannot.
I think expecting recent CS graduates to implement a basic sorting algorithm or binary search, etc. (say, in a garbage collected language they know well) is reasonable, for people with actual work experience I think it makes less sense and the focus should be on more recent experience if relevant to the job.
I was referring to any sort of "memorization" - just talking and watching someone code should make it clear if they just recently read an article about an algorithm, or if they actually understand it.
" Some were shooting their pre-canned answers at me with unreasonable speed."
This should not be possible for all questions in a technical interview. Especially if you are a startup, you can use your own original problems, especially ones you've actually had to solve. Aim for actual coding questions though rather than too puzzling ones that are often just memorized (implement quicksort, detect cycle in linked list in O(1) space, the random puzzles companies love to ask).
Of the people I've worked with, there is a high correlation to job performance to performance in a tech interview. (which for new grads is strongly correlated to their college CS grades).
Of course, passion is also a decent indicator, but it is highly correlated with raw competance. That said, I wouldn't hire anyone lacking either.
Disclaimer: I'm coming from the background of a systems company. For those making CRUD apps, tough coding questions might be less relevant.
I had the initial phone interview with RethinkDB and they were asking me questions about what is a B tree and how to use them to implement a filesystem/database, what is the pros and cons of structure A vs. structure B, etc.
I understand wanting the best of the best, people who have implemented filesystems before, etc., but I think it's pretty unrealistic to expect someone three years out of college who has not been working in the same area of specialization to just know this stuff off the top of his head.
Wouldn't it be much more realistic to basically give someone the Wikipedia entry for various data structures, tell them something about the data and workflows, and then ask which structure(s) they would use and why?
After that interview, I was sure I wasn't getting the job, but I wasn't very upset. They seemed to have unreasonably high expectations, and that's not exactly the most healthy work environment.
There is a difference between -capable- and -willing-. Years ago I hired a brilliant developer that didn’t do anything because the work was below him.
A good interview should determine culture, willingness, and competence. If your dev-group works with b-trees daily, then include it in the test. For me, hiring someone who knows the answer is less important than hiring someone who can find the answer. In a dynamic - always changing environment - I would rather hire the latter.
Of course, github is the real resume now.
My new startup is focusing on doing exactly this --- bringing together as many sources about engineers together as possible, and putting them all in one place. It's still very early, but I'd love HN's feedback. http://proovn.com
They used vim and textmate. As an emacsian that didn't have any firm understanding of those editors, it was .. frustrating. Lots of times with 'oops, what did I do now?'.
I think we're entering an age for software engineers where expressing yourself externally is going to be even more important than your resume. For example, a really intelligent, well-thought-out post like the one linked above can really move you forward in your career.
I'm focusing on making a startup that captures all this stuff and uses it for both display and matching candidates. I'm still in the very early stages and would love some feedback! http://proovn.com
Depending on his answer, I know right there whether to end the phone interview, or fly him to the Valley so I can see him write code on a whiteboard.
(I don't watch TV or most movies, haven't seen The Social Network, and have no interest in doing so. If that is what you value, then I'm going to be a poor fit from both sides.)
in which someone mentions that they use people's opinions about whether or not they side with the Winklevoss twins in the movie as to whether or not they would be a good co-founder.
I actually thought this comment was pretty funny, but if you didn't read the earlier article, it probably doesn't make any sense.
Especially the exercise works as a good screen. We get quite a number of "deafening silence" responses, which says something about the candidate's motivation. We also get responses where people try to show off alternative language skills but deliver something totally non-idiomatic. And we get good submissions, showing some patterns knowledge, unit testing, at cetera. These typically end up being hired.
I mean think about it: do you approach programming tasks top-down or bottom-up, usually?
Critical thinking is the most important skill IMO, and it can only be tested by giving someone open-ended questions on how they would approach real-world assignments, preferably in a low-pressure take-home test kind of thing - again IMO...
1. A write-a-document test. I was given a fairly simple (contrived) scenario over the phone and was asked to write specs and a deployment plan with a deadline of an hour.
2. A programming test. Again, a description given over the phone and someone available to answer questions if I had them. After delivery, there was a followup programming task to extend it from a client app to a web app. It took about 8 hours in total.
Provided you're willing to put in the time (and I was), it seemed to be an excellent way of judging whether I could really do the work they needed me to.
Few words about one startup-like company(based in Kiev, Ukraine) I have been working for 1 year as developer. It was focusing on .NET Enterprise apps. Their interview approach: - 1st day: tech-interview via phone(0.5-1hr); - 2nd day: (companies office) simple technical tests(choose-right-answer on paper), short technical interview(technology basics, fizz-buzz tasks, sql-tasks, usually join/group-by, having-based), coding-task on laptop(the most significant and essential(for evaluating developer) part of whole interviewing process write application for calculating bowling scores, Console app or GUI application - no matter, for candidates choice, time-bounds - for candidates choice; rules were provided and explained to each candidate + full access to internet resources + possibility to ask interviewer == real working environment); - 3rd day: final technical interview(patterns, OOP, code-design, etc.), general interview with CEO;
When I came to it, there were 3 devs(including me). The next(after me) developer were hired after ~60 interviewed fellows. Yeah, the total interview time is tend to be long and hard, as for candidate such as for company, BUT in such way were established the best TEAM I had honor to work in.
Thanks for attention:) Cheers Aleksey
I mentioned this in another thread, but the point of coding questions is to see how they think about code, whether they understand how to walk through it (have a machine model), if they can pick out and evaluate edge cases, and how they can work with hints from you on how to improve their answer. Hiring based on ability to answer a particular problem is probably only a slightly better indicator of ultimate job success than height.
It seems like it would have value - allow the candidate to prepare and present on a topic they're strong on, and in-depth enough to allow cross-examination.
Has anyone any experience of this from either side?
I would add the following (problem) points as well.
* Some technical people like to hire clones of themselves, creating conflict and diversity issues.
* Some technical people, conducting the interview, use the interview process to posture and show how smart they (the interviewer) are.
* According to the BLS, the demand for programmers is decreasing while demand for analysts is increasing. Programming has changed a lot with tools like intellisense and included libraries.
* If you can’t answer the question, "why did you ask that question?", you should not ask the question. Each interview question should have a specific targeted purpose.
I hope my additions help. http://www.linkedin.com/pub/michael-pritchard/3/93b/4ba
* Realize that answers to questions like "what is abstraction" might vary from one text book to the next.
* Establish context for your interview questions. I was once asked "What is Application?" (too vague). In response I said, "In what context?" The interviewer smugly said, "What comes to mind?" . . . He did not like my answer. Hum?
Your points are well taken and insightful - and while they're especially true of technical hiring, they are also applicable for all start-up hiring. A smart person can learn the tech skills you need but it is impossible to impart passion and an intuitive understanding of culture where it isn't already present.
I eventually honed my interviews down to one question: "Please describe your most significant team accomplishment, where you were a key member of the team."
Then I'd follow that with numerous follow up questions until I really understood the person's role. This will uncover the candidate's passions, communications skills, leadership abilities, and their technical prowess. Then I'd ask the same question about another accomplishment.
Good luck. I'll write you a note on the side with my contact info. I'd be happy to talk over any "people stuff" if you'd like.
The focus that the short sighted interviewers and companies have on how fast your can solve some pointless algorithm that a CS has figured out 30 years ago, vs how you get on with the team I find mind boggling.
http://www.jeremyhutchings.com/2010/11/interviewing-dating-f...
At least when you ask them to write code, you can tell if they got it right or wrong.
Unless the job they're interviewing for is almost exactly the same as their current job, it's important to understand how they think through new situations.
This doesn't follow at all! Consider, as is surely the case, that only a small fraction of the applicants would have turned out to be average to excellent. The interview process can filter out the vast majority of the sub-average applicants and still leave you with a significant fraction of sub-average employees.
That way your work of looking into the code samples will be minimized. Even better, you'll get an idea of how well a coworker with a similar skillset can cope with that code. You can also judge how well people are at dealing with code from their coworkers and don't have to come up with examples yourself.
It does sound pretty good, no?
Instead why not work with several people on small projects, ask 5 people to do 2-4 weeks of paid contract work for you and then select the person who was the best fit for longer term work. This tests the real world skills of a person much more effectively than an interview.
But it was a really good article besides that! Sorry for being a grammar german.
What it means is that letting people go happens. Usually, when people were underperforming or showing other signs of problems, I just talked with them to clear up what the matter was. Sometimes, they had personal problems, or other temporary and resolvable issues. Sometimes, they were unhappy and needed to be somewhere else.
I remember one guy, an intern with horrible attitude, who said to me in confidence: "I regret this so much. I always wanted to become a baker, but my parents wanted me to have a real job." I kid you not!
The point is, it has been my experience that even layoffs can be borderline mutual. But this once, the latest screw-up in a long line of screw-ups... it was so monumental and malicious even. Worst of all was I felt kind of powerless, having this adversarial force on my team. Like a Trojan horse that wasn't even making an effort to disguise itself. I fired the guy on the spot. Of course, you can't do that in Germany, so eventually I paid through the nose for it following the lawsuit. But in that split second it was worth it just to have this guy off the floor immediately.
I have enjoyed your post on DZone (http://www.dzone.com/links/r/hiring_developers_youre_doing_i...) and have decided to let you know about it. This topic of 'interviewing the right candidate' has always intrigued me. I have always wondered if the superstars amongst the technology-driven companies have devised a surefire method to pick the right candidate from thousands! In my experience, the decision to go for a candidate or not, is very subjective as you have mentioned. At a certain point in time during the interview, one listens to a inner voice and decides between 'Yeah!' or 'Nah!' and not always that decision is based on pure facts: precise answers to precise questions. But, to know the personality of a programmer - through some questions and possible answers in an hour's conversation - is a difficult task. You have not mentioned if you had cracked it finally in your star-up or your later efforts/engagements. I will be keen to know.
I am based in India currently. Here, because of the business success of the IT Service companies, most of the companies try to follow their business model. However, about 95% of the work that these companies take up are low-tech, mostly repetitive and disincentivize breakthrough technical work. Their need for good programmers is not much; they are content to see that the client is that much happy to keep the projects continuing: that is the main objective. Moreover, you seem to say that 'scaling' is not an insurmountable problem. It probably is, if you see that the Indian IT service companies cite hiring figures in tens of thousands in an year. So, the interview process that these companies stick to, aims to find out how much is the probability that the candidate is going to prove himself a misfit. Subjective, as usual; for a good measure, the companies take in people in huge numbers simply hoping that the probability of a 'good fit' increases. For a bit more experienced people, it is almost always aimed to find out if the candidate can 'manage' a team, and certainly not whether the candidate understands the world of programming at all.
I work as a freelancer and in India, that doesn't help me. I claim to know and understand what it takes to 'design' and 'develop' a good piece of software. More than that, I carry a certain amount of intensity about the whole act of programming and usefulness of well-written programs, even at this advanced age. However, that doesn't interest most of the potential employers because a good programmer - who knows some but is eager to work in a team where people know more than he does - is not valued as much. Importantly, it requires a keen pair of eyes to spot these qualities and that is largely missing.
Recently, situation here has made me so despondent that I have begun to look for opportunities outside India, Europe in particular (I have stayed and worked there before, hence the bias). I am hoping that there will be some people out there who will take some interest in not only what I know and have done, but how fast I can know more and can do if I join them. I am looking for those keen pair of eyes. Agreed that there are those issues of geographical distance and visa papers etc., but if someone finds me suitable, s/he may want to go that extra mile.
If you have read till this point, thanks for your patience. I read your post at a moment when I was in despair and wanted to demonstrate that your post chimed with me.
Warm regards
-- Nirmalya (sengupta.nirmalya@gmail.com)
-- Software Technologist http://www.linkedin.com/in/nirmalyasengupta
The notion about "Programmers who are good program all the time, even in their spare time."
It has been my personal observation that this period of "Programming is the only thing worth doing with your life" (And yes, I know I am paraphrasing this in an unkind interpretation of what you said, I'm not doing it to be mean though, I'm doing it to illustrate a point) is true, for the first 5 to 7 or 8 years of a programmer's career. The reason seems to be that the deep fascination with what makes programming interesting as a career, continues to hold them even in the evening hours when they are at home. When not actually programming, they talk about programming, or programming problems or some aspect of computers and computing technology, when they can find friends to talk about it with, that is.
However, the basic drive behind this seems to be finding out as much as you can possibly find out about your chosen field or niche within the field. After that time period, though, something interesting happens. The MYSTERY of it all, starts to fade. You begin to see patterns in how things work, and similarities in how things are done, or are implemented, or can be implemented. Other interests start to take hold and after a while, family life starts to become important as well. At least, for a well balanced human, it does.
And that, I think, becomes my major point. The kinds of programmers who live eat breathe and drink programming, non stop, past this time period, are RARE, and usually are not well socially adjusted.
This is something that I think is not accounted for when interviewing more experienced software engineers. When looking at the scads of job openings for folks with 3 to 5 years of experience, your methodology and assumptions should work well, however, when you are looking for that really senior guy or gal who has been doing this for over 20 years, then the methodology, in my opinion, will not yield to you the best results. ie. teasing out the best candidate from the stack.
As an aside, I once told this to a young friend of mine who I met in college. I had already been programming for nearly ten years when I returned to school to get my bachelors in CompSci. I was always fascinated with just HOW MUCH he would go on and gush about computers, tech, sun workstations, sgi's, their hardware, their software, how to program them, linux and unix tricks etc etc.. One day I smiled and said to him. "I'll give you 5 to 7 years, and this utter all consuming fascination with computers will tone down to seeing them as nothing more than tools." He denied it, vehemently, he would NEVER have computers be something so mundane! It was, about 7 years later that I got an email from him where he told me "You were right." He's a googler now, and was one of the lucky ones who was in early, pre ipo and can now retire if he wants to. I myself tried getting into google, but made some mistakes in the interview process, trying to be 'clever'. It backfired, but that's okay. And not once did they ever ask me anything about what it is I do, or what I do best, or what I was interviewing for, board bring up, device drivers and kernel porting. Things which I'm very good at and have done for over 25 years.
Anyways, just my .02, your mileage may vary!
Sincerely, Richard Dorfner
The weeds are one problem (users here do a pretty good job of rooting them out); a harder one is the crops themselves getting more mediocre.