Tech Interview Questions That Are Actually Good

Whiteboard Coding Interviews Are Broken (Redux)

Most engineers and managers I talk to agree that tech interviews as commonly practiced today have a lot of problems. The real-time whiteboard coding interview is a disaster. Various attempt to replace it like HackerRank tests (just say “no”) and take-home design and coding assignments have their own drawbacks. Not the least of these is that the advent of modern ChatGPT-style AI makes them incredibly easy to game and hard to accurately evaluate and trust. As a result, it’s more difficult than ever to properly find and evaluate software engineering talent.

If the tech interview is failing us, what should we do instead?

Re-Enter Traditional Interviews

In prehistoric times long before Microsoft invented the puzzle interview, business folks had this thing called the traditional interview. In the world of traditional interviews, the questions often delve into a candidate's past experiences, probing for specific examples that demonstrate skills and problem-solving abilities. These inquiries aim to uncover not only technical proficiency but also interpersonal skills and cultural fit within the organization. Interviewers seek to evaluate how candidates handle challenges, work under pressure, and collaborate with others, aiming to predict future performance based on past behaviors.Traditional interviewing worked for businesses for a really long time. In many (maybe most) domains they still do. And they can work for software engineering hiring managers today!

But there’s a significant problem. If you’re a software engineering leader and you go to work tomorrow and instruct your hiring managers to do a “traditional interview”, there’s a good chance they’ll have absolutely no idea how to conduct and evaluate one. They’ve probably spent their entire careers asking (and answering) algorithm and design puzzlers on the whiteboard. If they talked about background, experiences, and behaviors at all in an interview setting, it was probably just as a “warm-up” to set the candidate at ease (if such a thing is possible) before stepping up to the whiteboard. To compound matters further, most software engineers assume — incorrectly in my opinion — that it’s nothing short of impossible to evaluate technical skills without seeing them demonstrated directly.

If you want to evaluate a software engineer using a traditional interview, what kinds of questions should you ask?

Goals For Traditional Technical Interviews

At this point, there are many, many fascinating directions we could go with this. Let’s work backwards from our “product goals”. It might seem obvious, but it’s worth pointing out what we’re trying to accomplish in a technical interview:

The purpose of a technical interview is to identify individuals who will be productive members of our engineering team.

Notice that I highlighted the word “productive”. Given that purpose, we’d ideally we’d like to be able to ask interview questions that build evidence of a candidate’s productivity.

There’s a problem with that, though, which is that individual developer productivity is notoriously hard to measure, and organizations that even bother to try and measure and manage such things usually fall back to silly, gamified, and counterproductive metrics like “lines of code” or “count of commits”.

But we can take some hints from some of the more successful applications of metrics in modern software engineering like DORA and SPACE, which I’d suggest that one of the common overarching themes is being efficient. And now we’re getting somewhere in our quest to find good traditional interview questions for software engineers, because I’d suggest that:

Evidence that a candidate is an efficient software engineer is quite easy to tease out in a traditional interview…provided you ask the right questions!

On To The Questions

Without further adieu, let’s example a few good traditional technical interview questions, why we ask them, and what might be covered in a good answer. Unlike whiteboard algorithm questions, these traditional interview questions do not require special preparation or memorization on the part of the candidate. They focus on real-world skills and practices that developers use daily, making them harder to "game" in an interview setting. This approach not only reduces the stress and artificiality often associated with technical interviews but also provides a more accurate assessment of a candidate's efficiency, productivity, and suitability for the team. By moving away from contrived puzzles and focusing on practical skills, we can better identify developers who are genuinely capable and ready to contribute effectively to our engineering projects. This shift in interview methodology helps ensure that we are hiring individuals who can hit the ground running, continuously improve our development processes, and lead and mentor other team members in doing the same.

1. How Are Your IDE and Editor Set Up?

A software engineer's choice and configuration of their IDE or editor can provide deep insights into their commitment to efficiency. By asking this question, you can uncover whether a candidate prioritizes productivity tools and practices. For example, a candidate who has customized their IDE with essential plugins, shortcuts, and themes is likely someone who values time-saving measures and streamlined workflows. They may have automated repetitive tasks or set up advanced debugging tools, all of which demonstrate a focus on reducing friction, increasing the speed of development, and producing higher quality code. This attention to detail in their development environment reflects a proactive approach to maximizing their efficiency and effectiveness as a developer.

2. How Do You Do Local Testing and Debugging?

Discussing local testing and debugging practices provides insight into a candidate’s problem-solving methods and efficiency. A developer committed to productivity will likely have a well-established process for local testing, using tools that automate and streamline the process. They should utilize unit tests, integration tests, and automated scripts to ensure their code runs smoothly before it reaches the source code repository. Efficient debugging practices are also crucial. Developers who rely solely on old-school "printf" or logging-only debugging are not as effective on the kinds of large-scale projects that we build today. Instead, productive engineers use advanced debugging tools and IDE features to quickly identify and fix issues. A “perfect” debugging session requires at most a single failing execution to diagnose. This practice ensures that they can maintain high code quality and reduce the time spent troubleshooting, ultimately leading to faster development cycles and more reliable software.

3. Describe Continuous Integration On Your Current Project

Continuous Integration (CI) is a critical practice in modern software development that helps ensure code changes are tested and integrated frequently, reducing the risk of conflicts and bugs. By asking candidates to describe their current CI process, you can assess their understanding of and involvement in maintaining a smooth, fast, and efficient development pipeline. A detailed response that includes automated testing, lively code reviews, frequent commits, and swift feedback loops indicates a developer who values continuous improvement and rapid delivery. Their experience with CI tools and processes demonstrates their ability to contribute to a team's efficiency and productivity by minimizing integration issues and ensuring high code quality.

4. Describe The Release Process On Your Current Project

Subsequent to continuous integration, the release process is a key aspect of software development that can significantly impact the team's efficiency and the product's stability. Asking candidates to describe their current release process allows you to understand their experience with deploying code and managing releases. A candidate who can explain a well-defined, automated release pipeline, including staging environments, automated deployments, and rollback mechanisms, is likely experienced in practices that ensure smooth and reliable releases. This shows their commitment to reducing downtime, minimizing errors, and delivering value to end-users promptly.

Bonus Question: How Do You Use AI In Your Daily Work?

The integration of AI into daily workflows is becoming increasingly important in software development. By asking candidates how they use AI, you can gauge their ability to leverage modern tools and technologies to enhance their productivity. A developer who actively uses AI for code suggestions, error detection, automated testing, or even project management demonstrates a forward-thinking approach and a commitment to efficiency. Their ability to adapt and incorporate AI into their work processes shows that they are not only keeping up with industry trends but also seeking ways to improve their workflow and output continuously. This adaptability and openness to innovation are important traits for maintaining high productivity in a rapidly evolving field and exactly the kind of qualities we’d like to identify in an interview candidate.,

Traditional Interviews Reduce Candidate Stress And Improve Interview Accuracy

Traditional interview questions that focus on understanding an engineer's daily practices and workflows offer a stark contrast to the conventional whiteboard interview. Whiteboard interviews test abstract and often rote-memorized algorithmic knowledge and put candidates in an artificial, high-pressure environment that doesn't reflect real-world software development. On the other hand, by asking about their IDE setup, local testing and debugging strategies, continuous integration processes, release management, and use of AI, you gain insights into their practical, day-to-day efficiency and productivity.

These practical questions reveal how candidates optimize their work environment, proactively prevent and resolve issues, and leverage modern tools and technologies. Such qualities are essential for software engineers aiming to contribute effectively to a team's success. Traditional interviews emphasize real-world skills and behaviors, providing a clearer picture of how a candidate will perform on the job. Moving away from abstract algorithm challenges and towards these practical, experience-based questions can help you identify candidates who are not only technically proficient but also highly efficient and productive in their work. This approach ensures a more accurate and holistic assessment of a candidate's potential, leading to better hiring decisions and stronger engineering teams.

Do you have your own favorite traditional interview questions for software engineers? Share your thoughts and experiences in your favorite online forum! Your insights could help others refine their interview processes and find the best talent for their teams.

Previous
Previous

Tests First, Tools Second

Next
Next

Does AI Make Open Source Like Training Your Replacement?