Big O Notation & Data Structures Guide
Big O Notation & Data Structures Guide
Big O Notation
Using not-boring math to measure code's efficiency
Big O notation is the language we use for talking about how long an algorithm takes
It's like math except it's an awesome, not-boring kind of math where you get to wave
your hands through the details and just focus on what's basically happening.
With big O notation we express the runtime in terms of—brace yourself—how quickly
To really understand how data structures work, we're going to derive each of them from
scratch. Starting with bits.
We'll cover:
Can we build a data structure that can store a string, has fast appends, and doesn't
require you to say how long the string will be ahead of time?
Let's focus first on not having to know the length of our string ahead of time.
Remember how we used pointers to get around length issues with our array of baby
names?
So you have to know what's important in the problem you're working on. What does
prepends?
Once you know what's important, you can pick the data structure that does it best.
3. Repeat the same approach (of starting in the middle) on the new half-size problem.
Then do it again and again, until we either find the number or "rule out" the whole set.
Data structures built on arrays
Arrays are the building blocks for lots of other, more complex data structures.
Don't want to specify the size of your array ahead of time? One option: use a dynamic
array.
To make room, dynamic arrays automatically make a new, bigger underlying array.
Why not just extend the existing array? Because that memory might already be taken by another program.
1. Reverse all the characters in the entire message, giving us the correct word
a list of sorted lists and outputs a single sorted list with all the items from each list.
Do we absolutely have to allocate a new list to use for the merged output? Where else
could we store our merged list? How would our function need to change?
What We Learned
We spent a lot of time figuring out how to cleanly handle edge cases.
Sometimes it's easy to lose steam at the end of a coding interview when you're
debugging. But keep sprinting through to the finish! Think about edge cases. Look for
off-by-one errors.
Some uses for hashing:
1. Dictionaries. Suppose we want a list-like data structure with constant-time
lookups, but we want to look up values based on arbitrary "keys," not just
sequential "indices." We could allocate a list, and use a hash function to translate
keys into list indices. That's the basic idea behind a dictionary!
2. Preventing man-in-the-middle attacks. Ever notice those things that say "hash"
or "md5" or "sha1" on download sites? The site is telling you, "We hashed this file
on our end and got this result. When you finish the download, try hashing the
file and confirming you get the same result. If not, your internet service provider
or someone else might have injected malware or tracking software into your
download!"
Good engineers will come up with a solution, but great engineers will come up with
several solutions, weigh them carefully, and choose the best solution for the given
context. So as you're running practice questions, challenge yourself to keep thinking
even after you have a first solution. See how many solutions you can come up with.
This will grow your ability to quickly see multiple ways to solve a problem, so you can
figure out the best solution. And use the hints and gotchas on each Interview Cake
question—they're designed to help you cultivate this skill.
No "shorting"—you need to buy before you can sell. Also, you can't buy and
sell in the same time step—at least 1 minute has to pass.
Try applying this greedy methodology to future questions.
Solution
To find the products of all the integers except the integer at each index, we'll go
through our list greedily ↴ twice. First we get the products of all the integers before
each index, and then we go backwards to get the products of all the integers after each
index.
When we multiply all the products before and after each index, we get our answer—the
first thought might be to use recursion. All we need is a base case. ↴ What's our base
case?
We stop when we run out of customer orders in our served_orders. So that's our
base case: when we've checked all customer orders in served_orders, we return True
because we know all of the customer orders have been "accounted for."
Careful: we can only use binary search if the input list is already sorted.
What We Learned
The answer was a modified version of binary search.
This is a great example of the difference between "knowing" something and knowing
something. You might have seen binary search before, but that doesn't help you much
1. The value at a given index tells us a lot about what's to the left and what's to
the right.
2. We don't have to look at every item in the list. By inspecting the middle item,
3. We can use this approach over and over, cutting the problem in half until we
So whenever you know a list is sorted or almost sorted, think about these lessons from
nodes are visited. Abort if we ever try to assign a node a color different from the one it
times we're visiting each node. If we ever visit a node twice, then we have a cycle.
occasionally:
● Dijkstra's Algorithm: Finds the shortest path from one node to all other nodes in
a weighted graph.
● Minimum Spanning Tree: Finds the cheapest set of edges needed to reach all
search does.
What We Learned
This is an intro to some tree basics. If this is new to you, don't worry—it can take a few
questions for this stuff to come together. We have a few more coming up.
Particular things to note:
the differences between the two and the strengths and weaknesses of each.
One tip: Remember that breadth-first uses a queue ↴ and depth-first uses a stack ↴
(could be the call stack or an actual stack object). That's not just a clue about
implementation, it also helps with figuring out the differences in behavior. Those
differences come from whether we visit nodes in the order we see them (first in, first
out) or we visit the last-seen node first (last in, first out).
Sometimes we'll have to kinda smoosh together two or more different patterns to get
our answer.
What We Learned
This one's pretty crazy. It's hard to imagine an interviewer expecting you to get all the
But just because it takes a few hints to get to the answer doesn't mean a question is
"too hard." Some interviewers expect they'll have to offer a few hints.
So if you get a hint in an interview, just relax and listen. The most impressive thing you
can do is drop what you're doing, fully understand the hint, and then run with it.
Our function ends up recursively calling fib(2) three times. So the problem of finding
the nth Fibonacci number has overlapping subproblems.
We built that list bottom-up, but we also talked about how we could do it top-down
and memoize. Going bottom-up is cleaner and usually more efficient, but often it's
easier to think of the top-down version first and try to adapt from there.
Dynamic programming is a weak point for lots of candidates. If this one was tricky for
of the original linked list? Write a function for reversing a linked list out-of-place.
What We Learned
It's one of those problems where, even once you know the procedure, it's hard to write
a bug-free solution. Drawing it out helps a lot. Write out a sample linked list and walk
through your code by hand, step by step, running each operation on your sample input
to see if the final output is what you expect. This is a great strategy for any coding
interview question.
2.You want to "cancel out" matching numbers (use XOR).
Coding interview technique
Hangouts or Skype.
Turn off notifications on your computer before you get started—especially if you’re
The beginning chitchat is half just to help your relax, and half actually part of the
2. Tell me about something you’ve built that you’re particularly proud of.
You should be able to talk at length about the major projects listed on your resume.
What went well? What didn’t? How would you do things differently now?
Then come the technical challenges—the real meat of the interview. You’ll spend most
of the interview on this. You might get one long question, or several shorter ones.
Startups tend to ask questions aimed towards building or debugging code. (“Write a
function that takes two rectangles and figures out if they overlap.”). They’ll care more
Larger companies will want to test your general know-how of data structures and
algorithms (“Write a function that checks if a binary tree is ‘balanced’ in
O(n)
O(n) ↴ time.”). They’ll care more about how you solve and optimize a problem.
With these types of questions, the most important thing is to be communicating with
your interviewer throughout. You'll want to "think out loud" as you work through the
problem. For more info, check out our more detailed step-by-step tips for coding
interviews.
If the role requires specific languages or frameworks, some companies will ask
After the technical questions, your interviewer will open the floor for you to ask them
questions. Take some time before the interview to comb through the company’s
website. Think of a few specific questions about the company or the role. This can
When you’re done, they should give you a timeframe on when you’ll hear about next
steps. If all went well, you’ll either get asked to do another phone interview, or you’ll be
An onsite interview happens in person, at the company’s office. If you’re not local, it’s
common for companies to pay for a flight and hotel room for you.
The onsite usually consists of 2–6 individual, one-on-one technical interviews (usually
in a small conference room). Each interview will be about an hour and have the same
The major difference between onsite technical interviews and phone interviews
The good news is, after some practice you get used to it. Before your onsite, practice
writing code on a whiteboard (in a pinch, a pencil and paper are fine). Some tips:
1. Start in the top-most left corner of the whiteboard. This gives you the most
2. Leave a blank line between each line as you write your code. Makes it much
3. Take an extra second to decide on your variable names. Don’t rush this part. It
might seem like a waste of time, but using more descriptive variable names
ultimately saves you time because it makes you less likely to get confused as you
If a technical phone interview is a sprint, an onsite is a marathon. The day can get really
long. Best to keep it open—don’t make other plans for the afternoon or evening.
When things go well, you’ll wrap-up by chatting with the CEO or some other director.
This is half an interview, half the company trying to impress you. They may invite you
All told, a long day of onsite interviews could look something like this:
● 12pm-1pm: one or several engineers will take you to lunch, perhaps in the
If they let you go after just a couple interviews, it’s usually a sign that they’re going to
interview to put yourself in the best possible mindset. Check out our piece on what to
Code tests aren’t ubiquitous, but they seem to be gaining in popularity. They’re far
more common at startups, or places where your ability to deliver right away is more
You’ll receive a description of an app or service, a rough time constraint for writing
your code, and a deadline for when to turn it in. The deadline is usually negotiable.
Write a basic “To-Do” app. Unit test the core functionality. As a bonus, add a “reminders”
feature. Try to spend no more than 8 hours on it, and send in what you have by Friday
with a small write-up.
Take a crack at the “bonus” features if they include any. At the very least, write up how
If they’re hiring for people with knowledge of a particular framework, they might tell
you what tech to use. Otherwise, it’ll be up to you. Use what you’re most comfortable
Some places will offer to pay you for your time. It's rare, but some places will even
invite you to work with them in their office for a few days, as a "trial."
Coding Interview Tips
How to get better at technical interviews without practicing
Before diving into code, most interviewers like to chitchat about your background.
things that aren't quite right, even if you don't have to?
or painful?
● story about what you should have done differently in a past project
● piece of trivia about your favorite language, and something you do and don't like
Nerd out about stuff. Show you're proud of what you've done, you're amped about what
they're doing, and you have opinions about languages and workflows.
Communicate.
Once you get into the coding questions, communication is key. A candidate who needs
some help along the way but communicates clearly can be even better than a candidate
Understand what kind of problem it is. There are two types of problems:
1. Coding. The interviewer wants to see you write clean, efficient code for a
problem.
2. Chitchat. The interviewer just wants you to talk about something. These
questions are often either (1) high-level system design ("How would you build a
trivia is a lead-in for a "real" question e.g., "How quickly can we sort a list of
If you start writing code and the interviewer just wanted a quick chitchat answer
before moving on to the "real" question, they'll get frustrated. Just ask, "Should we write
Make it feel like you're on a team. The interviewer wants to know what it feels like to
work through a problem with you, so make the interview feel collaborative. Use "we"
instead of "I," as in, "If we did a breadth-first search we'd get an answer in
O(n)
O(n) time." If you get to choose between coding on paper and coding on a whiteboard,
always choose the whiteboard. That way you'll be situated next to the interviewer,
you're stuck, just say what you're thinking. Say what might work. Say what you thought
could work and why it doesn't work. This also goes for trivial chitchat questions. When
asked to explain Javascript closures, "It's something to do with scope and putting stuff
Say you don't know. If you're touching on a fact (e.g., language-specific trivia, a hairy
bit of runtime analysis), don't try to appear to know something you don't. Instead, say
"I'm not sure, but I'd guess $thing, because...". The because can involve ruling out other
options by showing they have nonsensical implications, or pulling examples from other
Slow the eff down. Don't confidently blurt out an answer right away. If it's right you'll
still have to explain it, and if it's wrong you'll seem reckless. You don't win anything for
speed and you're more likely to annoy your interviewer by cutting her off or appearing
to jump to conclusions.
Get unstuck.
Sometimes you'll get stuck. Relax. It doesn't mean you've failed. Keep in mind that the
interviewer usually cares more about your ability to cleverly poke the problem from a
few different angles than your ability to stumble into the correct answer. When hope
Draw pictures. Don't waste time trying to think in your head—think on the board. Draw
a couple different test inputs. Draw how you would get the desired output by hand.
the set? Think about how to find the 1st largest item and see if you can adapt that
approach.
Write a naive, inefficient solution and optimize it later. Use brute force. Do whatever it
Think out loud more. Say what you know. Say what you thought might work and why it
won't work. You might realize it actually does work, or a modified version does. Or you
Wait for a hint. Don't stare at your interviewer expectantly, but do take a brief second
to "think"—your interviewer might have already decided to give you a hint and is just
Think about the bounds on space and runtime. If you're not sure if you can optimize
● "I have to at least look at all of the items, so I can't do better than
● O(n)
● O(n)."
● )."
It's easy to trip over yourself. Focus on getting your thoughts down first and worry
Call a helper function and keep moving. If you can't immediately think of how to
implement some part of your algorithm, big or small, just skip over it. Write a call to a
reasonably-named helper function, say "this will do X" and keep going. If the helper
function is trivial, you might even get away with never implementing it.
Don't worry about syntax. Just breeze through it. Revert to English if you have to. Just
Leave yourself plenty of room. You may need to add code or notes in between lines
later. Start at the top of the board and leave a blank line between each line.
Save off-by-one checking for the end. Don't worry about whether your for loop should
have "
<
<" or "
<=
<=." Write a checkmark to remind yourself to check it at the end. Just get the general
algorithm down.
Use descriptive variable names. This will take time, but it will prevent you from losing
Imply the type in the name. Functions returning booleans should start with "is_*". Vars
that hold a list should end with "s." Choose standards that make sense to you and stick
with them.
Clean up when you're done.
Walk through your solution by hand, out loud, with an example input. Actually write
down what values the variables hold as the program is running—you don't win any
brownie points for doing it in your head. This'll help you find bugs and clear up
Look for off-by-one errors. Should your for loop use a "
<=
<
<"?
Test edge cases. These might include empty sets, single-item sets, or negative
Don't be boring. Some interviewers won't care about these cleanup steps. If you're
unsure, say something like, "Then I'd usually check the code against some edge
Practice.
Actually write code with pen and paper. Be honest with yourself. It'll probably feel
awkward at first. Good. You want to get over that awkwardness now so you're not fumbling
when it's time for the real interview.
“I’m not actually good at this. They’re going to see right through me...”
If any of these thoughts resonate with you, you're not alone. They are so common they
It’s that feeling like you’re on the verge of being exposed for what you really are—an
impostor. A fraud.
Impostor syndrome is like kryptonite to coding interviews. It makes you give up and
go silent.
You might stop asking clarifying questions because you’re afraid they’ll sound too basic.
Or you might neglect to think out loud at the whiteboard, fearing you’ll say something
You know you should speak up, but the fear of looking like an impostor makes that
Here’s the good news: you’re not an impostor. You just feel like an impostor because
work—you can slowly fix them. You can quiet your worries about being an impostor and
Software engineering is a massive field. There’s a huge universe of things you could
know. Huge.
The expanding universe
It gets worse: counterintuitively, as you learn more, your sliver of knowledge feels like
it's shrinking.
That's because you brush up against more and more things you don’t know yet. Whole
months to understand.
So the universe of things you could know seems to keep expanding faster and
faster—much faster than your tiny sliver of knowledge is growing. It feels like you'll
Here's another common cognitive bias: we assume that because something is easy for
us, it must be easy for everyone else. So when we look at our own skills, we assume
they're not unique. But when we look at other people's skills, we notice the skills they
And by looking at what Aysha and Bruno know that you don't know, you feel like you're
a step behind.
And interviews make you really focus on what you don't know. You focus on what could
go wrong. The knowledge gaps your interviewers might find. The questions you might
But remember:
Just because Aysha and Bruno know some things you don't know, doesn't mean you
everything they could learn. We all have gaps in our knowledge. We all have interview
You're not a step behind. You just have a lot of stuff you don't know yet. Just like
everyone else.
Finally! After a while of shooting in the dark and frantically fiddling with sample inputs
on the whiteboard, you've came up with an algorithm for solving the coding question
Whew. Such a relief to have a clear path forward. To not be flailing anymore.
You feel a tension we've all felt during the coding interview:
"Try to listen to what they're saying...but don't lose your train of thought...ugh, I can't
do both!"
This is a make-or-break moment in the coding interview. And so many people get it
wrong.
Most candidates end up only half understanding what their interviewer is saying.
Because they're only half listening. Because they're desperately clinging to their train of
thought.
And it's easy to see why. For many of us, completely losing track of what we're doing is
one of our biggest coding interview fears. So we devote half of our mental energy to
what we see during the coding interview and what our interviewer sees.
The programming interview maze
You don't know anything about the shape of the maze until you start wandering around
it. You might know vaguely where the solution is, but you don't know how to get there.
But here's something they will fault you for: failing to listen to them. Nobody wants to
work with an engineer who doesn't listen.
So when you find yourself in that crucial coding interview moment, when you're torn
between holding your train of thought and considering the idea your interviewer is
suggesting...remember this:
they're saying.
Even if it means completely leaving behind the path you were on. Trust the route your
If you weren’t in an interview, you might take a break or ask Google for help. But the
You just have an empty whiteboard, a smelly marker, and an interviewer who’s looking
at you expectantly. And all you can think about is how stuck you are.
You need a lifeline for these moments—like a little box that says “In Case of Emergency,
Break Glass.”
Inside that glass box? A list of tricks for getting unstuck. Here’s that list of tricks.
hand." Notice the process you use. Look for patterns, and think about how to
Trying to reverse a string? Write “hello” on the board. Reverse it “by hand”—draw
performance. Ideally, you wanna be having one of those days, where elegant code flows
effortlessly from your fingertips, and bugs dare not speak your name for fear you'll
squash them.
You need to get your mind and body in The Zone™ before you interview, and we've
Interviewing sleep deprived could be worse than getting drunk beforehand. Make it
your mission to get a full night of sleep, because you want all the brain power you can
get.
In fact, try to get two nights of good sleep before interviewing, since sleep debt lasts a
few days.
As soon as the sun goes down, put down the practice problems and focus on
relaxing. If sleeping isn't your strongest skill, try these sleepytime guidelines:
● Don't drink caffeine in the afternoon, and don't drink alcohol at all.
● Avoid bright screens in the evening. Dim your screen once the sun sets.
● Eat a light dinner, ideally one with noggin-friendly foods, like salmon, beans, and
vegetables.
● Before bed, turn on a boring podcast, listen to some calming music, or read a
book.
The most important thing is to not stay up late practicing new or difficult problems.
That'll only put your brain on a train to Los Anxiousness. Instead, you should…
To cultivate your confidence, practice questions that you can already solve handily.
Sure, feel free to start the day with a new problem, but by the afternoon you should be
Giving yourself a few wins like this helps your brain simulate a stellar session at the
whiteboard. You'll go to sleep dreaming of data structures, and you'll wake up with a
Picture the ideal version of your day. It's a positive visualization exercise. This might
sound like some hippie shit, but it's something athletes and entrepreneurs do all the
time.
Check out our guided meditation that helps you visualize yourself breezing through a
full day of onsite interviews. It takes about 12 minutes, and it goes a long way.
If guided meditations aren't your thing, you can do it yourself. Grab a piece of paper
and write out everything that'll happen during a successful day of interviews. Here's
● Greet your interviewer(s). Play through some small talk. Maybe you make a little
● Crush your first question. The first question comes your way, and you write out
● Overcome a tough question. You get to a trickier part of a problem. You feel
some adrenaline, but you keep calm. You ask a few clarifying questions and carry
on to a solution.
● End the day on a high note. Your last interview of the day involves talking to a
director or VP, and the conversation is lively. You leave the building smiling and
Visualizing a successful day will build your confidence. You're training your brain to
problems in the hours leading up to your interview. Notice how our coding interview
tips article gives you a handy process for solving algorithmic problems:
1. Brainstorm an algorithm. Draw out sample inputs and play around with them
while talking and thinking out loud. Don't start writing code until you and your
notes next to the things you wanna go back and double-check later.
3. Debug your code. Walk through your code with sample input, look for
This high-level, “What's my problem solving process” is great to keep thinking about the
Decision fatigue is real. It's why successful people like Mark Zuckerberg and Barack
Obama always wear the same thing—to minimize the number of decisions they make
each morning. Luckily, it's easy to avoid decision fatigue once you're aware of it!
Plan the boring stuff ahead of time. Here are a few suggestions to get you started:
● Lay out some nice clothes. Dress a tiny step above what others in the office are
● Plan your breakfast. For your brain's sake, try to include eggs, berries, and
avocado.
● Choose your route to the office. Expect traffic. Scope out the parking situation
if you're driving.
● Tarantino your morning. Work backwards from about 30 minutes before your
interview, and figure out what time you need to wake up.
● Set an alarm (or ten). Remember that you want time in the morning to chill, eat
a leisurely breakfast, and sip on a cup of coffee (if that's your cup of… tea).
● Brainstorm a pump-up routine. Come up with a few things to get you stoked. If
you're not sure what your morning pump-up routine looks like, we've got you
covered…
Get pumped
The morning of your interview, you wanna get energized! The right pump-up routine
should make you excited, confident, and ready to tackle your interview head-on.
Get your body moving. Do sun salutations and a few jumping jacks. Light exercise
increases the blood flow to your brain and helps clear your mind.
Power pose and read your positive visualization. It might feel strange at first, but it
works! You'll prime yourself to feel more confident heading into your interview.
Listen to pump-up music. If you're like me, the intro to Backstreet's Back should do the
trick. If you're not like me (i.e., you're unwilling to admit you like the Backstreet Boys),
Here are some inspirational 90s jams, just in case you need them:
You’ve probably heard this advice before. Maybe it was your 10th grade English teacher.
And it’s good advice. When it comes to answering behavioral questions (like “Tell me
about yourself”) in coding interviews, the difference between a good answer and a great
The problem is, people who give you the advice of “Show, don’t tell”… are themselves
failing to follow it. They’re telling you to show, but they should be showing you how to
So here are three specific tips for showing more and telling less.
Imagine two responses to the stock interview question “Tell me about yourself.”
First:
I started programming about two years ago with some personal projects. I eventually got a
job at a small tech company in my hometown, and I’ve been working there about a year
and a half. I like my job, but I’m looking for a new challenge, which I think your company
could provide.
Then:
I got started programming because I wanted to build a social network for cats. That didn’t
take off, but the prototype helped me get a job at a small tech company in my home town.
Last month, I read an awesome article on Hacker News about the social network your
company is building. The scaling challenges you face seem like they’ll help me grow faster
and stronger than my current role will.
Why? Because of the specific details. An interviewer won’t remember the tenth person
to say “I’m looking for a new challenge.” They will remember the person who tried to
build a social network for cats and read about their company on Hacker News.
So don’t skimp on the details. Look out for opportunities to use specifics, especially if
People tend to just cross-reference their values with those of the company or team
I’m really interested in technical blogging and open source. So I like that your company
has some open-source work and contributes back to the community.
That’s a fine response. But to really wow your interviewer, try adding a specific story
A couple years ago, when I was still new to programming, I was working on this tricky
bug. I found a post on a company blog where an engineer explained how her team solved
the issue. She included a code snippet she’d open-sourced. I appreciated that she took the
time to write about her team’s experience and share their solution. It helped me!
That’s how I first started getting into open source. I really wanna work with more
engineers like that—who write about their work and try to help others in the community.
So I was excited to see all the stuff your team shares on your blog and on the company’s
Github profile.
The second response just sounds more genuine. It shows a personal connection to
Anyone can look up a company’s core values and repeat them during an interview. It’s
more meaningful to tell a story from your life that shows how those values benefited
This one’s a neat trick. Consider one more standard behavioral question: “What’s your
biggest strength?”
I work well with others. Even under tough circumstances, I make sure my coworkers feel
supported.
I have a coworker, Ana, who’s been an engineer for almost a decade. We worked together
on this really tough, messy project.
Towards the end, she told me, “For such a hellish project, you really made things feel sane.”
I think this is my biggest strength—I work well with others, even under tough
circumstances.
When you respond with a story, you can refer to what other people have said about
your best qualities. In this case, a ten-year tech veteran said you made a project feel
less awful. That kind of praise is a lot more credible when it comes from someone else.
1. Use specific, memorable details. “Social network for cats” instead of “a personal
project.”
2. Tell a story from your life. “I was trying to solve a tricky bug…” instead of “I value
3. Use someone else’s voice. “’You really made things feel sane‘” instead of "I work
Try these tactics out on the questions below. Keep in mind, sometimes it’s easiest to
Here’s the situation you wanna avoid: You’ve just started interviewing with a company
you're really excited about. Another company you've been talking to for a while sends
you an “exploding offer”—an offer that expires in a week or even 24 hours. You have to
respond to the exploding offer before your final round of interviews at the first
company.
You don’t wanna have to decide between a real offer and a potential offer. Either
● If you accept the offer in front of you, you’re moving forward with a nagging
● If you reject the real offer, it's possible the other company won't end up
extending you an offer in the end. You could end up with nothing.
It's also bad for negotiation. The best way to get negotiating leverage with one
company is to have an offer from another company. If your offers aren't open at the
So you want to do everything you can to ensure your offers come in at the same time.
decision and sign an offer. This includes some allowed time for negotiating once you
Share your chosen signing date with every company as soon as you start talking to
them. You may even want to ask them to confirm that they'll be able to work with your
timeline. This way a company is much less likely to give you an offer that explodes
before that date—they already know your timeline, so if they can't work with it they
What if a company does give you an offer that explodes before your signing date,
even though you told them about it early on? Don't panic. Politely remind them
that you've been clear about your timeline from the beginning. Explain that you'd
like to make your final decision on the date you've already shared with them.
If they still won't budge, you might be better off passing on that company—if
they're comfortable squeezing you this early on in your relationship, that's a bad
Now, some companies have policies about not having open offers for more than X days.
So what if you're going through the interview process with one of those companies and
it looks like you're moving too fast and the offer would come in too early and explode
No problem. Most companies are happy to "pause" or slow down your interview
process so the offer comes in later. This way both parties can get what they want: the
company can follow their usual "offers explode after X days" policy, and you can have
It depends. At a high level, you should allow as much time as you can afford to. Most
people underestimate how long their job search is going to take. And when you end up
in a time crunch at the end, it means less time at the negotiation stage. So allowing an
extra week for your job search could literally mean earning tens of thousands of dollars
If you have a current job or are a full-time student, try to allow more time by starting
Of course, some of us will be in situations where we really need to start our new job as
Keep in mind that you’re shooting for having enough time to practice and get through
the whole interview process with multiple companies if you can. Think through how
One more consideration: if you have the means, consider leaving yourself some
time for a vacation before starting your new job. Job hunting is stressful. And
that window of time between signing a new offer and starting a new job can be a
Many companies are happy to accommodate this by setting your start date a few
weeks after your signing date—just ask. Many offers include a signing bonus,
which could help offset the cost of this extra time without a salary. But again,
this'll depend on your means—not everyone can afford to take this extra time off.
Interview with multiple companies. Exactly how many companies depends on your
situation, but the point is to avoid putting all your eggs in one basket. You want
multiple offers by the end, so you can negotiate the best offer possible.
A good rule of thumb: send out applications to more places than you’re currently
planning. If you end up getting too many interviews…well that’s a good problem to
have! You can always "pause" or simply cancel the interview process with some
companies.
Schedule your favorite companies last. Get interview practice with the places you
aren’t as excited about. You’ll be in your prime by the time you interview with your top
Jot down your impressions after each interview. You’ll be surprised how much
different companies can start to melt together after a couple weeks of interviewing.
Avoid burnout
If you’re casting a wide net and allowing several weeks for your job search, you need to
Space out your onsites. Onsites are draining. Try to keep at least a two day buffer
between them—one day to recover after your last onsite, and one day to get ready for
the next.
Don’t travel too much. You can quickly burn yourself out bopping across the country.
When you have to travel for an interview, try to wait a few days before you travel again.
Batch interviews that are in cities you have to fly to. Try to avoid flying to the same city
multiple times—though sometimes traveling to the same place twice is better than