In the last few years, I have interviewed more than 50 engineers for back-end positions. What I have learned is that hiring the right person is hard. There is not enough time and data to objectively test if the candidate is a good fit, but a decision has to be made right after the interview. To make that decision easier, I have standardized the way I do interviews and ask questions that cover the following areas.
1. Ice breakers
Ice breaker questions is an easy way to make the candidate feel better, especially if they are anxious. Questions about the candidate and interesting parts of their resumes, like previous projects, code on GitHub/GitLab/BitBucket, is a great way to make them feel comfortable and talk about themselves and their career.
2. About the position, company
I expect the candidates to have done a little research about the company and its products. They can’t know everything, of course, but knowing nothing is not a good way to get hired. Why? It’s a signal that they don’t want to work for the specific company/job, but any company or position and get their paycheck.
3. Algorithms / Data structures
I don’t expect people to know everything, I don’t either, but answering some questions about basic knowledge of algorithms and data structures is a plus. Explaining things in plain English is another plus.
4. Code quality
Code should be easy to ready, simple, maintainable, testable, well-documented, and easy to extend. In order to test for these attributes, I give candidates a code sample and ask them to improve it and find design, performance, and security issues.
5. Coding
I don’t like and never use whiteboard interviews. What I ask people instead is to write some simple functions where I can see if they can code. Some of them find those functions easy, and they are actually, but many candidates fail to pass that step.
6. SQL
Many developers use ORMs nowadays, but SQL is something that is needed in most cases. I would advise all developers who care about their careers to learn how to write good and secure SQL. I won’t ask you how to write the most complex query, but I expect you to find some security and performance issues on the sample code.
7. APIs
Depending on the position, knowledge about creating and consuming APIs can be a requirement or nice to have. Authentication, authorization, deprecations, responses, and errors are things I could ask about during an interview.
8. Regular expressions
This is not a hard requirement, but I expect the candidate to have some basic regular expressions knowledge. The questions are about extracting some fields from a sample using a regex. Also, knowing when not to use regular expressions is a plus, since they are overused many times.
9. Shell
Shell usage and scripting is not a required knowledge, but it’s a plus if you know how to use a shell and maybe write some simple scripts.
10. Take-home assignment
If things go well with the questions above, I give the candidates a take-home assignment and reasonable time for them to finish it. It’s usually a small project that must be well written, easy to understand, and have tests. We use GitHub to share the code and maybe talk about design and implementation decisions using pull requests and code reviews.
Conclusion
Some of the areas above are more important than others. Code quality, simplicity, good design, proper naming, and security awareness are the hard skills I value more. Critical thinking, problem solving, positive attitude, good communication, and potential are also very important.