This article is concentrated only on the technical part of the interview and tries to summarize hundreds of interviewers’ experiences. This technique has proven successful many times. I personally used it to recruit a group of four junior developers who developed the MVP (Minimum Valuable Product) for a startup in four weeks. It also worked to recruit 30 senior programmers for Lazada to develop its epic features.
Create Your Own Interview
First, let’s clarify. There is no ultimate question you can use in all interviews that fits every candidate. Each interview is unique based on the particular candidate, job position, and company. However, there is a basic structure you can use as a foundation to construct your own interview. I always improve and change my programming and technical questions. You should do the same because sooner or later you become bored, and the candidates will know all of your questions by heart. Yes, the candidates’ spies are everywhere…
Stone, Paper, Computer
I remember how I hated paper programming in the university. I always had to rewrite my whole
code in a new paper because in
the end, it was full of corrections. Paper programming makes no sense. Maybe it did 50 years ago when engineers used punched cards to write codes. But today, everybody uses a computer.
I let the candidates use their computers during the interview. I take it so seriously that I ask them to bring their laptop to the interview if they can. It is good for the candidate because he can be more confident. It is also good for you because you can see how the candidate uses his computer—how fast can he type, what tools does he use. You might also be able to see the previous codes of the candidate on his computer.
Sometimes, you can see strange things. For example, I remember once I had a candidate who applied for a senior developer position, and he had to search the keys on the keyboard. We always have paper in the interviews, and most of the candidates use it; but I never make them to write the whole code on paper.
Allow or Deny Internet Access
I always let the candidates use the internet. Developers constantly use the internet to solve their problems. Documentation, Google, and Stack Overflow are all friends of programmers. To deny them these tools is like sending soldiers into war without weapons.
If the candidate doesn’t know there is a function to remove duplicate elements, but he can find it, it is fine for me. Or if he cannot remember the parameter list, I let him search for it. I don’t expect anybody to remember the fastest way to find prime numbers until they know how to research.
If I didn’t let them use the internet, I would miss whether or not they could use their “weapons.” It requires you (as the interviewer) to use unique questions so the candidates cannot find the exact solutions on the internet.
FizzBuzz, Nth Fibonacci Number, and the Others
The FizzBuzz, Fibonacci numbers, and reverse linked list would be good questions, but they are so popular we cannot use them anymore as interview questions. With a minimum effort, any candidate can find the solution, and it is not so hard to learn it by heart.
Try to avoid popular programming questions. Instead, create your own questions.
The Easy Programming Question
Start with a very easy programming question. It helps the candidate to warm up his/her brain. It should not take more than five minutes to solve for a senior but helps you to save hours.
An example of an easy programming question would be: reverse a string, sum up the numbers of an array, show the odd numbers from 1 to 100, and so on. I am sure you can find many more.
If the candidate struggles to solve your easy question, make sure it is not because of he/she is nervous. Ask some other question and even give some hint. When you can feel his/her nervousness go away, continue with your questions. If the candidate continues to struggle, you can finish the interview.
Difficult Programming Question
This question usually takes about 30-45 minutes. If your interview exceeds 100 minutes, I recommend splitting it into two parts because it will make the interviewee and interviewer really tired.
The difficult programming question should be a mix of different topics. It could be something like recursion, pointers, OOP, regexp, file operation, bit operations, etc.
In our prepared programming puzzles, you can find many options. For example: Count 1s in the binary-form, sum the primes, permutations, and so on. You can find the whole list here: http://admin.interviewme.io/index.php/question/index. You can pick up any of these. The most important thing to remember is to choose something different what was in the online interview and something that you have already solved.
Data Structures and Algorithms
A developer has to estimate how expensive the code is. Ask the candidate to tell you the time and memory complexity of the code he/she provided. For example, a good candidate should know that finding an element in a hash table is big-O(1), and finding an element in a balanced binary tree is big-O log(n).
If you made the candidates do the online interview in interviewme.io, it is a good opportunity to analyze the previously submitted code. Ask the candidates how they improve the performance of the code and what they may cache. Ask them about the complexity of the code, what data structure they used, and why.
OO is a mainstream programming technique. Most of the modern frameworks and languages support or require it. Basically as a programmer, you cannot live without it. That is why you must be sure your candidate can clearly understand what OO is and how to use it.
Usually, the typical designing questions are: design an OO parking lot, design the object model for a car, design a restaurant-reservation system, and so on.
There are two problems with these questions:
- The answer is based on the context. When you ask this question, you probably have an accepted answer in your head based on your context. But maybe (most likely), the candidate has a different context. For example, a parking lot may consist of one single parking lot object with three methods or ten objects, with hundreds of methods like parking lot, parking space, car, sign, etc. All of them can be correct based on the complexity and context of the problem.
- If you are following an agile programming methodology, you hardly work like this, and you know planning is always guessing. The iterative and incremental development is crucial in agile development. The goal is to reduce complexity and avoid the over-engineering by incrementally adding the necessary features to the product.
If you ask the above question, you ask the candidate to over-engineer a simple problem, and it is exactly the opposite what you expect from your programmers.
So what does the good question look like?
Try to clarify the context and make it simple in the beginning. After that by adding more and more requests (like in real life), you can increase the complexity. For example, ask the candidate to create a car that can accelerate and decelerate. After that, ask him/her to add the wheeling ability. Later, you want to store the car in a garage and change the tires.
In the end if you want, you can ask the candidate to design the database structure to store the classes.
What Should You Consider?
- Can you recognize any design pattern?
- What is the relation between the classes (If the garage is the parent of the car, that is not a good sign!)?
- What are the classes responsible for? Are the classes a unit of methods and data or just procedural programming with classes?
Don’t Give Up!
These are my favorite technical questions. As I have experienced, these questions are not easy. Less than ten percent of the candidates you will interview can solve them. When you have rejected the tenth candidate in a row, you might feel depressed because you desperately want to hire someone; but never lower your standards. I know it requires a lot of self-control and patience.
There is an easier way. Before going crazy, try to pre-interview the candidates and weed them out before any personal or phone/Skype interviews take place. Doing so will help you save your time, as well as the candidates’ time. It will also help you keep your mental health.
Feel free to try these technical questions and leave a comment about your experience.