This guide is outdated. Heavily updated guide will be released in Q1 2024.
Introduction
The problem with breaking into tech is that your résumé and interview prep varies significantly depending on the size of the company. Some companies will require actual programming skills and knowledge of computer science, whereas others just require you to be an algorithm monkey.
In contrast, other professions have a uniform process. For example, a management consultant must know how to solve a case interview, regardless of the company they apply to.
For a software engineer, the interview varies among three options:
Small startups
Large to mid-size companies, including non-techs in the Fortune 500
A top-tier company, think FAANG and Microsoft, plus unicorns such as Uber
The interview process is completely different depending on which company you apply to because they are looking for different skillsets. Let us break each down:
What F500s and Startups Look For
F500s and startups are focused on building applications and working in small teams. F500s will ask you a handful of algorithm questions, but focus on your résumé and coursework. What kind of pedigree do you have? Do you have basic computer science knowledge to on-ramp to the company’s technologies quickly?
Whereas startups will emphasize a portfolio. What have you built? Are you able to help us develop our product quickly? In fact, there exists a list of companies that do not require algorithms knowledge in order to get hired.
As for behavioral interviews, F500s will ask you standard behavioral questions such as, “Tell me about a conflict you had with a team member” which should be answered in standard STAR format. A startup’s behavioral questions will vary, but they typically they expect you to hold a ~30 minute get-to-know-you conversation moreso than answer specific behavioral questions because is a flatter hierarchy.
While you are preparing for FAANG, I suggest getting one of these jobs to maintain an income stream. Also because tech experience is valued regardless of where it is from. With enough experience, you will be able to apply for senior level positions anywhere including FAANG whether you work as a programmer at McDonalds or a 10-person startup. Even if you are unable to get into FAANG, it is still possible to obtain substantial salary increases by job hopping every 18-24 months for a 20% – 50% raise per hop.
Note that larger companies will generally have less work, but more rules. Whereas smaller companies will generally have more work with more freedom. I would say bigger companies are better for doing your own thing on the side, whereas smaller companies are good for learning rapidly with a higher-risk equity position. These are some factors to consider, especially if you want to do multiple remote jobs (will be covered in a later Substack post).
What FAANG Is Looking For
In contrast, the primary qualities that a FAANG interviewer is attempting to assess are as follows:
Does this person know how to write efficient code that is scalable?
Does this person know how software systems generally work?
Does this person know how to communicate their ideas clearly and succinctly?
The key is that this process can be GAMED. Let me emphasize. You can get into FAANG by memorizing these concepts even if you have never used a computer before. You can teach yourself some algorithms and optimization tricks for (1), you can teach yourself some basic system design for (2), and you can network and do practice interviews for (3).
80% of your interview will be data structures and algorithms (DSA). If you can master them, you have a strong chance at breaking into FAANG. There are a handful of question types, and if you are able to detect the general pattern, you will be able to solve all of them. I would say if you are able to do about 200 practice questions within 20-30 minutes each, you can solve any problem FAANG gives you.
10-Step Guide to Breaking Into FAANG
1. Basic Math Prerequisites
You should know these basics to design algorithms.
Basic Calculus
If you are having trouble with Calculus, brush up on Algebra using Khan Academy.
I also used Paul’s Online Math Notes to supplement my courses during undergrad.
Edit: Some people have remarked that Calculus is unnecessary. I will argue that understanding limits, infinity, asymptotes, logarithms, factorials, sets, sequences, series, etc. is useful for algorithms. I am not asking you to make an A in these classes, simply be familiar with the topics.
2. Basic Computer Science
If you have never used a computer before, start with Khan Academy’s Computers and the Internet series.
If you have zero computer science background, take Harvard’s CS50.
Then, complete Stanford's Algorithms specialization on Coursera.
That’s it. That’s all the computer science knowledge necessary for entry-level roles.
Upload your assignments onto GitHub to start building a small portfolio.
HackerNoon has a short guide on making a good GitHub profile. It looks good if you have a GitHub with frequent contribution history:
Sly Fox Tip: You can enable commit history on private repositories. There is a bot that takes advantage of this.
3. Data Structures and Algorithms (DSA)
Do algorithm practice problems on LeetCode.
This is 80% of what you need to recruit into FAANG. Seriously.
Why? The same reason management consultants do case interviews. But also because it is a legal IQ test that they call “assessing general cognitive ability.” Does this person think logically and in a structured manner? Can this person work hard to study?
You do not need to know any specific tools; they know how to on-ramp anyone who is a logical, hard-working, and reasonably intelligent person within a few weeks; every company has an internal bootcamp. Instead, they are looking for a solid foundation.
Think of this as the Computer Science version of the GMAT, MCAT or LSAT.
What Is LeetCode?
LeetCode has collected hundreds of algorithm interview questions and categorized them by difficulty. They give you a better score on your answer depending on its efficiency.
Spend most of your time on the Medium-difficulty ones and a few Hard ones. If you have difficulty with the Mediums, go to the Easys. The Easys with the lower “Acceptance” rates are harder. Target well-formed questions by looking at their ratings.
I suggest using Python because it has the simplest syntax. Use this Miller & Ranum DSA book as reference.
If you are unable to solve a Medium question within 30 minutes or a Hard within 45, just look at the answer. But make a genuine attempt before you give up.
I think of Hard questions as Medium questions with a twist. These will be asked in the final rounds of the interview process, so it helps to know them. Typically, if you are able to walk through your thought process and come across a roadblock, the interviewer will give you a hint. These hints may not make you a perfect candidate, but if you still generate a solution, you will be fine.
Also, do not just solve the problem–deeply understand the concept so you can apply it across other questions. Use the aforementioned book as reference, read the LeetCode discussions, look back on your course notes, Google the problem, watch a YouTuber solve it, understand the underlying data structure and math.
Why Is LeetCode Important for Software Engineering?
Let us imagine you have a 1000-page dictionary, and you are searching for a word.
There are two options:
Search for the word starting from page 1 going to page 1000
Start at the halfway point (page 500), then keep going to the next half of the dictionary that is closer to your word.
Say you are looking for the word “Fox.” Unbeknownst to you, it is located on page 300.
Using method 1, if we begin at page 0 and traverse to page 300, we will end up doing 300 page flips.
Using method 2, if we start at page 500, then go to page 250… and so on, we will be finished in 10 page flips max. In fact, any word in this dictionary can be found in <10 page flips.
Method one is linear search, which is O(N) time complexity. N is size of the input. So, in the worst case, we would look through N = 1000 pages.
Method two is binary search, which is O(log N) time complexity.
This example seems trivial, but imagine the Google Search engine. 1 million websites with 1 search per second on an O(N) algorithm would take 11.5 days. On an O(log N) algorithm, it would take 20 seconds. On an O(N²) algorithm, 32,000 years.
Analyzing the running time of algorithms is called the study of Asymptotic Computational Complexity, which you must know for your interview.
Asymptotic Analysis, AKA Big-O Notation
You must analyze the running time of all of your algorithms, including during your interview. Analyze the runtime of your LeetCode problems while you practice.
Big-O is typically used to represent the time complexity of an algorithm, specifically for the worst-case runtime.
Resources:
freeCodeCamp Big O Notation - Full Course
Cornell Asymptotic Running Time of Algorithms Lecture Slides
Cornell Introduction to Asymptotic Analysis Lecture Notes
Big-O Cheat Sheet (understand 80% of this)
How Long Should I Spend on LeetCode?
Many people do up to 500 questions to prep for FAANG. You do not need to do this. Here are the ~120 best questions I have come across to help you understand the general “type” of problems you will be dealing with so you can cut your workload by >75%.
All of these LeetCode questions should take you about 40-60 hours total. You can prep this in ~3 weeks if you put in 2 hours a day. However, it should realistically take far more time to truly understand the concepts because you should be reading answers/discussions and researching on Google/YouTube in between each question.
If you want even more questions, try LeetCode Premium. It will enable you to sort the questions by the companies that are known to ask them.
Let us also look at a few free resources. Look at this Educative list; you can look up these problems on LeetCode without buying the Educative course. There are plenty “Best Of” lists that you can find online as well. Here is a free list of questions that can be sorted by company to get you started without having to buy LeetCode Premium.
Sly Fox Tip: LeetCode Premium is great for convenience, but if you are stretched on money, any premium question can be found online with a quick Google search. And all solutions can be found online as well.
~120 Best LeetCode Questions
Array (10): 1) Two Sum; 2) Contains Duplicate; 3) Product of Array Except Self; 4) Maximum Subarray; 5) Maximum Product Subarray; 6) Rotate Array; 7) Find Minimum in Rotated Sorted Array; 8) Search in Rotated Sorted Array; 9) 3Sum; 10) Container With Most Water and 11) Finding Pairs With a Certain Sum
Binary (5): 1) Sum of Two Integers; 2) Number of 1 Bits; 3) Counting Bits; 4) Missing Number; 5) Reverse Bits
Dynamic Programming (20): 1) Climbing Stairs; 2) Coin Change; 3) Longest Increasing Subsequence; 4) Longest Common Subsequence; 5) Word Break; 6) Combination Sum; 7) House Robber; 8) House Robber II; 9) Decode Ways; 10) Unique Paths; 11) Jump Game; 12) Paint Fence; 13) Maximum Subarray; 14) Unique Paths; 15) Unique Paths II; 16) House Robber; 17) House Robber II; 18) Best Time to Buy and Sell Stock; 19) Best Time to Buy and Sell Stock II; 20 Coin Change
Graph (8): 1) Clone Graph; 2) Course Schedule; 3) Pacific Atlantic Water Flow; 4) Number of Islands; 5) Longest Consecutive Sequence; 6) Alien Dictionary (Premium); 7) Graph Valid Tree (Premium) and 8) Number of Connected Components in an Undirected Graph (Premium)
Linked List (14): 1) Reverse a Linked List; 2) Detect Cycle in a Linked List; 3) Merge Two Sorted Lists; 4) Merge K Sorted Lists; 5) Remove Nth Node From End Of List; 6) Reorder ListLinked List Cycle; 7) Linked List Cycle II; 8) Remove Duplicates from Sorted List; 9) Remove Duplicates from Sorted List II; 10) Add Two Numbers; 11) Swapping Nodes in a Linked List; 12) Rotate List; 13) Reverse Nodes in k-Group; 14) Copy List with Random Pointer
Interval (5): 1) Insert Interval; 2) Merge Intervals; 3) Non-overlapping Intervals; 4) Meeting Rooms (Premium); 5) Meeting Rooms II (Premium)
Matrix (4): 1) Set Matrix Zeroes; 2) Spiral Matrix; 3) Rotate Image; 4) Word Search
String (10): 1) Longest Substring Without Repeating Characters; 2) Longest Repeating Character Replacement; 3) Minimum Window Substring; 4) Valid Anagram; 5) Group Anagrams; 6) Valid Parentheses; 7) Valid Palindrome; 8) Longest Palindromic Substring; 9) Palindromic Substrings; 10) Encode and Decode Strings (Premium)
Tree (19): 1) Maximum Depth of Binary Tree; 2) Minimum Depth of Binary Tree; 3) Same Tree; 4) Invert/Flip Binary Tree; 5) Path Sum; 6) Binary Tree Maximum Path Sum; 7) Binary Tree Level Order Traversal; 8) Binary Tree Zigzag Level Order Traversal; 9) Serialize and Deserialize Binary Tree; 10) Subtree of Another Tree; 11) Construct Binary Tree from Preorder and Inorder Traversal; 12) Convert Sorted Array to Binary Search Tree; 13) Validate Binary Search Tree; 14) Kth Smallest Element in a BST; 15) Lowest Common Ancestor of BST; 16) Implement Trie (Prefix Tree); 17) Add and Search Word; 18) Word Search II; and 19) Merge Two Binary Trees
Heap (3): 1) Merge K Sorted Lists; 2) Top K Frequent Elements; 3) Find Median from Data Stream
Binary Search (4): 1) Search Insert Position; 2) Find Minimum in Rotated Sorted Array; 3) Search in Rotated Sorted Array; 4) Capacity To Ship Packages Within D Days
Recursion (3): 1) Pow(x, n); 2) K-th Symbol in Grammar; 3) Split BST
Sliding Window (3): 1) Longest Substring Without Repeating Characters; 2) Minimum Size Subarray Sum; 3) Maximum in Sliding Window
Greedy + Backtracking (4): 1) Permutations; 2) Subsets; 3) Combination Sum; 4) Generate Parentheses
Uncategorized (10): 1) Valid Parenthesis; 2) Move Zeroes; 3) Meeting Rooms; 4) Meeting Rooms II; 5) Is Subsequence; 6) Next Permutation; 7) String to Integer (atoi); 8) ZigZag Conversion; 9) Trapping Rain Water; and 10) Knight Dialer
4. System Design
Entry-Level
System Design is more important for senior-level roles, typically with at least 3-5 years of experience. There are low expectations for entry-levels to know system design because they are inexperienced. Interns are not required to know system design at all.
Some companies will give you an option to avoid the System Design Interview (SDI) entirely. They will ask, “Would you rather do 4 DSA interviews + 1 SDI or 5 DSA?”
Regardless, you should know some basics.
Object-Oriented Design
Entry-levels and interns should at least know basic Object-Oriented (OO) Design principles such as polymorphism and inheritance, as well as how to create UML diagrams. These are important because companies want you to write maintainable code, not spaghetti code that is unintelligible.
Knowing how to design a UML diagram perfectly is unimportant, but rather it is useful simply to see how basic software is structured and created. Having some decent projects helps with this as well because you will learn through experience.
You can watch the freeCodeCamp Crash Course on Object Oriented Programming (OOP) and Derek Banas’s Object Oriented Design playlist for UML diagrams in Java.
If you want Python-related resources, freeCodeCamp has a full course on OOP with Python and Corey Schafer has shorter OOP Python tutorials. OOP is typically taught with Java, but since you will be doing DSA in Python, these tutorials should be easy to follow just to get a high-level overview. All of these are available for free on YouTube.
System Design
Skimming the System Design Primer should be more than sufficient. Go with the “Short” timeline topics because it emphasizes breadth over depth. System Design is important because it helps design software that can be scaled. This Educative list of System Design questions has good advice for how to answer System Design questions and some example answers.
Senior-Level
If you are applying for a senior-level role, you are expected to know far more about computer science, which is beyond the scope of this guide. For example, you are required to understand threads and concurrency issues, mutexes and semaphores, deadlock and livelock. I may discuss senior-level recruitment in-depth in my Substack if there is enough interest. But, for system design specifically, I suggest reading Designing Data-Intensive Applications by Martin Kleppman. There is also this System Design Interview GitHub resource list.
5. Résumé Screening
Format
Do not make your résumé annoying or dense. Keep it to one page. Follow the standard Wall Street format. Include Education, Work Experience, Programming Projects (if you have any), Extracurriculars.
Descriptions should be concise and focus on accomplishments, quantifiable results, and relevant experience. Do not include any information that is part of a protected class such as race, religion, and so on.
Ensure that your résumé is ATS compliant. Meaning the company’s software will be able to read your résumé.
Something like this is good. I found this résumé template on Harvard’s Guide to Resumes & Cover Letters:
Work Experience
If you do not have any work experience, you should try to get an internship, have some freelance projects, or contribute to open source. Paid experience is infinitely more valuable than unpaid experience. But unpaid experience is better than personal projects.
Personal Projects
If you want programming projects to fill up your résumé, it is trivial to look up a few projects for beginners and simply following along with tutorials on YouTube. Should take you a few weekends max.
If you have a passion project, feel free to work on it longer because it helps demonstrate interest if you can speak in-depth about a project. Plus, you will learn more about system design. If you want to get your hands dirty, Full Stack Python will teach you how to make fully-fledged applications using Python. Or, take a look at my web development guide to fast-track your way into learning the MERN stack.
Do not forget to upload all of your projects to GitHub.
Advice
When you list projects and work experience, they will not hesitate to ask you highly-specific questions about all of them. Deeply understand your projects and work experience listed on your résumé because it raises a red flag if you stumble on a question. For example, they may think that you were on a team and let the others do the work.
Although relevant work experience and programming projects are useful for demonstrating interest, it is not absolutely required to get an interview, especially if you have a referral. However, do note that because there is a lot of burnout in tech, they will want to know that you are genuinely interested and will not get sick of programming after a year. Hence why there are far more senior-level positions available than entry-levels. Work experience and programming projects serve as proof that you will stick around.
6. Picking Companies and Finding Jobs
FAANG is an acronym for the five best performing tech stocks on the market. However, there are companies that offer more or comparable total compensation
(TC = signing bonus + salary + equity, etc.)
Here are some other categories of companies with good TC:
FAANG: Facebook, Amazon, Apple, Netflix, Google
Big-N: FAANG, Microsoft, Twitter, Square, Snap, Nvidia, and other top, public companies
Unicorns: Uber, Airbnb, Dropbox, Palantir, and other top, private companies
Careful: Some Unicorns such as Uber, Plaid, Compass include live coding or take-home assignments like typical startups
Tech Companies Ranked by Total Compensation (2019)
This list is just to give you a general idea of companies with high TC. Go to levels.fyi to find current data. People on TeamBlind also discuss TC.
Tier 0 (Finance): Jane Street, Citadel, Hudson River Trading, Jump Trading, Two Sigma
Tier 1: Facebook, Netflix, Snap
Tier 2: Google, Apple, Linkedin, Uber, Lyft, Pinterest
Tier 3: Amazon, Twitter, Slack, Dropbox, Splunk, Robinhood, Airbnb, Stripe
Tier 4: Microsoft, Yelp, Square, Salesforce, Zillow, Reddit, Spotify, Twitch, Box, Roku, VMWare, Okta, Zoom, Tesla, Coinbase, Twilio, Bloomberg, Indeed
Tier 5: Cisco, Oracle, Yahoo, Walmart , GE, Workday SAP, Intel, Adobe, IBM, Intuit, eBay, PayPal, Juniper, Citrix
Note: Blockchain/Crypto/Web3 developers can get paid mid 6-figures, but these companies expect you to know far more than just algorithms and prefer some experience. However, getting into a FAANG/well-regarded company will make it 10x easier to get into one of these companies later.
Applying to Companies
Find companies on levels.xyz, search for the company’s careers page, and apply directly on their website
Get referrals (more on this later)
If you are interested in non-FAANG jobs, look at LinkedIn, Glassdoor, Indeed, or the career pages of Fortune 500 companies. More specific job search advice will be covered on my Substack.
7. Company Research
Behavioral
Each company has their own unique process and questions. You can get this info via networking (more on this later), or by just looking it up on Google or YouTube. Try to know things such as industry trends, company competitors, and recent projects.
When they ask, “So why (company)?” you must be prepared with something besides “ya’ll pay hella 🤑” even if that is why all of us are here.
Sly Fox Tip: Easy way to do this. Just read the company’s page on Wikipedia and pull up recent news from Google News, then mention them as talking points. Something along the lines of, “I think it’s fascinating that Facebook is rebranding into Meta, it shows that they understand how intertwined tech is in our lives now. They are going to be frontrunners in the Metaverse/Web3 space I want to be a part of this company in the long-run.”
It is also fantastic if you mention a good networking interaction. “I had a great time speaking with one of the engineers here named X. If he/she is in any way representative of the company’s values/people, I think it would be great to work here.” However, make sure that the person is comfortable with you name-dropping. More on networking in the next section.
Technical
Just search “(company) interview” or “(company) interview questions” on Google/YouTube
You can also look up “(company) LeetCode questions”
Company-Specific Notes
Facebook interviews you for the entire company, not for a specific team. Facebook LeetCode questions emphasize Graphs, Dynamic Programming, and Strings.
Amazon
Amazon is particular about their leadership principles. They are notorious for being the “easiest” FAANG interview because they weigh the behavioral section heavier than the others. When you answer their behavioral questions, make sure that you use stories that highlight at least one leadership principle. They will ask you a few basic system design questions.
Apple
Apple will not ask system design questions to entry-level candidates.
They also have 2-on-1 interviews where you must know how to deal with 2 interviewers at the same time.
Google prefers that you knock one interview out of the park and have at least one strong endorsement than having decent endorsements across the board.
Diversity Interview
As of 2019, Google requires a diversity interview. Here are some questions:
What is your experience with diverse workforces and how have you contributed?
What is the most diverse team you have worked on?
What do you think diversity adds to a team?
Have you worked with different cultures?
Maybe someone else can help with this. Just hope that you get a Chinese lady. Or scroll through @Cernovich’s timeline to pick up some buzz words.
Online Assessment
Here are 20 LeetCode questions Google is known to ask during their online assessment:
1) Min Amplitude; 2) Ways to Split String; 3) Maximum Time; 4) Min Abs Difference of Server Loads; 5) Most Booked Hotel Room; 6) Minimum Domino Rotations For Equal Row; 7) Time to Type a String; 8) Maximum Level Sum of a Binary Tree; 9) Min Number of Chairs; 10) K Closest Points to Origin; 11) Odd Even Jump; 12) License Key Formatting; 13) Unique Email Addresses; 14) Fruit Into Baskets; 15) Min Days to Bloom; 16) Fill Matrix; 17) Decreasing Subsequences; 18) Max Distance; 19) Stores and Houses; 20) Watering Plants
8. Networking and Referrals
Networking
Some people will say that networking is optional, but I will argue that it is an enormous advantage to network. Individuals at the company know secrets to the interview that you may not. For example, did you know that Google will ask you “How much do you enjoy coding,” and that any answer other than, “I love it and do it every second of every day even after work” will ding you?
Additionally, Google’s DSA problems will emphasize knowledge of graph problems. There is no way you will get this insider knowledge without networking because it varies significantly across each company.
You will not know a company’s idiosyncrasies such as this until you network with someone in the field. It is in your best interest to maximize your preparation before interviewing because there is a 1-year wait time to reapply to FAANG. Some companies such as Apple have reduced this time to 6 months, but 1 year is typical.
Referrals
Unlike Wall Street, getting the interview is easier than the interview itself. Most tech companies will interview nearly everyone because they have an online LeetCode test that filters out low-quality hires. Though, to minimize risk, I suggest getting a referral anyway because it guarantees that you will pass the résumé screening.
Employees are encouraged to do referrals because they can receive >$5k bonuses for a successful referral. However, this bonus may only apply if you have not applied to the company before. If they ask if you’ve applied before, now you know. Still, if you are a generally likable person and respectful in your approach, most people are willing to help.
How to Get a Referral
If you graduated from a university, try searching in alumni groups or talk to your career center. If not, hop on LinkedIn, make a neat, detailed profile, then start doing cold outreach to people at the companies you are trying to apply to. It is easier to reach out to more junior than senior people, but this varies.
Do not be that guy that spams messages to everyone or reaches out to a senior-level person with “cAn We GeT cOvFeFe,” especially if unprepared. People talk, and they will know that you sent the same message to five different people even if they are on different teams.
LinkedIn will also let recruiters reach out to you if you have a decent profile, but this is unlikely unless you are experienced or have a Master’s Degree.
For cold outreach, you want to follow @BowTiedBull’s method:
Include 1) Who you are, 2) Why they should hire you, 3) What you can bring and 4) Exactly what position you hope to obtain. Again keep this short, 3 sentences or so and send them out on a Friday.
“Hi my name is (name), and I previously worked at XYZ firm doing XYZ and YXZ tasks. Given my previous experience in XXX and XXX, I believe I could be a good fit with your organization. In particular, I am interested (company) because of XX, XX, XX. If possible I’d like to set up a quick meeting about any advice you have regarding the interview.”
If you really want to, you can just pay for a referral on RooftopSlushie.
However, my goal is to make this guide accessible for people without money or a college education. So, here is my Sly Fox Tip for getting referrals:
Go to a site where tech people post. Examples: HackerNews, r/programming, or TeamBlind
Look up the keyword “(company) referral”
See if others have offered referrals in the past
If yes, look at the profile of people who have done referrals in the recent past. They may have an email in their profile, or you can message them from the platform itself. Be courteous when asking for a referral because many people are rude about it, so they are hypersensitive to your approach.
If you are unable to find anyone, make a post that says, “I’m a (new grad) / (older hire that is trying to pivot) and has prepared for tech interviews for x months. Many people recommend getting a referral. Does anyone know the process behind getting referrals or reaching out to people? I’m not sure how it works.”
Because this is a nice approach that is not just, “REFER ME,” you will get a lot of messages of people saying they can refer you.
You can also reach out to people in online groups. Search “FAANG/Big Tech interview Discord” to look for Discord groups. On the Jungle Discord there is a channel where people post their backgrounds. You can see who has worked at a big tech company and reach out to them for a referral as well. You may also be able to find someone on the CS Career Hub Discord. Just look around.
9. Interviewing
General
Process
During recruitment, you will first get an online assessment, 1–2 phone / remote interviews, and then an onsite super day. The super day will have multiple technical interviews and may include a casual lunch interview.
Notice how this is very similar to Wall Street. You can use much of the Wall Street advice on behavioral interviews to prep for FAANG interviews.
If you are dealing with misfortune, reschedule and deal with it first. There is no need to let extenuating circumstances distract you during an interview.
Interviewer Research
If you get the names of your interviewers, stalk them online. The more information you have, the more common interests you can find and can build rapport with them. Use common sense here and do not overstep any boundaries.
Sly Fox Tip: Here is a framework to mention an interest.
They ask “How are you?” → You respond “happy because (something related to interest)” → They ask more about it → You mention their interest → $$$
Suppose you know their favorite basketball team. “How are you?” → “Pretty happy, my favorite basketball team just won a game last night.” → “Oh, what’s your favorite basketball team?” → $$$
Suppose they just had a great vacation in Colombia. “How are you?” → “I’m doing great! My girlfriend and I just planned a visit to her family in Colombia” → $$$
Do not do this if you have no clue about anything regarding that interest. (But how hard could it be to watch some travel videos on YouTube…) 😉
Etiquette for On-Site Interviews
Do not be a disgusting, basement-dwelling loser, nor a tryhard in a suit.
Clothing
Wear fitted, tailored clothing without wrinkles. Neutral colors. No ties or sneakers. Look up “Business Casual men/women” on Pinterest for ideas.
Hair and Nails
Keep your hair neat. Wash the back of your ears and clean your hair with shampoo and conditioner. Or get a haircut before the interview. If you have a scraggly beard, shave or trim it. Pluck wild eyebrow hairs, nose hairs, and ear hairs. Trim your nails and file them so you prevent slicing someone’s hand during a handshake. Go to a salon if you need to.
Breath
No bad breath. Avoid dairy, garlic, onions or cigarettes before the interview. Floss, brush, then mouthwash. You can use 1.5% hydrogen peroxide (or dilute 3.0%) and do a 30-second gargle if mouthwash is too harsh.
Use a tongue scraper before bed if your tongue is not red/pink and has discoloration or whiteness. If you want to double check your breath, you can scrape your tongue from back-to-front with an inverted spoon and take a whiff.
Wear lip balm to prevent cracked lips and licking sounds while you talk.
Odor
No strong fragrances or deodorant. After you get out of the shower, dab a wet fingertip into baking soda and put it on your (shaved) armpits. Be careful because excess baking soda can cause irritation. Mix with cornstarch or baby powder to dilute. These also work for sweaty hands.
Bathroom
Use the restroom before your interview even if you do not feel like it. Stop drinking water 1 hour before your interview so you avoid having to go during. However, keep a small bottle of water on-hand so you may take sips during the interview to prevent mouth clicking and saliva noises.
Phone
Obviously turned off or at least Do Not Disturb mode. No offensive phone cases or wallpaper. Ideally an iPhone if doing Apple interview or Android for Google, but not necessary.
General Advice
Come 10-15 minutes early, but not any more
Having a few copies of your résumé makes you look prepared and helps if the interviewers do not have a copy. A pen and small notebook are optional
Sit up straight and have open body language
Wait to be asked to take a seat or ask after they sit, “May I take a seat?”
Address the interviewer with the name they give you; trying to be too polite using their last name is awkward. Plus, avoiding Mr/Ms allows you to avoid misgendering someone
You can make a joke, but do not make it about something that can be interpreted as offensive in any way, such as race, religion, gender, politics, or economics
Do not speak negatively of previous employers
Thank the interviewer or panel at the end of the interview
Smile, but avoid overdoing it like a clown
There are many arrogant candidates and insecure candidates. Strike a balance and avoid being annoying or desperate.
Sly Fox Tip: Do not use unprescribed amphetamines. I do know people who have taken a single shot of liquid courage before their interview. However, my preferred route is to practice until confident because competence builds confidence.
Technical
You do not need to know the answer, how to solve the problem immediately, nor how to code perfectly either.
They want to know that you have a structured thought process. They also want you to be excited about the problem (do not overdo this).
Whiteboarding
You will be asked to code on a whiteboard, on Google Docs, or Replit. Be familiar with how to use each. Be prepared to code without the autocorrect features of an IDE.
On a whiteboard:
Start at the upper-left corner of the board.
Erase things taking up space.
Don’t close braces or if blocks until you get to them
Add whitespace around lines so you can add things later
Problem Statement
Pay extremely close attention to everything that they are saying and write it down. Repeat the question back to them in your own words. Write the expected input and output. Ask your interviewer for clarification if you are unsure about anything. For example, “What should happen if the input is negative?”
Then, state every single one of your assumptions:
“May I assume the input is positive?”
“May I assume these are all 64-bit integers?”
“May I assume everything in this string is ASCII-encoded?”
“May I assume this graph is formatted as an adjacency matrix?”
If they give you nice inputs, you will save time on error-handling. But, if you don’t explicitly ask them in the beginning, they will hold it against you later on.
You do not want to write an algorithm that does the wrong thing, so ensure that you have gone through the requirements thoroughly.
Generating a Solution
Then, think out loud about a solution. Never go silent. “I’m thinking about…”
If you are unable to come up with a good solution:
General Advice
Think of an unoptimized, brute-force algorithm
Look for missing requirements or ask for clarification
Start with base cases and build it out from there
Draw an example
Solve it “incorrectly” and think about why it does not work
Solve a simpler version of the problem
Think about how you would solve it in your head
Technical Advice
Run through all the data structures you could possibly use
Consider a Hash Map (Dictionary in Python)
Try sorting first
If the problem breaks down into a search, consider Binary Search
If solving for an input (N–1) is easier than (N), use dynamic programming. If a dynamic programming solution is too difficult, start with a recursive algorithm and optimize it afterwards
If you need to take a min or max of a dynamic collection, consider heaps
If you need to insert random elements, consider a sorted array
Be honest with the interviewer if you are unable to come up with anything. They will give you a hint. You may lose a point, but it is better than not having a solution at all. However, just like LeetCode, try extremely hard before you give up.
Once you have thought of a solution, explain your approach in detail before you start coding. You should not start coding until spending at least a few minutes thinking it through first. Explain why your solution works. “Because” is your favorite word here to justify correctness. You can outline what you will code using using comments if you want, but do not let this take up too much of the interview time. Keep talking while you are coding
Be EXTREMELY careful, if the interviewer says “are you sure about X” they are telling you to think twice. Never ever respond with “yes / absolutely.” Don’t be embarrassed if your interviewer pauses or interrupts to help you. If you take it in stride, it reflects well on your character. Remember, they are doing a wholistic evaluation; you are not just being tested on how well you solve the problem.
Wait for the interviewer to give you the green light to begin coding. You should ask, “May I begin coding?” Announce that you will be using Python. Also mention if you will be using any special data structures or libraries: “May I assume that I have access to X?”
Sly Fox Tip: You can use helper functions within your main function without filling them in immediately. For example, suppose say you are writing a findAverage() function. Average is defined here as the sum divided by the frequency of a set of numbers. Within findAverage(), you can have findSum(). Explain to your interviewer what findSum() does and why it is important, then tell them you will fill out the function later. At the end, ask your interviewer, “This helper function does X. Would you like me to write/fill it out as well?” They will not always say yes, thus asking may save you precious time.
Optimizing Your Code
Announce that you will now optimize your code. Analyze the time and space complexity of your algorithm.
Optimize your code by using the BUD method:
Bottlenecks
If you have an algorithm with multiple stages, and one part of it has greater time complexity than the other, there will be a bottleneck.
For example, if you have an O(N log N) sort followed by a O(N) search, the total time complexity of your algorithm will only improve if you change the O(N log N) sort. You should still improve the O(N) linear search to an O(log N) binary search, but mention that the runtime does not improve significantly because the sort dominates.
Note: A single O(N) linear search is faster than an O(N log N) sort followed by a O(log N) search. However, when you are doing multiple searches, m * O(N) grows faster as m → ∞ in the long run compared to O(N log N) + m * O(log N). It is worth mentioning tradeoffs like this to demonstrate your knowledge.
If you must sort and are unable to make it any faster, you know that you have the best conceivable runtime, and you should state that this is your lower bound.
See if you can trade increased space complexity for decreased time complexity. Faster algorithms are generally more valuable than space-efficient algorithms because space is easier to increase.
Unnecessary Work
Once you have a solution, consider reformulating it. Example:
Question: Print all positive integers in this equation, a² + b² = c² + d² where a, b, c, d are integers between 1 and 1000.
Brute-Force Solution: 4 nested for-loops, runtime O(N⁴)
n = 1000
for a in range(1, n):
for b in range(1, n):
for c in range(1, n):
for d in range(1, n):
if a**2 + b**2 == c**2 + d**2:
print(a, b, c, d)
You can improve this by rewriting the equation as d² = a² + b² - c²
n = 1000
for a in range(1, n):
for b in range(1, n):
for c in range(1, n):
d = (a**2 + b**2 - c**2) ** 0.5
if a**2 + b**2 == c**2 + d**2:
print(a, b, c, d)
You no longer have to loop through d, so this equation is reduced by a factor of N and is now O(N³)
Duplicated Work
Optimize repeated work.
Let us take the Fibonacci sequence for example.
The first way to represent the sequence is via recursion:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
Think about this for a second.
When you call fibonacci(n - 1), you are going to call fibonacci((n - 1) - 1). But is that not just fibonacci(n - 2)? You already calculate fibonacci(n - 2) in the previous call. So you are doubling the amount of work you have to do with every call.
The time complexity of this recursive algorithm is O(2ⁿ). You can see how this works because the branches are in pairs of 2. Notice the repeated branches.
We can optimize this algorithm by saving the value of each fibonacci(n) that we’ve already calculated in an array:
def fibonacci(n):
f = [0, 1]
for i in range(2, n + 1):
f.append(f[i - 1] + f[i - 2])
return f[n]
And now we have O(N). Notice how much smaller the tree looks:
This is a huge difference. With 1 computation per second, fib(10) would take half an hour with the first algorithm, and 10 seconds with the second. You can try it on your own computer and feel the difference.
Cleaning Your Code
Announce that you will now clean your code.
Once you have a solution, refactor to make it look neat.
Ensure that the code is compilable and not pseudocode, and that you have as few syntax errors as possible. To save time, you may abbreviate code that is repeated consecutively (such as insertions to a LinkedList), but ensure that your interviewer knows what you are doing.
If you use .add instead of .insert on a LinkedList, it is not a big deal. But, if you start using operations that are unsupported in your language such as ++i or --i in Python, the interviewer will begin to get concerned, and it demonstrates that you have little experience with the language.
Modularize the code with DRY - don’t repeat yourself. Put repeated code in functions.
Read style guides for the programming language you will be using. For Python specifically, read the PEP8 Python Style Guide and the Google Style Guide for Python. There are other tricks you can find online and with books such as Clean Code, but those two should be sufficient for an entry-level interview.
Here is one of my favorite pieces of advice:
There are two ways to represent an if statement.
The first method is to compare a variable inside the if statement:
if cost > 5:
leaveStore()
My preferred way is to make this more readable by defining a boolean outside:
tooExpensive = cost > 5
if tooExpensive:
leaveStore()
Testing
Announce that you will now test your code.
Write examples and edge cases:
What happens if an input is:
zero
negative
very small / large
null
empty
a fraction or decimal value (double)
contains duplicates
Double-Check: ”Is the arithmetic correct?”
Consider base cases
Divide-by-Zero error
Casting doubles before doing integer division
Stack Tracing: “What is happening in memory?”
Line-By-Line Analysis: “What should happen on line X, then line Y?”
Example Cases: ”Let me walk through this small test case line-by-line”
Understand Rubber Duck Debugging
When you are finished, announce it to your interviewer.
Behavioral
There are many types of behavioral interview questions, but the best way to prepare for all of them is to be introspective and reflect on your classwork, challenges, and work experience. Get a journal and start writing about some stories that can reflect positively on your character.
You can use the Amazon Leadership Principles as a starting guide and write about stories related to those principles. Here is a YouTube playlist that explains the culture and principles of >100 different companies.
There are hundreds of behavioral interview questions online and examples on YouTube. You MUST answer them in STAR format. Here is a guide by Harvard on how to answer behavioral questions, including advice for phone and video interviews. Harvard also has a rubric that hiring managers use to evaluate candidates. Grokking the Behavioral Interview is also a good free course. Start your answers off with, “Sure, I’ll tell you about the time I…” to give your interviewer a heads-up overview.
Generally, they just want to know if you will be pleasant to be around. Even when Google says that they are testing for “Googleyness,” this is just another word for “cultural fit.” They are asking themselves, “is this person sharp, pleasant, humble, mature, interesting, curious?” There are far too many insufferable candidates, so they want to ensure you are not one of them. Again you can just look up “Googleyness” on YouTube and find plenty of examples.
Be clever when you weave these traits into your interview. For example, one subtle way to demonstrate emotional maturity is to be slightly happy when a particular question is challenging. Getting frustrated or emotional is the last thing you want to do when you come across a difficult question.
Sly Fox Tip: If you have zero interesting experiences, you can lie, but make sure your lies are convincing. Just add some spice to your existing stories. You do not want to be in a position where they ask more details about a scenario, then you stumble on your answer. At least if your story is somewhat truthful, you will find it far easier to B.S. on the spot. You can practice your acting skills by going out to bars or random Meetups and Toastmasters Clubs.
Behavioral Questions
If you are autistic, here is a near exhaustive list of over 200+ behavioral questions. This includes a few diversity questions you should think about so you are not caught completely off-guard.
Here are some common ones:
Why do you want this job?
What's a tough problem you've solved?
Biggest challenges faced?
Best/worst designs seen?
Ideas for improving an existing product
How do you work best, as an individual and as part of a team?
Which of your skills or experiences would be assets in the role and why?
What did you most enjoy at [job x / project y]?
What was the biggest challenge you faced at [job x / project y]?
What was the hardest bug you faced at [job x / project y]?
What did you learn at [job x / project y]?
What would you have done better at [job x / project y]?
Career Transitions
If you are coming from a different field, you must be careful if they ask you why you became interested in software. You should not talk about money or eventually wanting to jump to a startup or Blockchain/Crypto/Web3 company. You want the interviewer to think that you are committed.
A good answer should focus on a passion for software and an increasingly technological world. You want to emphasize that you are interested in learning as a non-computer science person to learn the skills required to have the potential to impact the group. You can also mention that you want to work with intelligent and high-achieving people, and want to push yourself. The goal is to come off as a positive, ambitious person without being too arrogant.
Here is an adaptation of a WSO answer:
I do not regret majoring in art history. That said, my interests have evolved towards more analytically challenging pursuits. This past year, I’ve taken more computer science and math classes, and believe that software engineering is an exciting challenge that marries my interests in critical thinking and quantitative analysis.
Specifically, software engineering interests me because it presents an opportunity to develop substantive analytical skills, while developing a close network of colleagues. While working long hours is scary to some, to me, it is in a strange way exciting. I have a very strong work ethic, and I am excited to be involved in work that helps companies scale their technology.
Obviously do not be this fake, but notice how this person frames their liberal arts background as a positive. You may also consider mentioning various transferable skills that you learned such as analytical writing. Do not just say “writing” because it is far too vague. The more specific, the better.
Questions You Can Ask
You must always have at least one or two questions for the interviewer. Personally, I use the Q&A period to have a conversation with the interviewer and build rapport.
Here are some example questions I found online, but I suggest coming up with your own:
Have you ever had someone from my background? If yes, how did they compare to someone with a computer science background?
What attracted you to the company and what made you stay?
What would I be working on in the first few months here?
How large is your team?
What does your dev cycle look like? Do you do waterfall/sprints/agile?
Are rushes to deadlines common? Or is there flexibility?
How are decisions made in your team?
How many meetings do you have per week?
Do you feel your work environment helps you concentrate?
What are you working on?
What do you enjoy about it?
Practice
ALWAYS practice!
First, watch YouTube videos of people doing practice interviews:
Then, apply to low-paying, no-name companies that you would never join in order to practice. Or just apply to random startups. If you are a student, you can also go to your career center and do a practice interview as frequently as you want with different people.
For behavioral practice specifically, you can apply to roles or industries that you have no interest in joining, such as data analytics or consulting, but it may be harder if you are unable to get past the initial screening.
For technical interviews specifically, use Pramp. Phenomenal resource. You may also ask the people that you are networking with to do practice with you, but try to be a bit more prepared for these so you avoid embarrassing yourself or ruining a referral.
There are also many online communities that can help. Search and ask around in the tech blogs I mentioned in the networking section. Or try one of these Discord servers:
10. The Offer
Offers have 1–4 week deadlines for your decision. You can usually ask for an extension.
If you are rejected, do not be resentful. Thank the interviewer and ask them when you may reapply. You may have just had a bad day. Interviewers will sometimes reach out to give you a second chance if they liked you, or they will expedite your next application based on prior performance.
If you decline an offer, be extremely polite. You may want to work for the company or hiring manager in a few years, or they can become business clients of yours.
Evaluation
When you evaluate a compensation package, ensure you take all of these into account:
One-Time Perks
Signing Bonus
Relocation Package
Cost of Living
Annual bonus
Equity via stock options and grants. Remember vesting period
Vacation policy
Insurance such as health and dental
Think about the long-term value as well. In other words:
Company prestige
Company in growth or in decline
Whether you will actually learn something relevant, (e.g. COBOL vs. Javascript)
Promotion opportunities/timeline
Management opportunities (if applicable)
Location
Is it a place you like?
Could you find a job nearby if you left the company?
Stability
What you are working on
Who you are working with
How much you are working
Negotiation
FAANG companies will always lowball you, and it is difficult to get them to budge. Google is notorious for this because they sell prestige, similar to Goldman Sachs. Having multiple offers helps. Always let them share their rate first and never share your previous compensation because it will act as a ceiling rather than a floor. Additionally, the better you do during the interview, the more they are willing to budge on TC.
Patrick McKenzie has, by far, the best software engineering salary negotiation article that I’ve read. HackerNews also has great posts on negotiation. Read them and do your best. No shame in avoiding negotiation for entry-level positions.
Sly Fox Tip: If you are an entry-level employee, I would not try too hard on salary negotiation because you just want to break-in to the industry first. If you want to do a little nudge, simply say something along the lines of:
“I’m incredibly grateful for this offer and would love to work here. I only hesitate because of the compensation. I’m the primary breadwinner for my entire family, and I have massive student loans that are stressful. I have another offer from (company) (optional: mention they are offering $X higher salary). Is there any way you might be able to do better than the current offer? It would make this decision much easier.”
This is a bit supplicating, but minimizes the risk of the hiring manager getting offended and rescinding the offer. Note: One-time perks such as signing bonus are easier to negotiate than salary.
Congrats! That’s it! You will need to know more on how to perform on-the-job, but that will be for another time. Best of luck and feel free to leave your questions below.
If you liked this article, consider subscribing to my Substack and following me on Twitter. The free subscription will cover high-level overviews, whereas the paid subscription will cover detailed advice for recruitment, on-the-job performance, and how to make money with software via automation, multiple jobs, SaaS, and so on.
Disclaimer: For entertainment purposes only. None of this is financial, legal, or health advice. This was written by an anonymous cartoon.
10-Step Guide for Literally ANYONE to Land a 6-Figure Tech Job
This was great.
Do you have a good litmus test for knowing whether someone would become bored/burnt out after a couple years?
this was very informative. can you write a guide for senior system design interviews