Software Engineering Job Search Guide
I am a software engineer and have worked for both Microsoft and Google. I was on a 120-day job search, attended more than 30 interviews and received multiple offers. I learned from my discussions and preparation that although there is a lot of information on interviewing, many of the crucial details are not included in experience posts. These details include communicating your story, communicating your level through the system design, and negotiating the offer.
I kept track of every resource and step that led to me receiving offers from tech companies. This article will include all of the resources and experiences that I have used. My goal was to create a guideline and a map that can be used by every candidate when they are looking for a job.
- Software engineer with experience
- Application for a role as an individual contributor at big tech companies (i.e. Google, Meta Microsoft, Apple, Amazon, and so on.
- At the mid-to-senior engineering level
Note: Please drop your comments or DM me if you’re interested in similar posts for junior developers. If there are many interested people, I may make one for junior developers.
People I speak to hate the job hunt and the interview process. Most people I talk to hate the job search and interview process.
A clear motivation is that, if you follow this article’s blueprint, and make the job switch, you will be able to:
- Increase your compensation. When they switch jobs, I’ve seen compensation rise from 30% to 20%.
- Your career can be improved. You can reach higher levels by communicating your story and passing the system design interview.
- Find a job you are truly interested in.
Based on the experiences of others who have found new jobs, I believe that if your current job is doing well, you will be able to find a new role that you love. It is a candidate’s marketplace, with all major tech companies hiring.
You don’t think you can get that much more? You can look at this analysis by Matthew Dean in the article.
This blueprint will require a higher level of time commitment, but it is well worth the effort.
The Interview Process Overview
This is how the interview process looks like:
Recruiter Call– Phone Screen – Onsite Interview (4-6 Sessions) – Offer stage
This call is usually a 15-30 minute conversation with a recruiter to discuss the company’s interest. You should have a clear understanding of your future goals and have included this information in your story. The call is intended to share your goals and tell your story, and possibly find a mutual match.
Remember that recruiters will schedule interviews for you and be your greatest ally and friend during the entire process, except until negotiations begin. Recognize that recruiters have an interest in your success in interviews and in signing an offer. Ask them for any assistance or resources that you may need.
After this call, you’ll be transferred to the phone screens.
The interview is usually a 45- to 60-minute video chat with a software engineer. During this call, you will be expected to share your screen and to code on a text editor. Most likely, you will be working on a DS/Algo issue. This round is considered an elimination round by most companies. The purpose of the round is to determine whether or not the company invites you onsite (on their campuses) for interviews. It is important to clarify what you are expecting with your recruiter.
You should prepare for the algorithm interviews before you go to these interviews. After the coding section, your objective is to show your technical abilities and ask questions. Then, you will move on to the onsite interview.
The onsite usually lasts 4-6 rounds on the company campus, but due to the pandemic it is now possible to conduct them virtually. This is a benefit for the candidate because we can now stagger and schedule rounds at a time that suits us best and not have to use vacation days for every round.
Your tasks will include algorithm problem solving, system design, behavioral and experience interviews, as well as system design. You must be enthusiastic to meet new people and demonstrate technical skills. You will need to provide strong positive signals and data points in order to progress to the offer stage.
Congratulations! This stage is where you can decide if this is the right opportunity and negotiate the package that will make you happy and excited to join.
Here is a 15-week schedule that assumes you will be interviewing and preparing part-time. This schedule can be adjusted to suit your needs.
Week 1: Understanding the Process and Ramp Up
- To communicate the scope and target level of your story, draft your resume.
- Look into companies that might interest you.
- Get a feel for the interview process and comp ranges.
- Change status to “open for finding a job” using LinkedIn’s privacy settings. Only recruiters can see the update.
Week 2 – DS & Algorithm Foundations
- Check out the section on network, referrals and recruiter connections.
- Make a list of things to do for algorithm preparation. Keep it updated and add something each day.
- Begin solving 2 algorithm problems each day.
- Start talking to recruiters about scheduling phone screens for week 7 and 8.
Week 5-7: System Design Fundamentals
- Make a list of to-dos and check it daily.
- Each day, continue solving 2 algorithm problems.
- To find out where you are at, take the system design readiness testpoint.
Week 8-9: Technical phone screens and mock interviews
- For most companies, complete the phone screens.
- Pramp.io offers mock interviews for system design and algorithm development.
- Recommendations are always welcome.
- For behavioral rounds, draft your STAR examples.
- Start scheduling onsite interviews.
Week 10-13: Ace on Site
- Keep calm and focus, and you will have the best luck!
- After each onsite interview round, ask the recruiter to give feedback.
Week 14-15 – Offer Stage
- Check out the section on the blog titled “Offer Stage”.
- Send me your notes once you have signed.
You can use the above schedule as a checklist/to-do list on this Google Doc. You can make your own copy, and you can check it off as you go.
I recommend following the weekly schedule, copying the Google Doc and marking things off as you go.
Let’s now talk about your career goals. The following questions are recommended by me. We will call them “your story”
- What made you decide to join the last company?
- What was your last job?
- Why are you leaving and why now?
- What are some of the things you’d like to do at your new job, and why?
- What are your other requirements for a job?
Although it may not seem like it right now, many of the steps in the next step will be affected by how you answer these questions. Shortlist potential companies. Based on your story, goals and research, create a list of 7-10 potential companies you would like to interview. There will be some companies that you find more interesting than others. You can divide the list into two categories: target and backup companies. These buckets are useful for scheduling your interviews on-site.
Compensation and leveling
Levels.fyi.com can help you get a feel for the levels and compensation. Talk to your contacts at the company to determine your target level before you apply.
A Word about Resume
A professional resume is essential. Ideally, bullet points on your resume should be in the XYZ format.
- “Complete [X] by measuring [Y], and doing [Z].”
Networking and LinkedIn
Most of my readers may already be on LinkedIn and have a all-star LinkedIn account. You should create a stellar LinkedIn profile if you don’t have one. Because I was contacted on LinkedIn by more than 35 recruiters during my job search, it is why I insist so strongly on having a LinkedIn account. This led to me initiating conversations with 6 companies.
While we’re on the topic, I recommend that all of you enable open opportunities by setting your privacy settings to allow only recruiters to access your LinkedIn. The steps can be found here. [Make sure that the privacy settings are to be set only for recruiters and not for everyone. ]
A second reason to create a LinkedIn profile is to establish a support network and possibly refer you to companies that are of interest to you. Referrals are the best way for you to be noticed and get started in the process. Begin a conversation with recruiters who reach out to you. Last resort should be direct applications.
Tips for recruiting conversation
This is often the first time you speak with the company. Your recruiter is your friend and your ally throughout the entire process. Negotiations will not begin until that point. It is important to understand that not all recruiters will be the same and that some are better than others. Always be polite, cheerful, and classy. Your recruiter should be part of your team. They can help you get the package that you want.
A recruiter might ask you at this point what your expected salary is. Personally, I would not recommend giving numbers too early. Instead, keep the conversation focused on mutual fit and leveling. It is better to talk numbers during the offer stage. You can give a range to the recruiter at the highest level. Make sure you emphasize your competitiveness and that you believe that mutual understanding can be reached.
If you need more information, please refer to the Negotiation section of this article.
The Interviewer’s Viewpoint
You’ve probably been on the other end of the hiring committee or at the interview table.
Interviewers are expected to gather as many data points and signals as possible. Now you might ask, “What are these signals?” A signal is information that shows your skills, knowledge, or experience.
When I interview someone, I look out for these signals:
This signal measures how well the candidate responds to hints and feedback. It also shows whether or not they are open to receiving feedback and whether they use the feedback to improve their solution. This signal is usually analyzed in both system design and problem-solving interviews.
This signal shows how well a candidate understands coding and how efficient they are at it. This information is collected during the problem-solving interview.
This signal answers questions like “Is the candidate capable of leading large technical systems?” This information is discussed during the interview for systems design.
Management and Collaboration Signal
This signal answers questions like “Is the candidate capable of managing or working with a team of people?” This signal also includes the candidate’s ability to manage large teams or collaborate with them. This is analyzed during the behavioral/experience interview.
Different companies also look for other signals. Companies like Amazon and Google look out for signals that account for navigating through uncertainty.
You now know what interviewers are looking for in a candidate. Your job is to show seniority and fit for the role during every interview.
Interview Preparation: Data Structures, Algorithms and Problem Solving
Interviews for tech jobs can be difficult. Imagine being asked to communicate your thoughts and ideas in a 45-minute interview.
You can improve your skills with practice and preparation. Preparation includes:
- Understanding what to expect during an interview
- Grasping DS fundamentals and algorithms
- To communicate effectively, you must stick to a structure.
Interview on Problem Solving
While most companies don’t require you to know a specific programming language in order to interview for technical positions, it is a good idea to be familiar with the basics of a language. You should not only be familiar with the syntax, but also with some of its nuances. For example, how memory management works and the most popular collections or libraries.
It is expected that you will be able to comprehend the inner workings and compare their use in different applications. Common operations will require you to be familiar with the runtimes and memory usage.
Although your interview will not be focused on rote memorization, it will help you to understand the most common algorithms and solve some of the questions that we ask. It is important to understand the basic concepts, limitations and implementation strategies of different algorithms.
Expect to be asked for syntactically correct code. No pseudo code. Although there may be a few typos or missed commas, the goal is to create code that is as production-ready as possible. This is your opportunity to showcase your code skills.
Data Structure and Algorithm Foundations
First, understand the interview framework. Next, understand the concepts and foundations. Finally, dive deep into the algorithms. This is my recommended plan:
- Understanding the problem-solving framework is the first step. Cracking The Code Interview (CTCI), is the best source for this. Chapters 1 through 7 are available. These chapters provide a detailed breakdown of the framework to solve the algorithm interview. These chapters can be absorbed and used to solve any interview question relating to algorithm.
- The following chapters from EPI or CTCI can be used to review foundations. These are just a few of the topics that come to mind: Strings. Arrays. Linked Lists. Stacks. Queues. Heaps. Trees. Hash Tables. Maps. Searching and Sorting. Recursion. Dynamic Programming. Greedy Algorithms. Graphs. And graph traversals.
- Deep dive into algorithms
- You may need to start from scratch or review algorithms for the first time in a while.
- Coursera – Algorithms Part 1: Watch the lectures and then code the algorithm, DS, in a word doc following each lecture. I recommend that you watch at least 2x.
- Coursera, Algorithms Part 2: This option is optional because only a few companies (like Google or Directi) require advanced algorithms concepts.
- If you have not studied DS or algorithms in a while and only want to review the concepts, then go through the articles on geeks for geeks that cover each DS/algorithm.
- Geeks for Geeks – Data Structures
- Geeks For Geeks – Algorithms
- You may need to start from scratch or review algorithms for the first time in a while.
Additional resources for DS, Algo, and Coding Fundamentals:
- Book: Beautiful code
- Book: Elements Of Programming Interview
- Coding Interview University
- Course: Udacity. Intro to Algorithms
- MIT Open Courseware – Introduction To Algorithms
- Google Style Guides C++ Python Java
Practice is better than an IDE. Without any help with the spelling or layout of method names/library classes, you must be able write legible and compilable code. To simulate an interview, I recommend solving algorithmic/DS issues in a word document.
Note: While some companies might have an integrated IDE, most do not. It is safer to use a standard word document.
Follow the interview bit programming course if you’re new to DS or Algorithm coding.
You can solve the Blind List: 75 practice questions at Leetcode. This problem list covers a variety of topics that will prepare you for any coding interview.
Apart from my practice and preparation, I enjoy solving random coding problems every day.
Additional resources to help you practice your skills:
- Google Code Jam
System Design Interview Preparation
The system design interviewer is likely to be a senior engineer. He’ll ask you open-ended questions like “Implement flight booking systems” or “Create an Instagram feed.”
Your goal is to lead the discussion for 60 minutes, identify the problem requirements and create a solution. This is your chance to show off your technical leadership skills and knowledge.
System Design Interview Mindset
I’ve had conversations with many people who were preparing for the interview and realized that they think this is a way to build hypothetical systems. This is evident when candidates make statements like “wouldn’t do in real life” and end up overlooking the more serious technical issues they see because they think this is just an exercise. This sends the wrong message to the interviewer who may believe that you didn’t see the technical problem.
This mindset must be changed. Let’s not build hypothetical systems. Let’s create a real one. Imagine yourself driving through a real work meeting during an interview. This meeting is designed to solve the problem through brainstorming and creating a roadmap.
Your goal at the end of this one-hour interview is to have a design plan and roadmap divided into tasks among a team. This is the Northstar goal. However, most interviews will only require the technical design with tradeoff.
This small shift in your mindset will make a big difference in how you approach interviewing. Instead of being passive participants in a hypothetical discussion you will be able to lead the discussion and create a realistic design.
Framework for HLD Interviews
Personally, I follow a structure that divides this interview into three phases.
- Gathering of requirements
- Trade-offs and technical design
- Deep dive and other possible improvements
This step-by-step guide explains it better.
HLD Knowledge Expectation
- Databases You will be more prepared if you are more familiar with the workings of relational and non-relational database and what trade-offs there are between them. Most companies assume no particular level of expertise.
- Scaling and distributed computing: While most companies have tools to help with scaling, it is important to be familiar with the basics of distributed computing. Understanding topics like service-oriented architectures and distributed caching can help you design a better solution for the more complex distributed architecture questions that you may encounter.
- Networking topics and Internet: Most companies expect engineers to understand the basics of the internet. It might be worthwhile to learn more about browsers at a high-level, including DNS lookups and socket connections. Although they don’t require network engineer qualifications, a good understanding of the basics of how the web works and their working methods is essential.
Recommendations for Learning
You can solve the Grokking system design interview questions and then review the provided solutions. This is a great resource to learn how to lead excellent system design discussions.
If you are looking for more information, the Course Hired In Tech – System Design can be a great resource.
HLD Mock Interview Readiness Testpoint
Before you start preparing for mock interviews, answer these questions.
- What are the reasons to choose a SQL DB instead of No SQL?
- What are the different data stores that can be used to store images? What are the most important things to look out for when choosing your image data store
- Long polling vs web-sockets
- Is there a way to speed up repeat read calls?
- Caching’s disadvantages
- What is a CDN and how do you use it? What is a CDN and when should it be used?
- What is the CAP Theorem?
- How does HDD, SSD, RAM and network calls compare?
- What is availability and reliability? What would be the best way to measure availability and reliability for a system
- What happens behind-the scenes when you click on a link? What do these terms refer to: DNS lookup, TCP/IP?
Design for the low-end
Note: This round is not available to all companies. Make sure you check with the companies that are interested in this round. Google and Amazon presented me with LLD questions.
A working knowledge of some common design patterns is necessary. You must also know how to create software objects-oriented with the appropriate use of inheritance or aggregation. Although you won’t likely be asked to explain the specific design patterns, expect to be required to defend your choices.
LLD Mock Interview Readiness Testpoint
- What is concurrency? Are you able to understand cohesion?
- These design patterns are essential to know how to use:
- Strategy pattern
- Observer pattern
- Method for factory
- Singleton pattern
- Inheritance vs. aggregation
Mock interviews are a great way to get into the groove of interviewing. Every week, I recommend that you do a few mock coding or system design interviews. This will help you track your progress and identify areas for improvement. These sites can be used for mock interviews:
- Pramp – Free mock interviews to help with problem-solving or HLD system design
General Tips for Interviews
You should now have all the information I plan to share through CTCI and Grokking’s system design. If you don’t have the time or patience to read them, these are important things.
- Discuss your thoughts about the questions being asked. Interviewers will evaluate your technical skills, how you approach problems and how you solve them in all interviews.
- If you don’t understand the problem or require more information, ask clarifying questions. Interviewers don’t want to ask too many questions. They want to see how you approach the problem. They are particularly interested in which areas of technology you think is the most important.
- You can think of ways to improve the solution that you present. The first answer you get is often not the best and will need to be refined. While it’s important to discuss your initial thoughts in a question, jumping into a solution by brute force will not be well received.
- Prepare a few questions for the interviewer. This is a great way to show that you are willing to do your research on the company before the interview.
Interview with Experience and Behavioral Analysts
The majority of people I know do not prepare for the interview. The questions seem random to them, and it can be difficult to make this a priority among all the other things you have to do. But, I believe this interview is crucial in deciding whether or not you are hired.
Two things are important for the interviewer to know:
- Are you a culture fit?
- Which level is right for you?
Prepare 5-6 examples of work that are strong and tell stories with strong positive signals. This will help you answer the interview question and keep your information flowing well. These examples do not have to be complicated or fancy. It is important that the interviewer understands the example and is well-received. Also, well-prepared stories can be compelling. Interviewers can easily see your feelings and relate to them. Stories are also a great way for you to share your experiences, which is critical in deciding the level.
Here’s a question to help you demonstrate customer obsession. “Discuss a time you went above and beyond for your customer.”
The above question can be answered in many ways. When answering questions about leadership principles, I recommend the STAR method. STAR stands to represent “Situation, Task, Action, Results” (read more about the Star method).
After you have completed these examples, answer the behavioral questions to get started.
Tip: This is the list I had prepared for all questions. I felt confident and competent in every interview, both behavioral and experiential.
Bravo for getting this far! After you have been offered the job, you can interview the team members and the company. Before making a decision, you may wish to meet with the manager and your teammates several times.
This data point will help you understand: Before making the team decision, I met seven different managers at Google. I met them all and had follow-up chats/meetings with those who were interested. It was basically a reverse interview. If your manager is really interested in you, there are some upsides. The recruiter can help you get a better offer right away.
Note that You may not meet the hiring manager/team leader at some companies, such as Amazon. This is because the hiring process is driven mainly by the team, and not at an organizational level.
Before meeting with hiring managers, you should list around 7-10 questions you’d like to ask them if you have the time. These questions can be general, team-specific, or technology-specific. These questions are meant to help the team gather more information about their manager, technology, and team members in order to make informed decisions.
Negotiating the Best Deal
A few hours of research into negotiating can net you an additional 10%-30% increase in your pay. It is definitely worth your time.
Although I have a lot to say about negotiation, I think it is best to stick to the articles that I used to start and to hear the horses’ voices.
- Ten Rules to Negotiate a Job Offer
- How to Avoid Bombing Your Offer Negotiation
After you’ve read the articles above, I want to reiterate a few points:
- You should know your worth and what you want to achieve (use levels.fyi).
- It’s better to communicate via email than by phone.
- They are willing to leave.
After you sign the offer
- Have fun and keep it going! It’s your right.
- You can send a message to all involved (or even keep in touch on LinkedIn).
- Inform other companies that you are considering a different route.
- Drop me a message with any feedback/improvements on this blueprint.
- Talk to your recruiter. You can get valuable insights and resources from them to help you succeed at interviews.
- Be kind to yourself. Interviews can be stressful. It is easy to feel guilty if things don’t go your way. This is not the end. There are many other companies out there, so be kind to yourself.
- Be positive and classy.
- Ask questions and be curious.
Leave a Reply