It's no secret that excelling at software development and clearing software engineering interviews are two distinct challenges. Cracking these interviews requires separate, dedicated preparation, especially in today's competitive job market.
Why Interviews Matter
Mastering interview skills is often the foundation of a successful career. Successful interviews lead to reputable jobs, which in turn strengthen your resume and open the door to future opportunities.
Through my 16-year career in software development, I’ve worked at companies ranging from startups to giants like Zoom, Meta, and HubSpot. I've participated in over 200 interviews as both interviewer and interviewee, securing offers from companies like Shopify and Twilio in addition to the companies where I worked. However, my journey wasn’t smooth—I had to learn through extensive research, trial and error, and interview rejections due to a lack of accessible resources early on.
While there are plenty of resources out on the internet that expose candidates to the questions that are asked in the interview, in this article I share concepts that are not discussed widely. Such as, presenting your solution, managing time, driving narrative and other steps I took to prepare for my interviews.
Interview Types
Software Engineering interviews often comprise of 3 types of interviews,
- Coding Interview
- System Design Interview
- Behavioral Interview
1. Coding Interview
This is the round where a candidate's coding and reasoning skills are tested.
The interview is often 45 minutes long. The interviewer asks two coding questions in sequence and the candidate will have to solve them while talking through their understanding of the problem, reasoning and solution. The key to prepare well for this interview is to develop mastery in the following areas,
Data Structures
- Arrays (1D and 2D)
- Strings
- Trees
- Graphs
- Lists
- While there are many others, likes tries, heaps, etc., the ones listed above are of utility in most questions
Algorithms
- DFS - Depth First Search
- BFS - Breadth First Search
- There are plenty of others here. However, BFS and DFS are often the most asked
Coding Patterns
These are not necessarily specific algorithms, these are patterns of coding that will be of use in most if not all coding questions. Having mastery over these to a point where writing these patterns in your preferred programming language is muscle memory, could be the difference between getting that job offer vs not getting it.
Arrays
- Looping over arrays and lists using
for
andwhile
loops - Looping through 1D and 2D arrays
- Looping from both ends of a 1D array
- Sliding window
Strings
- Traversing character arrays
- Indexing characters in strings using maps
Trees
- Reaching each node using recursion
- Reaching each node using stacks - DFS
- Reaching each node using queues - BFS
Dynamic Programming
Breaking down a problem into subproblems and using the result of the sub-problem as the input of the larger problem. This can seem very much like recursion and can be a bit challenging to wrap your brains around it at first. But after some practice, it will start becoming intuitive.
Lists
- Traversing through singularly linked lists
- Traversing through doubly linked lists
- Traversing through circular lists
Resources
There are plenty of resources online that can be used to learn about these concepts. Some popular ones are Leetcode, Khan Academy, Youtube
2. System Design Interview
In this type of interview a candidate has to design a system or a system component or a product in 45 minutes. For example, Design a messaging system like Slack. The candidate is often given an online white boarding tool like Excalidraw where they are expected to,
- Make reasonable assumptions about the functional and non-functional requirements
- Quantify the resource needs in numbers
- Design API contracts
- Draw a design diagram that addresses the requirements
The key here is to explain and design the trade-offs in the design decisions that you choose to make. Demonstrating the extent of your knowledge on dealing with peak load, establishing reliability, fault tolerance and boundary conditions earns extra brownie points.
Resources
Youtube: Best resources to learn more about how to tackle these interviews can be found on Youtube where hundreds of videos of design problems are addressed.
LinkedIn: Searching for "System Design" on LinkedIn brings up regular posters who break down system design problems.
Blind: Is anonymous social media. It has some good posts by posters who have successfully received multiple job offers.
3. Behavioral Interview
In this type of interview, the candidate is asked about their response to hypothetical situations. They are expected to respond to these from their experience when possible.
Resources
Although Youtube has plenty of content around this, it is best to sit down with a pen and paper (or a word doc) and write down the answers in STAR (Situation-Task-Action-Response) format.
Preparation
No matter what stage you are in your life there will always be things that occupy your day. Making time to consistently improve your knowledge and practicing interviewing skills are going to be essential to ensure success in getting job offers. Carving out 1-2 hours in your day where you can focus without distractions will often suffice to get you through the finish line.
Timeline
This varies for every person. Especially if you have other important things like having a full time job, children, hobbies, etc., you might find less and less time to be consistent. If you manage to carve out 1-2 hours every day consistently, then 3-6 months is enough for the first time prep. Future interviews will take even less time.
Now, I would like to address a couple of things that are often not discussed.
Presentation Skills
It is not what you say, it is what they hear.
This holds true in interviews as well. It is not enough for you to know the solution alone. It is vital for you to be able to explain it well to the interviewer. This is where the actual job differs from the interview process. In software engineering, unless you are pair programming, you code in silence. However, during an interview, you must talk through your solution so that you demonstrate your knowledge to the interviewers. This requires practice.
Here are a few methods you can use to practice this skill,
- Practice alone: Take any coding/design/behavioral question, answer it by coding on an editor or designing on a white board or answering behavioral questions out loud. This ensures that you are not hearing yourself speak those answers for the first time in an interview and risk throwing yourself off your game.
- Practice with a friend: Have a friend ask you questions and answer out loud
- Mock Interviews: Answer a question that someone from the software industry can evaluate and provide feedback. It is best to pick someone who is in a position of hiring. Such as hiring managers or senior software engineers. This is often the best resource for practicing as it helps you get used to the feeling of interviewing with someone you do not know and closely mimics the real scenario of interviewing.
Mock Interviews
This is an often underrated step in the interview preparation process. Arguably the most important as it helps you remove any initial nervousness from the real interview. There are many services that offer mock interviews. I have listed a few here,
- interviewing.io: Offers anonymous mock interviews for $225. Best to use when you have an interview scheduled and you need that final practice with an interviewer.
- Exponent: Offers live video mock interviews for $250. Best to use when you have an interview scheduled and you need that final practice with an interviewer.
- Hello Interview.com: Offers live video mock interviews for $170. Best to use when you have an interview scheduled and you need that final practice with an interviewer.
- Mock Ace: Offers async mock interviews for $10 where you pay to get an interview link that you can use to record the interview in one sitting using their platform and submit it. A qualified Mock Ace reviewer will review your submission and provide feedback. Best to use to test waters and assess your level of preparedness periodically.
Collecting Feedback
It is always disheartening to receive a rejection letter after an interview. However, it is not all doom and gloom. It just means that now you have an opportunity to get valuable feedback about your areas of improvement so that you can improve your chances of success on the next try. If you have faced a rejection, make sure to follow up with the recruiter, if required multiple times about giving you feedback. Once you receive it, incorporate it in your next interview.
Knowing When You are Ready
While that is ultimately a personal decision, a good measure is that,
- You are able to solve each coding question in 15 minutes and are able to walk through your solution with a use case confidently.
- You are getting good feedback on your System Design from mock interviews.
- You are convinced that you are not making up situations and are speaking from experience in behavioral interviews and that you have the STAR responses down pat.
Good luck!
Top comments (0)