Throughout my career, I've conducted over 100 interviews with developers of all levels, from junior devs to seasoned veterans. And you know what? In that time, I've crafted a set of 10 tricky questions that I pose to every new candidate.
Why? Well, it's simple: these questions allow me to go beyond merely assessing someone's technical skills. They delve deeper, into their thought process, problem-solving approach, teamwork abilities, and other crucial qualities.
Are you ready for this intellectual battle? Then brace yourselves, because these questions aren't for the faint of heart!
1. Preventing Concurrent Editing of Articles
Suppose you are implementing a journal editing system where editors can edit articles in the admin panel. How would you prevent two editors from simultaneously editing the same article and overwriting each other's changes?
2. Principles of Zero Downtime Deployment
What are the principles of zero downtime deployment, an approach that deploys an application without service downtime? How is this achieved?
3. Criticisms of Your Preferred Framework
Name aspects of your preferred framework that you dislike or that don't work the way you'd like. Explain how and where these issues arise and how they could be improved.
4. Handling Long-Running Cron Jobs
What could happen if your cron job, which runs every minute, starts taking more than one minute to execute? How can this be prevented?
5. Denormalizing Data in Databases
Have you ever encountered the need to denormalize data in a database? If so, what problem were you trying to solve, what challenges did you face, and how could it have been done better?
6. Mocking External Calls in Tests
If you write tests, how do you circumvent the issue of external calls made by the code you're testing? Consider the scenario where external calls are prohibited on CI (continuous integration). Why is this a good practice?
7. Synchronizing Email Changes with External Systems
Suppose your system implements email change functionality. However, the email is also stored in an external system, such as a payment processor, which sends emails to users (but users don't directly interact with it). How would you implement email synchronization with the external system?
8. Discovering Production Errors
How do you learn about errors that occur in production? Do you rely on user reports or have automated mechanisms in place?
9. Designing a Simple Chat Application
How would you design a simple chat application? You can ask the backend engineer about the backend part and the frontend engineer about the frontend part. There could be many branches in this conversation.
10. Isolating Tests in a Multi-User Environment
How is test isolation ensured when multiple tests run concurrently and access the database, potentially modifying it? If your framework doesn't provide isolation, how would you implement or improve it?
Encourage the candidate to elaborate on their thought process and reasoning behind their answers.
Assess their problem-solving skills, ability to think critically, and knowledge of relevant technologies.
Gauge their communication and collaboration skills throughout the interview.
This article was inspired by twitter @mokevnin