Detailed guidance on the Google Software Engineer interview process - with a breakdown of different stages + interview questions asked at each stage, and deepdives on Google-specific interview expectations such as Googleyness.
Google Software Engineers are responsible for designing, developing, testing, deploying, maintaining, and improving software used literally by billions of users. There is an expectation to be clearly "beyond the average", and this is reflected in a challenging interview process.
As a minimum expectation, you're expected to be extremely competent at coding (the language itself doesn't particularly matter), and in writing this elegantly, readably and robustly. If you're interviewing for a more senior role, you're also expected to be good at architecting large scale systems which work reliably and predictably in solving for user needs. And finally - Google has a strong preference for candidates who fit well within their culture, and make no secret of this fact. If you're a brilliant a** -- it's unlikely you'll receive an offer.
The interview process is designed to filter "in" candidates who meet this bar.
The Google Software Engineer interview consists of 3 rounds.
Round 1: Recruiter screen. Short discussion, mostly to filter out those who clearly don't meet the bar in experience, relevant skills, motivations etc
Round 2: Technical phone screen. These are largely Coding/DSA (Data Structures and Algorithms) style interviews.
Round 3: Onsite loop. This includes 4-5 interviews with increasing difficulty as you interview for more senior roles. Junior/entry roles over-index on coding skills, and more senior roles on system design and architecture. One of the rounds will always be behavioral.
The Google Software Engineering interview guide - in a concise video
Practice with a Google SWE→ View Coach
This is the first round of the Google Software Engineer Interview. A short call with a recruiter, they will primarily talk about your past work and background, and potentially deepdive a bit into projects you've worked on. They're responsible for all scheduling/coordination which comes after (although they involve recruiting coordinators in this process too), so it's useful to establish a good footing with them since they can provide great insight into what Hiring Managers care about especially if you're interviewing for a specific team rather than the generalist pool.
Questions often asked by Google Recruiters to engineers during the phone screen:
- Tell me about yourself.
- What do you hope to learn while working at Google?
- What are you looking for in a workplace?
- What is your favorite project that you have worked on?
- What inspired you to learn programming?
Watch these videos
The second round of the Google Software Engineer interviews consists of phone screens with software engineers. Technical interviews are 45-60 minute coding interviews and test your basic coding skills through 2 questions. You will be required to share your screen and write the code on a Google Doc. Questions will be asked from the following topics -
- Data Structures - topics such as BST, Linked List, Recursion
- Dynamic Programming
- OOP fundamentals
- Graph theory
Keep in mind, if things go "just OK" and your interviewer can't make a clear "hire" or "progress" recommendation, you might get invited for a 2nd technical phone round.
- A very important thing about interviewing for the Software Engineering role at Google - you will have to code on Google Docs or a similar text editor. Therefore, many features such as indentation and syntax auto-complete will not be available. Also, since you will not be able to compile the code, it is recommended that you get enough practice so that you are comfortable during the interview.
- It has been observed that many questions are basically Leetcode Mediums, so practicing them can help you be better prepared for the Google Software Engineering interview. Having said that, Google interviewers frequently create their own questions, so you need to be excellent at the fundamentals, just learning answers by rote is a tactic that will leave you relying more on luck than skill.
- Finally - there is a lot of mixed feedback on whether Dynamic Programming questions actually come up in Google interviews. The official guidance has fluctuated on this topic too. We've had candidates as recent as last week share they got a Dynamic Programming question though, so we would strongly recommend being prepared for this.
Here are a few sample interview questions asked recently from Google SWE candidates:
- Write code to check if three given binary trees are identical.
- Write a program to reverse a linked list.
- Write a code to find the longest sequence in a binary tree.
- How to Traverse a Binary Search Tree?
Ace your Google SWE Interview Prep!→ Book a Session
Read these articles
The onsite round of the Google Software Engineer Interview is generally considered the toughest round. In this round, you will have 5 interviews with various executives of the company. Out of these, 4 will be technical interviews that will test your programming skills, and 1 will be the ‘Googlyness’ interview. As you progressively interview for more seniority, the coding rounds will be replaced with System Design rounds. For a Staff level engineer interview, for instance you'll usually have 1-2 coding and 2-3 system design rounds -- whereas in more entry level roles you will have no System Design interviews at all.
Google Software Engineering coding interviews
Each technical interview will last for 45-60 minutes. The following topics are tested in the technical interviews -
- Coding: You should know at least one programming language really well, preferably C++, Java, Python, Go, or C. You will be expected to know APIs, Object Orientated Design and Programming, how to test your code, as well as come up with corner cases and edge cases for the scenarios you're solving for. It's important to talk out loud to demonstrate you get things conceptually rather than leaving an impression you've memorized solutions.
- Algorithms: Approach the problem with both bottom-up and top-down algorithms. You must. be able to identify the complexity of an algorithm and think of ways to iterate to more efficient solutions. Frequent concepts which will involve algorithms will include sorting (plus searching and binary search), divide-and-conquer, dynamic programming/memoization, greediness, recursion or algorithms linked to a specific data structure. Know Big-O notations (e.g. run time) and be ready to discuss complex algorithms like Dijkstra and A*. Much as above - make sure to talk out loud and walk your interviewer through the approach you're intending to take before writing code.
- Sorting: Be familiar with common sorting functions, where they fit best, and the sort of input data they're best suited for. Be aware of their efficiency both in in terms of runtime and space used. For example, in exceptional cases insertion-sort or radix-sort are much better than the generic QuickSort/MergeSort/HeapSort answers, and you're expected to be aware of this sort of nuance
- Data Structures: You should study up on as many data structures as possible. Data structures most frequently coming up in interviews reported by candidates are arrays, linked lists, stacks, queues, hash-sets, hash-maps, hash-tables, dictionary, trees/binary trees, heaps and graphs. You should know the data structure inside out, what their intended usecases are, and the sort of algorithms which frequently leverage them.
- Mathematics: Some interviewers ask basic discrete math questions. This is more prevalent at Google than at other companies because counting problems and probability challenges are "frequent events" to think about when working there. We'd recommend refreshing elementary probability theory and combinatorics. You should be familiar with n-choose-k problems and equivalent
- Graphs: Don't rule out graph algorithms since they can often be the most efficient solution for a problem you're presented with. Sometimes using graph conceptuals such as distance, search, connectivity, cycle-detection, etc end up being the most efficient answer. There are three basic ways to represent a graph in memory (objects and pointers, matrix, and adjacency list) — be familiar with each representation and its pros and cons. You should know the basic graph traversal algorithms, breadth-first search and depth-first search, their space/time complexity, tradeoffs involved as well as how to implement them in code.
- Recursion: Many coding problems involve thinking recursively and potentially coding a recursive solution. Use recursion to find more elegant solutions to problems that you might first instinctively solve via brute force / iterative logics.
Google Software Engineering System Design interviews
System design questions are used to assess a candidate's ability to engineer an architecture to a real-world customer problem (which can be solved via technology!), in a way that scales to literally billions of users. This is a very wide ranging topics which can cover features sets, interfaces, class hierarchies, distributed systems, designing a system under specific constraints, simplicity, limitations, robustness and tradeoffs.
It's also useful to have an understanding of how the internet actually works and be familiar with the various pieces (routers, domain name servers, load balancers, firewalls, etc.)
2. Googlyness Round for Google Software Engineer role -
At Google, interviewers are on the constant lookout for people with a purpose and who are eager to make an impact. This round helps the interviewers do this, and assess whether you are a good fit for the company or not. This is a non-technical round wherein you will be asked scenario-based questions regarding the workplace i.e. how you will handle commonly faced situations while working there. Your personality will be reflected through your answers, which will act as an important factor in your selection when it comes to the Google Software Engineering role.
Sample Google Software Engineer Behavioural Interview Questions -
- Are there any projects that you regret working on? Why?
- What is your favorite Google product? What would you do to improve it?
- How did you resolve a conflict at the workplace?
- Talk about a project you completed successfully.
Sample Google Software Engineer Coding Interview Questions -
- Write a program to print the first non-repeated character from a given string with minimum complexity.
- Write a function to reverse a string using recursion.
- Given a square 2D matrix containing X’s and O’s, find the largest square containing X but not O.
- Which is the best data structure to implement an autocomplete feature? Demonstrate with the help of a code.
- Find the longest consecutive subsequence in a given array.
- Find the number of pairs from the given array that add up to 10.
- Write a function to remove an element from a hashed-linked list.
- Write a code to implement an iterator over a binary search tree.
- Design an algorithm to find a path from one node in a binary tree to another. Find the K closest integers to X from a given array, where K and X will be user inputs.
- Write a code to construct a binary tree that is a mirror of the given binary tree.
- Find the largest palindrome in the given string.
- Write a code to check if the parentheses are balanced in the given string.
- Given two binary numbers in the form of strings and in reverse, calculate their sum.
As a software engineer at Google, you open your doors to a plethora of tech career paths. Google enables both IC and People manager career paths.
As an IC, you'd progress from Software Engineer --> Senior Software Engineer --> Staff Software Engineer --> maybe even Principal. The expectations of impact within and outside your scope increase significantly at each level.
As a people manager, once you hit a Senior Software Engineer role, you can also branch into managing engineers -- and transition into an Engineering Manager role. The career path for this is typically Software Engineer --> Senior Software Engineer --> Engineering Manager --> Senior Engineering Manager --> Director of Engineering. In this context the expectations evolve from contributing individually to empowering your team to contribute to their maximum potential.
The salary of a Google Software Engineer has a really wide range. An entry-level SWE gets a total compensation of around 192,000 USD and goes up to 356,000 USD for a senior-level SWE position. For staff SWEs, the salary hovers at around 670,000 USD and a Principal Engineer (having 10+ years of experience) gets a total compensation of about 1.02 million USD. This can be broken down into a base salary of 331,000 USD, 572,000 USD in stock, and 119,000 USD as a bonus.