Interview Guide

For 90% of interviews, there are 7 types of questions they can ask and the difficulty is pretty reasonable. Only 10% of interviews (notably FANG companies) do the very hard algorithm problems (LeetCode) that everyone talks about.

Getting Interviews

Keep your resume simple! Recruiters make a decision in 10-20 seconds. If you're not sure how to write a tech resume, here's a common format (one that I use):

Name and contact info at the top
List your work/projects from top to bottom. Use this format (or similar):

Job Title (e.g. Software Developer), Company/Project, Jan 2020 - Feb 2021
Built a new checkout process for the ecommerce store using React and Express
Deployed app to a load-balanced elastic beanstalk environment and set up SSL
More sentences about what you did or accomplished ...
Tech: JavaScript, React, TechnologyA, TechnologyB ...

Avoid 2-column or complex layouts. Just use 1-column, top to bottom
Complex layouts can confuse recruiters on where they should start reading. There's not much time to make an impression so just make them read top to bottom.

My resume

Don't write traditional cover letters, they are mostly filler. Instead:
Write a few sentences about what makes you or your experience unique
Put this in an email, in your application, or use this as your cover letter

My cover letter (email)
My cover letter (application)
Why I don't recommend traditional cover letters

If you're just starting out, don't worry! You'll just need to apply a lot. I got interviews for 1 in 10 applications when I was starting out.

1. Phone Screen

Search the interviewer on LinkedIn.

If they're a recruiter
Most will just chat with you. Some will ask behavioural questions.
Prepare some stories of your success and challenges you faced just in case
If needed, you can have these in front of you during the call

If they're an engineer
Get ready for some (light) technical questions.
Review your past work/projects and practice explaining what you did in detail
Review common concepts for technologies they use (what is lifecycle in React?)
Practice a bit of algorithms (they won't have time to ask very hard questions)
If needed, make notes and have these in front of you during the call

2. Algorithms Problems (LeetCode)

Don't worry, these are not as hard as everyone says. I only practice ~20 LeetCode problems before doing interviews (here's my list) and there's a certain way to prepare for these.

Every algorithm problem has 2 parts:

  1. Find an algorithm to solve the problem
  2. Convert the algorithm into code

Focus on #2 first. It's much easier to get good at one skill at a time.
Do business logic problems where you're given the algorithm and have to convert it to code. A great example is Game of Life (I got this in an interview once).

Finding algorithms
Once comfortable with #2, practice #1. Every algorithm has a "trick" to it. If you figure out which trick to use, it will lead you to the solution.

Example: "Given a list of integers, find the smallest positive integer that's not in the list". The trick for this problem is to convert the list into a hash (a JS object, Python dictionary, etc.) so that finding a number in the list is O(1) instead of O(n)

Most common tricks
Convert to a hash = used to make searching O(1) and to group data together
Multiple recursion = each recursion has 2+ recursive calls, combine the results
Grid iteration = practice iterating over an n-by-n matrix (including chess boards)
The runner technique = using 2+ pointers in a linked list

If you're stuck on a question, go through this list and see if you can use a trick:
"Can I convert to a hash?" "Do I need recursion to solve this?" There are more tricks than this, but these are the most common ones. With practice, you'll be able to find new tricks on your own!

Advanced tricks (optional)
Memoization = save the results of sub problems to avoid recomputing
Dynamic programming = learn this after memoization, it's a similar technique

Coding or whiteboarding?
Practice a bit of both. I've been asked to do both many times.

FANG company interviews
For these interviews, forget what I said about interviews being reasonable. They will ask very hard algorithm problems. Memoization and dynamic programming are mandatory here. Aim for 150-200 LeetCode questions, the more the better.

Fortunately, the majority of interviews aren't like this. These interviews are meant to find engineers who have talent or got lucky and practiced the right questions.

3. Practical Coding

They'll ask you to code something useful. For example, I've been asked to create (simple versions of) an autocomplete API, a search dropdown, a YAML parser, a Set data structure, as well as fix bugs in a small app. This type of interview is pretty reasonable. They want to see you code how you normally code.

If you work on features like this regularly, you should be okay. Otherwise:
Create some small side projects to practice your feature development
Ideas: the features above, user login, image upload, data processing, etc.

4. Systems Design

Like algorithms, this is also not as hard as everyone says. They won't ask you to "design Twitter" and scale it to millions. They'll focus on designing a simple feature that's similar difficulty to what you would do at work. I've been asked to design user login, image upload, a simple online chess backend, and restaurant reservation.

When you start working on a big feature at work or in your side projects, you have to plan out the feature before you code, right? You'll be doing the same thing here. They want to see you plan how you normally plan.

Again, if you work on features like this regularly, you should be okay. Otherwise:
Practice planning and coding a variety of features in side projects

FANG company interviews
Like algorithms, FANG company systems design will be unreasonably hard. Learn how to design Twitter, Uber, Airbnb, a URL shortener, etc. The more the better.

5. Past Experience

They will ask you about your previous work/project experiences, but they will go into a lot of detail. This includes exactly how you wrote your code, structured your code, what libraries you used, decisions you made, and bugs you faced.

Imagine another engineer will be helping you in your work/project. How would you explain your work/project to them so they can start contributing code? You'll be doing the same thing here, except you'll be explaining to an interviewer.

Review your past work/projects and practice explaining what you did in detail

6. Behavioural Questions

This is the classic: "Tell me about a time when _________"
"Tell me a time when you faced a difficult challenge."
"Tell me a time when you had a disagreement with a teammate."

For each of your work/project experiences, prepare 2 stories (if applicable):
A story about a technical challenge (coding or anything technical)
A story about a human challenge (challenge working with other people)

Most behavioural questions fall into these 2 categories. Instead of memorizing answers, practice this skill: when they ask you a question, tell one of the stories you prepared, but modify it so that it fits the question. You'll get good at it over time!

7. Take Home Assignment

I put this last because there's no trick to preparing for these, but I wanted to be thorough. The company will give you a project to do on your own time and if you do well, they'll give you an in-person interview. There's no time pressure or anyone watching so code normally and use all of your resources (Stack Overflow, etc.)

Final Words

Remember that interviews are tough, but you'll get better with practice.
So don't give up. You got this!