Main illustration: Jocelyn Tsaih
Preparing for interview questions in software engineering is almost a full-time job. There are endless resources online, and it’s often overwhelming when you begin the process. It’s natural to be nervous and apprehensive when applying for roles, because you are facing the risk of judgment and rejection, which is enough to make anyone anxious.
However, the best way to settle your nerves is to thoroughly prepare, so you know you are giving yourself the very best shot to get your ideal job. Practice and preparation will minimize the sense of uncertainty and help set yourself up for success.
If you are a graduate software engineer and getting ready for your first job interviews, here are the different areas you should focus on.
1. Questions about your background
You should be prepared to answer questions regarding your background, experience, past projects and knowledge. These questions are mostly open-ended and give you a good opportunity to choose what you want to talk about. Some example questions could be:
- “Tell me about a project you worked on, and you what you did or did not enjoy.”
- “Tell me about what you learned from working on this project.”
- “Can you talk about some challenges you faced?”
- “How did you coordinate the tasks among team members?”
- “If you did this project again, is there anything you would do differently?”
You can talk about projects that you worked on during internships, work experience placements or college course work depending on your experience. Any experience you have is valuable so don’t undermine the knowledge you gained through it. When speaking about those past projects, a great answer would include a description, objectives, stakeholders and the impact of the project – or the “what,” “who,” “how” and “why.” This will help you demonstrate that you have a good understanding of the whole process and not only the technical side of things. It’s a good idea to include measures of success if they’re relevant, i.e. “It helped people do x easier,” “It automated this process saving x amount of time for the team,” etc. This shows that you care about the impact of your work.
“Interviewers start with a total blank page and have a very short amount of time”
Even if something feels trivial to you, remember that the interviewer doesn’t know anything about you. They start with a total blank page and have a very short amount of time to understand how you interact with people, what excites you about your work and how you aim for success.
Take the opportunity to reflect on your experiences and identify areas for growth to speak about. Interviewers are aware that nobody is perfect, but they do appreciate a growth mindset. Did you identify some process that could be fine-tuned? Maybe your communication could have been better in a particular situation?
2. Questions about the company
Interviewers normally will also ask about the factors that attracted you to the company and to the software engineering role. It’s crucial to do some research about the company in advance and prepare answers to questions, such as:
- What interests you about their industry?
- What made you interested in the company?
- What do you expect to achieve by working there?
- How does your background fit with what they do?
- What makes you think you would be a good fit for their culture?
Knowing already about the products they build can take you a long way. This involves both understanding the product space and being somewhat familiar with the technology stack. I usually leverage interview preparations as an opportunity to learn something new and understand if I would be interested in contributing to it. Then I am able to ask more relevant questions during the interview. Moreover, I find it much easier to be successful in an area that I’m interested in.
Don’t worry about not knowing all the technologies they use. Being open about what you don’t know (yet) looks good to most interviewers. Showing an interest to learn their domain before being offered the job looks even better.
On a cultural fit questions, the interviewer expects to see how you interact with other people. If you have some internship experience, they might ask you about how you collaborate with your colleagues. For example, reaching out for help when you need it, taking time to help others, overcoming challenges and receiving or providing feedback are some possible topic areas.
3. General software engineering interview questions
On the technical side of things, being aware of the principles of software development like object-oriented programming, test-driven development, continuous integration, design patterns and version control is essential. Depending on the nature of the role you go for, networks, databases or systems basics might also be required.
Read the job description thoroughly, and prepare yourself to be able to give the definitions and speak about the main benefits. You might not have practical experience, but it’s good to be able to talk about why they are important and discuss some industry trends.
“My very first mentor told me that I should apply for a role based on where I want to be, rather than where I currently am”
You don’t have to cross out every requirement of the job spec. My very first mentor told me that I should apply for a role based on where I want to be, rather than where I currently am. If you have some free time, trying to build some small side projects to improve your familiarity with a new technology is a great idea as well.
4. Problem Solving
Now here comes the part that most people are nervous about. The “problem-solving” sessions, which test your understanding of data structures, algorithms and complexity.
During the preparation phase
There is unlimited material online to help you prepare. A classic book that breaks down the process and provides problems and solutions is Cracking the Coding Interview by Gayle Laakmann McDowell. Online resources like LeetCode and HackerRank are good alternatives.
You have to figure out what works best for you when you study. Personally, I like to solve small problems and challenges, like the code katas or the advent of code. However, that can be time consuming. So when I want to learn more quickly, I find the solutions online and implement them myself to understand the algorithm. There are a lot of YouTube videos that explain how specific algorithms work, which you can use.
When you implement a solution, take some time to push it in your GitHub account. Not only will it be helpful if you need it again later, but also helps you build a portfolio of your work.
During the interview itself
- Make sure you have completely understood the problem. Ask the interviewer for clarifying questions to make sure that you know what is asked from you.
- Don’t jump into writing code without having enough information. For example, you should make sure you know where you read the input from, what format the input is in and the size of the data.
- Start with the “brute force” solution and don’t think about performance yet. Keep it simple. Explain to the interviewer your process of thinking and state that you will try the brute force solution first.
- Don’t underestimate the difficulty of a task. Even seemingly simple tests, like the FizzBuzz test, can give a quick impression of how you break down and understand a problem. Usually a test might start simple and progress gradually.
- State any assumptions that you make. If you use library methods of your language of choice, ask if you should implement them. For example, sorting is available in most programming languages.
- As you proceed to solve the problem, explain how you traverse your data, where you store and how you process them. This shows that you understand well the data that you manipulate and don’t just try things you’ve seen around.
- You can break down your problem into smaller functions with clear names and then go ahead and start implementing each one of them.
Most of the time interviewers expect you to implement the simple solution first, and then they will ask you about complexity. Try to identify the loops that are involved, and the operations to calculate complexity. Keep space and time complexity in mind. How much memory do you need to store things compared to your input and how many iterations you need to do to get the result.
Refresh your memory about standard algorithms complexity like sorting, searching, etc. Then try to figure out where things could be improved. Maybe you can use a different data structure? HashMaps, Sets and Linked Lists are typical structures used to optimize complexity depending on the problem. It’s good to have those structures under your belt and use them for the right problem.
If you know the problem and the more effective solution in advance, proceed with it, but still, take some time to explain why it’s the optimal solution. If the interviewer gives you any feedback consider it carefully. Most of the time, the interviewer wants to help you and knows the solution already so their suggestions are worth considering.
What if I don’t solve the problem? Does it mean I failed the interview?
Not necessarily. The interviewer is most interested in your process of thinking. From my experience, interviewers focus on:
- What do you do when you are stuck? Are you able to explain why you are stuck, will they trust you with a task and know that you will ask for help when you need it?
- Are you able to understand how data structures work, or do you use them as a black box? For example, using a HashMap without having a particular reason to do it, or without explaining why it improves performance.
- Are you a good communicator overall? Do you accept feedback or are you too passionate about your solution?
- Did you make any progress during the interview?
- Can you operate under stress or do you completely shut down?
5. Questions for the interviewers
It’s good to prepare some questions for the interviewers as well. Remember, it’s important to figure out if the company is a good fit for you. The more information you have, the easier it will be to make the decision afterwards. I usually prepare some questions in advance of the interview, such as:
- How are the engineering teams organized? How are the tasks distributed to the team?
- How do you go about testing your products?
- What team is it likely that I will be working on?
- How do you support people during onboarding? How long does it typically take for a new person to onboard?
- What would be an example of a task I would work on?
- What is the main stack you use for this project?
- What opportunities are available to work on different projects?
- How do you conduct performance reviews? What does career progression look like for this particular role?
Think about your ideal work day – what you would like to know about it? Different people value different things in work. For example you might prefer a dynamic changing environment that gives more freedom, or you might feel productive in a more structured one. You might like to work in a more autonomous way or prefer to be part of a team.
It is a good idea to figure out which environment helps you perform at your best and search for companies that will give you this opportunity. If you feel like the interviewer covered most of your questions, you don’t have to ask something just for the sake of it.
6. Mindset is important!
Of course, your technical skills are very important for the software engineering interviews. But don’t underestimate the importance of your soft skills. People will work with you every day so they should feel like you are a pleasant person to work with. There is a big part of the job that is not about you writing code, but collaborating with other principles and teams.
Collecting and understanding requirements, being able to articulate the problem in technical and non-technical ways, informing stakeholders about progress and problems are only some of them. If you believe you have some strong asset in your personality try to showcase this throughout the process.
Aim for continuous improvement
Don’t forget that interviewing, like anything else, is a skill and gets better with experience. Don’t worry about failures, focus on what you learned and do better next time. When you gain some experience, it will become less stressful and thus easier to succeed. It’s a process of continuous improvement, you should be getting better and better every time you interview, so keep preparing and keep sharpening your technical and communication skills. Proper research for information is key to your good preparation – review sites, Quora or even just Google are good resources for common interview questions for companies.
“A little focused preparation goes a long way, but don’t overdo it”
All this information might be overwhelming, but you are not going to be asked all of these questions in every interview. I tried to capture the different things I’ve seen so far to give you some areas to explore. A little focused preparation goes a long way, but don’t overdo it. It’s easy to overthink an interview and tie yourself in knots. Good luck, go out there and be awesome! 🙂
Do you have any other tips that you use when preparing? Share with us in the comments!