PhD Research and Engineer Interview Prep
This is an ultimate guide based on multiple software developer and research engineer who successfully find their job in top tier companies. I gathered and put them together. During my preparation and discussions with other candidates, I discovered that though there’s a lot of information about interviewing, some of the critical details are missing or hidden deep inside experience posts. Details like communicating your story, communicating your level through system design, or negotiating the offer when the time comes. This article will be a sum total of all the resources I used and the experiences I gained.
Who should read this article
- Experienced Software engineer
- Applying for an Individual Contributor role at big tech companies (i.e. Google, Meta, Microsoft, Apple, Amazon, etc.)
- Targeting mid to senior engineering level
Motivation
Engaging in the job search and interview process can be a daunting experience, as many people express their dissatisfaction with the perceived flaws in the system, often yearning to expedite the entire ordeal. While I acknowledge the imperfections in the interview process, I believe we can leverage this imperfect system to our advantage through strategic planning and consistent effort.
Furthermore, by adhering to the blueprint outlined in this article, embarking on a job change could result in several significant benefits:
- Elevate your compensation: Numerous individuals have witnessed a substantial increase in their earnings, ranging from 30% to an impressive 200% upon changing jobs.
- Advance your career: Effectively communicating your narrative and excelling in system design interviews can propel you towards positions at or above your current job level.
- Discover a job that genuinely intrigues you.
Drawing from my observations of friends navigating the job market, I am confident that if you excel in your current role, you can secure a new position that aligns with your passions. This is particularly true in the current job market, where major tech companies are actively seeking candidates.
Still skeptical about the potential for increased pay? This article a valuable insights is presented that might change your perspective. While it’s true that following this blueprint requires a slightly higher time commitment, the investment of time and effort is well justified by the substantial benefits it can yield.
Interview Process Overview
Recruiter Call → Phone Screen → Onsite Interview (4–6 sessions) → Offer stage
Recruiter call
This is typically a 15–30 minute call with a recruiter to discuss your interest in the company. Before talking with any recruiters, you should already have clarity on your goals for your next job. (Which you have listed as a part of your story). This call aims to communicate those goals and your story and discuss a potential mutual fit.
Also, remember that once a recruiter schedules interviews for you, they will be your biggest ally and a friend throughout the process. Well, at least until negotiation begins. (I hope you realize that they have a vested interest in you succeeding in the interviews and signing an offer.) You should feel free to ask them for any help or resources you need. Most of the resources and links in this blog are provided by recruiters I worked with during my job search.
Post this call, you will move to the phone screens.
Phone screen
This interview is typically a 45 to 60-minute video call with a software engineer where you are expected to share your screen and code live on a text editor. You will likely work on a DS/Algo problem. And for most companies, this round is an elimination round as the intent is to decide whether the company should invite you onsite (on their campus) for interviews. Note: You should clarify with your recruiter what to expect.
Before doing these interviews, you should be thoroughly prepared for the Algorithm interviews. Your objective for this interview is to demonstrate your technical ability, ask insightful questions to your interviewer after the coding portion, and move forward to the onsite.
Onsite interviews
The onsite typically last between 4 to 6 rounds at the company campus itself, but the global pandemic has pushed this to be conducted virtually. This is an advantage for the candidate as now we can stagger and schedule rounds for the time that works well for us and not be forced to use our vacation days for every onsite.
You will face algorithm problem solving, system design, and behavioural and experience interviews. You should be excited to meet many people and enthusiastically demonstrate your technical skills. The objective for the onsite is to give strong positive signals and data points to move forward to the offer stage.
Offer stage
You’ve made it this far! At this stage, all you need to do is to determine whether this is the right opportunity for you and to negotiate the package that makes you happy and excited to sign and join.
Preparation
Resume
Make sure you make a clean and polished resume. Ideally, most of the bullet points in your resume should follow the XYZ format.
“Accomplished [X] as measured by [Y], by doing [Z].”
Related resources:
- Youtube: How to: Work at Google — Resume Tips
- Youtube: Create Your Resume for Google: Tips and Advice
- Aticle: Formula for a Winning Resume
Network and Linkedin
I believe most of my readers are already on Linkedin and have an all-star LinkedIn profile. If not, the first thing you should do is create an all-star LinkedIn profile.
While we are on this topic, I would recommend all of you to go and enable open opportunities with the privacy setting as only recruiters on your LinkedIn. You can find the steps here. [Make sure the privacy is to set recruiters only and not public.]
The second reason to have a decent Linkedin profile is to build a network that supports you and may have connections that could refer you to the companies you are interested in. Referrals are the best way to get noticed and start the process. Followed closely by starting a conversation with the recruiters that reach out to you. Direct applications should be your last resort.
Recruiter conversation
This is usually the first conversation you have with the company. As already mentioned in the above section, your recruiter will be your ally and a friend throughout the process. Well, at least until negotiation begins. You should understand that not all recruiters are created equally, and some are better than others. But you should remember to always be cheerful, polite and classy. Make your recruiter part of your team and work with them to get your desired package.
A recruiter may ask at this stage what your expected compensation is. I personally would recommend against giving any numbers this early. Instead, focus the discussion on determining mutual fit and levelling. It’s better to discuss numbers at the offer stage. If a recruiter keeps pushing, you can tell them a range at the top of your level* and make sure to emphasize that you know the company is competitive and you are sure that a mutual agreement can be reached.
*You can use levels.fyi to get an idea of what the salary ranges are for your level. Also, look at the negotiation section in this article if more information is needed.
The interviewer’s job is to get as many signals and data points as possible.
Coachability signal: This signal accounts for how well the candidate responded to hints and feedback, whether they were open to feedback, and whether they leveraged the feedback to improve their solution. This signal is typically analyzed during both problem solving and system design interviews.
Coding signal: This signal accounts for — how deeply does this candidate understand, and how effective are they at actually coding? This is analyzed during the Problem-solving interview.
System design: This signal accounts for — is this candidate experienced and capable of designing and leading a large technical system? This is analyzed during the systems design interview.
Collaboration and Management signal: This signal accounts for — is this candidate capable of either working with or managing a group of people. This signal also accounts for the candidate’s experience in collaborating with or managing large teams. This is analyzed during the behavioural/experience interview.
General Interview tips
These are some critical things if you didn’t have sufficient time to go through them:
- Talk through your thought process about the questions you are asked. In all of the interviews, interviewers evaluate your technical abilities and how you approach problems and how you try to solve them.
- Ask clarifying questions if you do not understand the problem or need more information. Many interview questions are deliberately underspecified because interviewers are looking to see how you engage the problem. In particular, they are looking to see which areas leap to your mind as the most critical piece of the technological puzzle you’ve presented.
- Think about ways to improve the solution you’ll present. In many cases, the first answer that springs to mind isn’t the most elegant solution and may need some refining. It’s definitely worthwhile to talk about your initial thoughts to a question, but jumping immediately into presenting a brute force solution will be received less well than taking time to compose a more efficient solution.
- You should have a few questions prepared for the interviewer. It goes a long way when you’ve taken the initiative to research the company before your interview.
Other resources: Google Recruiters Share Technical Interview Tips (30 min)
problem solving
Programming Languages: Most companies do not require that you know any specific programming language before interviewing for a technical position, but familiarity with a significant language is generally a prerequisite for success. Not only should you be familiar with the syntax of a language, but you should also be familiar with some of the languages’ nuances, such as how memory management works, the most commonly used collections or libraries, etc.
Data Structures: You’ll be expected to understand the inner workings of common data structures and be able to compare and contrast their usage in various applications. You will be expected to know the runtimes for common operations and memory use.
Algorithms: Your interview will not focus on rote memorization; however, understanding the most common algorithms will likely make solving some of the questions we ask a lot easier. Knowing the runtimes, theoretical limitations, and basic implementation strategies of different classes of algorithms is more important than memorizing the specific details of any given algorithm.
Coding: Expect to be asked to write syntactically correct code — no pseudo code. A few missed commas or typos here, and there aren’t that big of a deal, but the goal is to write code that’s as close to production-ready as possible. This is your chance to show off your coding ability.
Related resources:
- Youtube: Example of a Google Coding Interview (24 min)
- Youtube: Ask a Google Engineer — What is the Interview Process at Google? (2 min)
- How to prepare for a Google Engineering Interview (7 min)
Data structure and Algorithm
Algorithm and Data structure interview
Hacking algorithm and data structure essential for interviews.
Algorithm Practice Problems
Practice questions with answers for Algorithm design, graduate studies.
My recommendation is to first understand the interview framework, then understand the foundations and concepts and finally deep dive into algorithms. Here is the recommended plan:
Understand the framework
The first step is to understand the problem solving framework. Cracking the Code Interview (CTCI) is the best resource for this. Read chapters 1 to 7. These chapters thoroughly break down the framework for solving the algorithm interview. Internalize these chapters and apply this methodology when solving any algorithm question in an interview.
Review Foundations
Review foundations by reading the following chapters in either CTCI or EPI. Here are some of the topics from the top of my mind: Strings, Arrays, Linked Lists, Stacks, Queues, Heaps, Trees, Hash Tables and Maps, Searching and Sorting, Recursion, Dynamic Programming, Greedy Algorithms, Graphs and graph traversals.
Deep dive into algorithms:
- If you have to start fresh or haven’t reviewed Algorithms in a while :
- – Coursera — Algorithms, Part 1 — Follow the lectures and code the algorithm, ds in a word doc after every lecture. [I recommend watching at 2x]
- – Coursera — Algorithms, Part 2 — This is optional as only a couple of companies (like Google and Directi) expect advanced algorithm concepts.
- If you had studied DS and Algorithms recently and are only reviewing the concepts, then review the top few articles for each DS and algorithm on geeks for geeks.
- – Geeks for geeks — Data Structures
- – Geeks for geeks — Algorithms
Other resources for DS, Algo and coding fundamentals
- bigocheatsheet
- Book: Beautiful code
- Book: Elements of Programing Interview
- Coding Interview University
- Course: Udacity — Intro to Algorithms
- MIT Open courseware — Introduction to Algorithms (not very efficient)
- Google Style Guides for: C++, Python, Java
Coding practice
When you practice, do not use an IDE. You need to be able to write legible, compilable code without help regarding the layout or spelling of standard library class/method names. I suggest solving algorithmic/DS problems on a word document or on paper to simulate an actual interview.
Note: Some companies may have an integrated IDE in the browser window, but most don’t, so it is safer to practice on a standard word document.
If you are new to DS and Algorithm coding, follow the interview bit programming course
Otherwise, you can just solve the blind list: 75 practice questions on leetcode. This list of problems covers various topics to get you ready for any coding interview.
Another option is to subscribed to https://www.dailycodingproblem.com/
Other resources for additional practice:
Machine learning, data analysis practice
This step, is very dependent on the team that you are trying to apply. Try to find their recent work in Google scholar or their project page, and try to get familiar with the problems they are trying to solve. For the usual ML/data science, I recommend going over this series available in Upaspro.
Mock interview
Mock interviews are the best way to get into the rhythm of interviewing. I recommend doing a few mock coding and system design interviews every week you prepare. This will make sure you know how you are tracking and the areas of improvement. You can use the following sites for Mock interviews:
- pramp.com — free mock interviews for Problem solving
- interviewing.io — paid
Behavioral and experience interview
Most people don’t prepare much for this interview. They feel like the questions are random, and I understand that it’s challenging to make it a priority with all your other todos. But I believe that this interview can make or break the decision to hire you.
The interviewer wants to understand two things:
- Are you a culture fit?
- What is the right level for you?
I recommend preparing 5–6 strong work examples and stories that share data points with strong positive signals. This will ensure you can answer the interview question while maintaining an excellent flow of information. These work examples need not be fancy or complex. What matters most is that the example is well received and understood by the interviewer. Plus, well-prepped stories are compelling, and the interviewer can see how you feel and can resonate with them. Also, stories are a great way to illustrate your experience, which is crucial in deciding the level.
Here is a sample question where you can demonstrate your experience applying customer obsession: Discuss a time when you went above and beyond for a customer?
There are multiple ways to answer the above question; I recommend following the STAR method while answering any Leadership principle related questions. STAR stands for “Situation — Task — Action — Results” read more on STAR method.
Negotiating the best offer
Commendable job on making this far! Once you have got the offers, you can interview the team and the company. You may want to meet the managers and teammates multiple times before making any decision.
You can met different managers at Google before making your team decision. After meeting them, you had follow-up meetings/chats with the ones that had you interested. So, this was basically a reverse interview. There is an upside if your manager really wants you; the recruiter has an ally for getting you a more suitable offer now.
Note: At some companies like Amazon, you will get to meet only the team/hiring manager for the role you applied to. This is because hiring is mostly driven by the team and not a company-wide level for these companies.
One thing you should do before meeting the Hiring managers is to list down around 7–10 questions that you would want to ask if time permits. These questions can range from general to very team-specific or technology-specific questions. These questions should be designed to gather more information about the team, technology, and manager to make an informed team decision.
An hour or two of research on negotiating could net you an additional 10–30% pay bump. I would say definitely worth your time!
There is a lot I want to say about negotiating, but I feel it would be best for you to follow these articles:
Once you have read through the above articles, here are a couple of points I want to re-emphasize:
- Know your worth and target level (use levels.fyi)
- It is better to negotiate over an email than over a call.
- Best negotiators are the ones who are ready to walk away
Other great (but long) resource: Salary Negotiation
Resources
- Cracking the Code Interview (CTCI)
- Coursera — Algorithms, Part 1
- interview bit programming course
- the blind list: 75 must do questions on leetcode
- Grokking the system design interview
- pramp.com — free mock interviews
- Experience interview questions
- STAR Method
- The ultimate Software Engineering job search guide
- Ten Rules for Negotiating a Job Offer
- How Not to Bomb Your Offer Negotiation
Join Upaspro to get email for news in AI and Finance