Top Tips for interviewing software developers
Tags: beginners, tutorial, career, programming
Published: 2022-03-25 13:29:24

The purpose of this article is to share with you some advice obtained from a professional interviewer with several decades of experience in the field. The reason for obtaining such advice was for our software engineering team to better equip themselves with judging the interpersonal skills, team fit, and general attitude of prospective candidates during an interview process.

This content is to be understood as general advice from a single individual and discussed in the context of private sector software engineering. Any applications should align with your own industry requirements, values and hiring policies.

### Structure & Introductions 🖖

The interview process should follow some kind of repeatable and structured design. It will allow for more consistent comparisons of candidates. The candidate will also understand that you are a professional and serious outfit. While there is a huge margin of flexibility to the below points, don't be overly laid back when interviewing.

1. <b>Length</b>: An advised interview length is 40 minutes with at least 2 interviewers present. Maintaining a strict time-box will help to counteract wafflers and allow the interviewer to reflect on the quality of information given post-interview. Your questions should be robust enough to fit within the timeframe and compel you to get the right information.

2. <b>Rounds</b>: Two rounds of interviews should be plenty to find out what you need to know. This can be supplemented by a technical assignment. The second interview should have one interviewer from the first round and new interviewer. This will allow the team to better evaluate the candidate's behaviour over time. The disadvantage of many rounds of interviews, other than the expense, is that the candidate becomes more comfortable in the latter phases and is likely to start giving more predictable or routine answers to questions. You have a greater chance of honest information and character insights in the earlier interviews.

3. <b>Introductions</b>: Every interviewer should give an introduction of who they are and why they are there. It is then advised to give the candidate somewhat of an introduction to the structure or the topics expected to be covered in the interview. This will help keep both the candidate and interviewer on track to obtain the necessary information in the allotted time. Consider explaining to the candidate that you may abruptly change topics. This is not to try throw them off but to ensure we as interviewers get the information we need. This is another tool against rambling.

4. <b>Topics</b>: It is common in software engineering to split interviews between technical and interpersonal skills. The issue with this is that you may lose an excellent candidate prematurely or keep an undesirable candidate in the process longer than needed depending on the type of interview you lead with. This is why interviews should always be a mix of interpersonal to technical questions.</li>

### Planning & Analytical Skills 💡

The ability to plan and contribute analytical skills is of utmost importance to most positions, especially software engineering. Below are a couple of techniques for determining such skills:

<b>Planning Questions</b>: Ask the candidate to go through a planning stage of a project, how they stuck to it and pick questions from this journey.
  
- How did they prepare themselves beforehand?
- Did they foresee any problems for themselves?
- How did they overcome the shortage of a resource?
- What contingencies did they consider in the event of blockers?
- How do they communicate their plan to others?
- Did they ever miss a deadline or fail to deliver work?
- How do they plan for pressure?
- What did they learn from any of the above?

This is a good category of questions for a number of reasons. Firstly you can judge what the candidate learned by the detail of their initial answer and what they took from the experience. It's of critical importance that the candidate demonstrates an ability to enrich themselves. This is true for all areas of interest and can't be emphasised enough.

By also asking questions around failures you may detect an undesirable level of ego or pride. Similarly, by asking questions around pressure or burnout you can determine some emotional intelligence.  

<b>Analytical Questions</b>: Aside from general code related questions feel free to ask the candidate to step through a technical hurdle they faced. Equally, you can share with the candidate a problem you as the interviewer are currently having. This will test both their analytical skills, as well as their interpersonal skills in communicating their thoughts to you.

With regards to asking a candidate to discuss an example of any kind, it is very common that they will have a well versed and planned example to give you. However, if you want a less rehearsed answer or want to examine the topic further, simply ask for another example to your question.

### Interpersonal & Team Skills 🤜🏼🤛🏼

The strongest technically minded engineer can still have the power to derail a project due to terrible communication skills, arrogance, stubbornness, poor leadership or team skills. It is essential that the candidate you bring into your team can work and play well with others, and you must find this out. From the experience of the author, it is the most expensive thing to get wrong. 

<b>Team Experience & Leadership</b>: To break the ice on this topic you can simply ask the candidate what kind of professional teamwork they have done in the past and then base your questions around the response. Remember, if you're not happy with an example, ask for another. You're looking for some of the following indicators:

- Can they articulate the value they contributed to the team as whole beyond the software?
- Can the candidate express their weaknesses relative to the team and how did they mitigate them?
- How did they resolve either a creative or personal conflict with another team member
- What has working with others taught the candidate about themselves?
- Did the candidate assume a leadership role and how was it applied?

Regarding leadership, you may want to drill into the topic of mentorship. It is common in software engineering that teams are made up of engineers with very different experience. It is expected that senior engineers guide junior engineers along and improve them. You will want to know how the candidate achieves this and how they resolve any issues before needing to bring the problem to a team lead or manager.

<b>Interests</b>: Asking questions about outside interests and hobbies is often seen as a bit antiquated, but it is still a valuable tool in determining the interpersonal skills of a candidate. For example, do they engage in any group or community activities? this could be anything from football to board gaming.

### Organisations Values & Commitment 🦸‍♂️

It is important to work into the interview questions which reflect your organisations values and work ethic. If you as an interviewer are having trouble articulating or evaluating such questions, use your own personal values. After all, the organisation hired you, and trusted you with this task based on those same values. 

Feel free to ask questions regarding the candidate's commitment either to the profession or the project they worked on. You don't want to glorify working ridiculous hours, which is something you hear quite a lot. Instead, you should be looking for personal projects, interest in a particular tech, involvement in the tech community or a demonstration of continuous learning.