Lessons learnt after interviewing over 300 engineers

Posted by on . Last Updated on . Tagged:interviews

Imagine this: You’ve just landed an interview for your dream software engineering job. You’re confident, well-prepared, and ready to shine. But did you know that simple mistakes might hold you back from that dream role? After conducting over 300 interviews with .NET developers & DevOps engineers, I want to share three tips to improve your chances of impressing an interviewer.

We’ll explore the importance of conciseness, the impact of preparation, and the necessity of clarity. By the end, you’ll have actionable advice and exercises to help you stand out in your next interview.

Conciseness

Once, we had a series of 4 final interviews in a single day. The last candidate of the day had some impressive technical skills, but there was one issue: they gave five-minute answers to every question.

As a candidate, it’s essential to provide enough information to answer the question without overwhelming or confusing the interviewer with lengthy responses.

As with a lot of things in development, it’s about balance. Too much information or rambling, and the interviewer may think you cannot distil complex ideas into digestible pieces. Too little information, and they might assume you lack depth of knowledge or critical thinking skills.

Distilling an idea or concept quickly and effectively is a significant part of software development, especially the more senior you become. You could be talking to a product manager who has limited technical capacity, or you could be talking to an engineering lead in between meetings.

How do we practise this outside the context of an interview? Try explaining the following concepts in a couple of sentences, as if you were in an interview:

  • BDD (Behavior-Driven Development)
  • TDD (Test-Driven Development)
  • SOLID Principles

Preparation

As an interviewer, you’ll often hear similar answers because you ask similar questions to all candidates. In a job market where many people are competing for the same positions, it’s crucial to have methods for sorting through candidates effectively. One simple method is to ask questions that seem easy, like explaining the difference between a struct and a class or describing an event-driven architecture. Surprisingly, many of the engineers I’ve interviewed forget to prepare for these basic questions.

Another clear sign that a candidate needs to prepare more is when asked what they know about the company or why they want the job. The answers are vague and generic, so to stand out, find something specific about the company and position to include in your answer.

Thorough preparation is like having a secret weapon. It not only boosts your confidence but also sets you apart from other candidates. Here’s the formula that I use to prepare for my interviews:

  • Brush up on the fundamentals of your programming language.
  • Revisit core concepts like Object-Oriented Programming (OOP), Behavior-Driven Development (BDD), and Testing.
  • Have examples ready for common questions like “tell me about a project that you’ve recently worked on”
  • Delve into the company’s background and prepare a compelling response to questions like “Why are you interested in this position?”

Clarity

I’ve had several candidates who drew complex system architectures, but when it comes to certain parts of their design, they’ll say something like: “I’ll just use a database and a queue”. These terms are so broad and leave a lot open to interpretation by the interviewer. I always wonder if they understood the rationale behind their decisions and will assume that there is a lack of technical understanding unless they are able to explain it under questioning (assuming that we have time to ask these questions).

To avoid this mistake, always explain your thought process. Why did you choose a particular technology, and what alternatives did you consider? This showcases your ability to think critically and make informed decisions, which is highly valued in the industry. Generally speaking, there are no right or wrong answers when it comes to system design tests; it’s all about your thought process.

Here’s something that you can try at home. Design an API for a booking system that needs to send notifications to hosts. For each element you put on the diagram, answer the following questions:

  • What does this element do?
  • Why do we need this element?
  • What alternatives have you considered?

What interview tips would you give to others? Let me know in the comments below.

Stuart Blackler is a seasoned technologist with over 15 years of commercial experience in the .NET ecosystem. Holding a degree in Computer Science, Stuart has earned certifications as a C# developer through Microsoft and as an AWS Solutions Architect and Developer. Stuart is the creator of the popular YouTube channel CodeWithStu, where he delves into topics close to his heart, including .NET, AWS, DevOps, and software architecture with a commitment to sharing knowledge and fostering a community of learners.