Tips For Software Engineering Interviews
Late last year I decided to start interviewing for new jobs. It had been over two years since I had last interviewed, and although I had been working and performing interviews for my employers this doesn’t directly translate into keeping up your interview skills(although it does help). So I came up with some better my preparation methods which I discussed in a previous post, and I also came up with some tips and guidelines to help me perform better during interviews.
Throughout my interview process I came across four different types of interviews, and although you may encounter slightly different versions of these or take home assignments as well, I believe that these 4 types of interviews encompass most interviews. The first of which is a general HR phone screen, which is when a hiring manager or recruiter will ask you questions about your background and experiences, as well as give you more information on the company. Another type of interview I encountered was behavioral interviews. Behavioral interviews normally come during the on site round and are performed by engineering managers or VP’s of engineering. Since these are very similar to the HR phone screen, I will group my tips for both of these interview types. Coding challenges generally come as a screening process between the HR call and the onsites, but you will most likely also encounter at least one if not more of these once you come on site. Also system design interviews will most likely occur onsite as well, assuming you are not a new grad which in that case you may not be given this type of interview. Lastly, you will most likely have a coffee or lunch break once on site which will be a more laid back time for you to see more into the culture of the company and get your questions answered. Rarely will these types of interviews really factor into the decision, but they are still important and should be utilized as well as possible.
Check out my previous post about Technical Software Engineer Interview Tips for information on how to prepare and perform better in coding challenges.
HR Phone Screens and Behavioral Interviews
Behavioral interviews are sometimes an afterthought for most engineers because the technical interviews are more feared and given more weight, but I think they deserve some preparation and thought as well. This can sometimes be the make or break for candidates and I have seen candidates ace technical challenges but still be rejected due to doing poorly in behavioral interviews. In my previous post I wrote about prepping for these types of interviews by outlining some common questions like “tell me about yourself”, “why are you leaving your current role”, “what are you looking for in your next role”, etc. as well as outlining a matrix of common question topics and projects that you encountered such issues on. Make sure to always reread these and adapt them slightly before your interview. If you prep ahead of time you can hopefully answer any question you encounter during these types of interviews. When it comes to phone screens, feel free to have a document with your prepared answers out in front of you so that you can easily reference them during the call. A slight difference between the phone screen and on site behavioral interview is that generally the onsite will be done by a more technical person in the organization. Although you should go into technical detail for the HR screen, sometimes you may want to keep it more high level technically in these interviews. Know your audience and know when you are giving too much information and confusing your interviewer. You want them to clearly understand what the problem was and how you solved it. However, with the on site go into more detail. Interviewers will generally want to know you clearly understood the problem and did your research before picking a solution. Don’t be too general when answering questions, if your answer sounds like something anyone could have said in response to that question then you aren’t giving enough information. You want to be driving this conversation with your answers. Your answer should tell a story where you lay out the problem you encountered, why it was a problem and how it relates to the question, how you went about finding a solution or solutions, what solution you picked and why, and what the final outcome was. Make sure you are painting a clear picture of how this situation answers the question.
I would also use my preparation document to write down any questions that came up during the call that I wanted to ask so I wouldn’t forget them, or write down questions prior to the call. Feel free to take notes and write down what your interviewer is saying as well so you can look back and reference this information. I would always ask about the interview process and the company during these calls, then write down this information so I could look back later and compare it against other companies. Make sure you have at least a few thoughtful questions specific to the company before phone screen interviews so you can show you have looked into the company, but also feel free to generate questions during the conversation.
System Design Interviews
Make sure that at the onset of the interview you ask as many questions as possible about the system and what it’s requirements are such as # of requests per second or minute. Every system is different and it’s requirements will be different, sometimes # of requests per time period may not always make sense so think it through. But you will need to make some assumptions in order to get through the interview properly. Make sure you always talk through these assumptions and make sure the interviewer is in agreement. Also make sure that you understand the question at hand, it is important in any technical interview to make sure you are solving the right question. The interviewer will generally try their best to help you during these interviews though. System design interviews generally lend themselves to being more collaborative than algorithms and data structures. So make sure to listen to your interviewer and work with them. Talk through your system and make sure to touch on tradeoffs and alternatives. It’s important to show that you are considering multiple options and why you came to your current solution. The interviewer will generally ask clarifying questions if you don’t talk through alternatives, so even if you forget to do this on your own it’s important to be able to talk through your solution and why you picked it. Go into as much detail into the alternatives and your solution as possible. The difference between a solid yes and yes is generally how well a candidate can talk through alternatives and how knowledge they are on different aspects of the system. A common mistake I have made and seen made during these interviews is scaling the solution too quickly. It’s important to talk about some of the initial scaling optimizations you can make and then if they aren’t enough for the requirements talk about some larger scale changes that can be made.
In general I would say the most important things to do during system design interviews (assuming you are prepared) are to work with your interviewer but stay in control and lead and then to make sure to talk through alternatives and rationale. These are necessary for designing systems on the job and are the main contributing factors to passing this interview assuming your system solves the problem.
Onsite lunches are generally a time for you as the candidate to unwind and learn more about the company and its culture. There isn’t really much preparation here, but make sure you take this time to get any pending questions answered. Think about what is most important to you in your new role and make sure the company fulfills those needs during this time.
I would say there are two things I would recommend doing after an interview. First, if you were unable to answer the question or if you were unsure about something make sure you figure out what you did wrong and how you can do better in the future. Spend some time going through the question and researching the best solution.
However, my second bit of advice is to make sure to unwind and not dwell on the past. There is nothing you can change now except the future. So make sure to figure out what you did wrong, but also make sure you give yourself some time to relax and recharge. Interviews, especially onsite interviews are incredibly stressful and anxiety inducing. Do something you enjoy (and preferably doesn’t involve coding) to let your mind recover. You don’t want to burn yourself out while you are actively interviewing, so make sure you are doing your best to stay healthy mentally and physically so you can perform to the best of your ability always! Continually stressing and practicing will hurt you in the long run if you don’t slow down every once in the while and let your mind rest.