Here’s how I prepared for my interviews and landed a job at Google!
By: Shailee Patel
Tags: Software Development, Google, Leetcode, Interview, Coding Interviews

If you mention the tech interview process to a room of software engineers, many will speak out against common interviewing practices. A lot of the argument comes from the reasoning that solving algorithms on a whiteboard doesn’t actually represent, or translate to the day to day tasks of a software engineer. For the sake of this article, I won’t go into that conversation. Instead, I’ll explore these different types of interview practices from a candidate’s perspective, and what I learned along the way.

This article covers interview process, different types of interview (algorithms, system design and behavioral), how to prepare, when to start and useful resources to help you better navigate your tech interviews.

Interview process

Here are the six high level stages of a typical interview process for a tech company:

Application:

There are several ways to submit your application:

​ ​ ​​•​ ​ ​​Company website

​ ​ ​​•​ ​ ​​LinkedIn, AngelList, Indeed (or similar) job portals

​ ​ ​​• ​ ​Reach out on LinkedIn

​ ​ ​​•​ ​ ​​Career fair

​ ​ ​​•​ ​ ​​University job portal

Pro Tip: Try to get a referral when submitting an application Recruiter call: Typically a 30 min call with the recruiter to go over your background and skill set. Recruiter determines if you move to the next round based on how well you match the job role.

Pro tip: Have your intro pitch ready and review the job listing you applied for, to bring up relevant skills at appropriate times during the conversation.⁣ Coding challenges: Online assessments typically between 1–2 hrs where you solve a coding challenge that tests your data structure and algorithm (DS&A) skills. You write code to pass test cases (some hidden, some not) for those questions.⁣

Pro tip: Get familiar with at least one programming language and practice solving problems on Leetcode. I highly recommend getting the premium subscription. This is the link I used to get a 15% discount on Leetcode: https://leetcode.com/subscribe/?ref=db2QbVLj Phone screen: Typically 1–2, 1hr technical rounds focusing on DS&A and communication skills. Don’t jump right away into solving the problem and take your time to understand it first. Ask clarifying questions to scope the problem well and identify edge cases.

Pro tip: Explaining your thought process throughout the interview is as important as solving the problem. Onsite:A full day of interviews for which the company might fly you out to their headquarters (during covid they are virtual).⁣ This will typically be more intense than the previous technical interviews, and you probably will get harder questions. Depending upon the company and level you are interviewing for, difficulty of the questions might range anywhere from medium to hard. For preparation, study company specific questions on Leetcode, get a good night’s rest. (Make sure you use the $$ the company gives you for food, travel, tourism etc too :P )

Pro Tip: Prep your behavioral answers (think of many different activities/situations you can talk about, and practice using the STAR — situation, task, action, result — method). Brush up on algorithms and think of edge cases. Offer: Congrats, you’ve received the offer! What next? Negotiate if you can (competing offers help, especially if they’re lucrative). Also, be sure to ask iIf you need an extension on the offer deadline.

The different types of interview I encountered

Typically, an on-site will cover three main subjects: algorithm, architecture design, and behavioral, which is what I had studied and prepared for. I’ll briefly go over each of the topics I encountered.

Algorithm Interviews

The most common type of interview you will encounter. The interviewer will ask you to solve a problem on a whiteboard.This will assess your knowledge of data structures, sorting algorithms, recursion, time/space complexity analysis as well as pattern and edge-case recognition. In this interview, you will most typically come up with a brute-force solution, and then try to improve upon that solution and discuss the tradeoffs, if there are any, with the different solutions you propose.

This was the bread and butter of my preparation. Every day, I solved algorithms on a hang-up whiteboard, analyzed their time/space complexity as well as trying to understand what happens at each line of code.

Personally, I really enjoy whiteboard algorithms because I don’t necessarily have to worry about writing compilable syntax (most of the time), and that lets me focus solely on the problem at hand. Other people may dislike whiteboarding, but to them I’d say to practice it consistently and it may change their mind.

System Design Interviews

This is an interesting interview that I always looked forward to. The interviewer will ask you to design a system (on a whiteboard of course) similar to Google calendar, tiktok feed, facebook messenger, amongst other common systems.

You are being assessed on how you take a broad concept and design a system that meets all the requirements and constraints. It’s up to you as the candidate to ask the right questions. These will define the requirements and constraints. This interview is more of a conversation mixed in with some drawing diagrams. Everything is quite high-level, so you won’t be writing any actual compilable code.

Naturally, you should steer the conversation to cover your knowledge of how systems work. I am a full stack engineer, so I talked about architecture patterns, client server interaction, modularization of functionality, how to scale the API endpoints, design database and such.

Behavioral Interviews

The interviewer will ask you questions about yourself and how you deal with certain types of situations. The preparation for this one isn’t as difficult as the others but does require a lot of introspection on your behalf.

The questions are typically along the lines of:

​ ​ ​​•​ ​ ​​How do you deal with failure?

​ ​ ​​•​ ​ ​​What is your biggest weakness?

​ ​ ​​•​ ​ ​​How do you resolve conflicts?

​ ​ ​​•​ ​ ​​What would you do differently?

Just be genuine, show passion for your work, own your flaws, show initiative for improvement and you’ll do fine. I recommend practicing using the STAR (situation, task, action, result) method.

How you should prepare

During my preparation, I always knew that interviewing would be challenging. But I had no idea how hard it actually would be until I was knee-deep into my first interview.

In the lead-up to the interviews, I had used both paid and free services, which simulated coding and whiteboarding interviews over the phone with people who had experience interviewing candidates in the industry. Those practice interviews were essential for priming me for the pressure I’d feel. But as I later realized, they only amounted to a fraction of what a real interview consists of.

I’d advise against interviewing at your dream job without having a few mock or real interviews under your belt. The nervousness can be incredibly overwhelming, and it can only be dulled through practice.

As with many other things in life, practice will improve your confidence.

Even if you’re already a great programmer in your day job or getting great grades, those skills don’t exactly transfer 1:1 when you’re in a tiny interview room. Persistence, repetition, and consistency with interview preparation and practice will be the key determining factors for your outcome.

If anyone were to ask me what would be areas to focus on, I’d suggest the following:

Learn to write code by hand on paper and a whiteboard first and then throw it into an IDE for syntax highlighting, this should become second nature to you.

Develop deep knowledge of data structures, their strengths, and weaknesses in comparison to each other. I discovered that implementing data structures and their behaviors from scratch taught me so much more than what I knew from their abstract concepts.

Completely understand Big O notation for both time and space complexities, this will pair perfectly with your algorithm and sorting questions.

Grasp all major sorting algorithms because the difference in time/space complexities have the potential to derail your optimum solution for an algorithm you’re trying to solve.

When to start

Depending on your timeline, you may want to start sooner than later. A lot of the companies I interviewed with had a 12 month cooling period before a failed candidate could reapply. On the flip side, if you know you won’t be ready within a year, you may as well start the process now and get a small taste of what it’s like to go through the interview process so when you are ready, it won’t be nearly as scary. Typically, I have seen people take 3–6 months to move into a new role.

Don’t worry, you’ve got this!!

Resources

Algorithms

​ ​ ​​•​ ​ ​​LeetCode

​ ​ ​​•​ ​ ​​Cracking the Code Interview

​ ​ ​​•​ ​ ​​Interview Cake

​ ​ ​​•​ ​ ​​HackerRank

​ ​ ​​•​ ​ ​​AlgoExpert

Mock Interviews

​ ​ ​​•​ ​ ​​Interviewing.io

​ ​ ​​•​ ​ ​​Pramp

System Design

​ ​ ​​•​ ​ ​​System design primer

​ ​ ​​•​ ​ ​​Grokking the System Design Interview