I've had the privilege of giving a lot of interviews at three different companies. The ideal is to find a win-win combo: a good candidate that fits within a good team. Here are some random tips to help the candidate and interviewer.
Candidate
- You know that you are going to be asked certain questions, so be ready for them. You should have prepared, ready answers for questions like "What do you know about our company?", "What's the most difficult task you've done?", or "Why do you want to work here?"
- Be prepared to actually write code on a whiteboard. You wouldn't believe how many developers cannot write the 5 lines of code for something as simple as the textbook problem "return X factorial". Sure, they've coded before (or so their resume says), and they could probably solve it with Visual Studio, but still. The thinking is that if on a scale of 1 to 10, writing "return X factorial" is a 1, if the candidate can't even do that on a whiteboard without an IDE, then it's pointless to go farther.
- You want to show the interviewer that you can think, not just regurgitate facts. If they ask you a simple coding question, check if it's appropriate to "think out loud" so that they don't just see some final answer, but rather your intellectual process. This is also great for getting "partial credit" if your answer is wrong.
- Have a realistic expectation of your abilities. For example, I constantly see devs who call themselves "Senior .Net Lead Architect" for a 1 person project they did their first month out of school. It's especially scary if they can't even tell you what a design pattern is.
- Build up your technical confidence.
- Everyone has "project experience", and eventually they all blur together. Be prepared to emphasize your extracurricular activities.
- Know some of the industry terms and buzzwords.
Interviewer
- Have standard questions you can ask everyone, which lets you compare candidates against the same benchmark.
- Ask both technical questions, and behavioral questions.
- Show respect to the candidate: (1) It's only professional, (2) They may very well be a lot smarter and more experienced than you, (3) You may need them more than they need you - i.e. a smart candidate will have multiple job offers, why should they work at your company?
- Focus on concepts, not trivia. Any professional team recognizes that you can learn new concepts (especially with the technology constantly changing). Software Engineering is too deep to waste your time memorizing trivia from reference manuals. Who cares if you can list all 19 constructor overloads of Foo.
- Avoid the ego at all costs. Do not assume that the candidate is some helpless hack who is at your mercy for a job. I've seen people get an ego rush from having the opportunity to interview - they research some obscure trivia, and then hammer a senior candidate on it, and take a sense of pleasure in trying to "push around" someone who they really have no business to be in the same room with.
- Could you pass your own interview?