For a senior+ position I'm finding that these are the most common steps in the hiring process, other than team/culture interviews:
- Live coding interview.
- System design interview.
- Take home coding exercise.
Live coding interview
I've found two very different coding interviews:
- Whiteboard interview. You are asked to solve a low level problem and you need to figure out an algorithm and choose the right data structures so the code is as efficient as possible. In this type of interview typically you cannot use your regular IDE/text editor. Instead you are given a link to a web-based environment where you may or may not be able to run the code you write.
- Real world coding exercise. You can use your favorite IDE/text editor and you are asked to solve a problem that is similar to the kind of problems you would solve in your day to day work. For a frontend/fullstack position typically you will need to make requests to third party APIs to answer some questions that probably need data manipulation or some kind of processing.
For preparing for the whiteboard interviews I've been using algoexpert.io. It's a great resource to practice algorithms and data structures. Another ones that are very popular are: leetcode.com and hackerrank.com.
System design interview
In this type of interview you are asked to design the architecture for a feature or a whole application. You need to think about the different components that will be needed, how they will communicate with each other, how they will be deployed, how they will be scaled, how they will be monitored, etc.
In order to prepare for this type of interview I've been watching some videos from algoexpert.io and I've read these books:
- Designing Data-Intensive Applications
- Fundamentals of Software Driven Architecture
- Building Event-Driven Microservices
I'd also recommend System Design Interview that I'll read very soon.
During the interview usually you are free to choose any application you feel comfortable with to draw and write your thoughts and ideas. I've been using excalidraw for this. I'd recommend practicing with the tool you'll use during the interview. For excalidraw I'd also recommend installing some components from the library that can be useful such as icons representing databases, queues, etc.
Take home coding exercise
This one is very obvious. It's sometimes a paid exercise but typically is not. Depending on how long the exercise takes to complete (hours or days).
For this type of interview I just have two recommendations:
- Read the description multiple times. Like 100 times. Make sure you understand the problem and the requirements and also read between the lines.
- If you have limited time, start with the most important requirements and leave the less important ones / optional ones for the end.
- Write a lot. Write comments and write a README or similar where you can explain why you are doing something and why you didn't do it in a different way, or explain alternatives you considered.
The hiring market these days is very competitive with so many layoffs and companies freezing hiring. So, even if you are a great engineer, you need to prepare for the interviews. I hope this post helps you in your journey to find a new job.