In this article, we look at the preparation that goes on on both sides of a
software engineer interview.
The contents of this post ended up being a bit more serious than I had
originally intended.
My bad 🤷.
Candidate preparations
It does not matter if you are trying to break into tech or if you are a
seasoned veteran hungry for new work politics and novel, revenue-generating
tech debt - preparing for a technical interview can be a lot of work.
Depending on your life situation and career aspirations, you could credibly be
preparing for months in advance!
Tip
Remember that discipline is key.
You can do it!
Introspection
The first step in your preparations should be introspection. Figure out what
you’re looking for in your next job. Are you looking for a higher salary?
Bigger company? Smaller company? Remote? More mentorship? More autonomy?
No matter what it is, figure it out first since it will guide the rest of your
process.
Pipeline building
The software engineering interview process can be broken down to the following
milestones.
Resume writing: Try to put yourself in a recruiter’s / hiring manager /
business owner’s shoes. What are your most marketable qualities? List
those first and don’t forget to weave in your story.
You should be able to get this done in a couple
days.
Keep it simple. No one actually wants to hear your life story. They just
want to know if they should hire you.
Application: The main goal here is to get as many callbacks from places
that you would credibly work at. You’re building your “top of funnel” here.
This could take a really long time depending on
what you’re looking for and where you are at in your career. Budget at
least a 2-3 weeks for actually getting callbacks. Realistically, you
might be looking at several months (especially if you’re earlier in your
career).
More senior folks will have an easier time getting callbacks.
Time between application to callback is generally a function of company
size. Not always true, but typically bigger company = slower pipeline.
Referrals can increase your callback rate, but they’re not a sure thing.
Recruiter screen: Whether or not there are recruiter screens varies from
company to company. If they do happen, the actual screen varies from a
pulse check (i.e. are you a real candidate) to mini behavioral screens. The
main thing for you at this stage is to try to identify glaring red flags
(e.g. is it a scam?) and then get to the next stage. You’ll
want to have your story about why you’re looking for a job more dialed in at
this point.
The main thing here is scheduling. This is
doable in an hour or so (prep, then call).
Technical screen: If all goes well to this point, you’ll finally be
offered a chance to show your skill. The first technical screen can range
from a live coding interview to an automated online assessment to a take
home project. You’ll want to make sure that you’re sharp enough to pass
this round. These screens are usually easier versions of the full onsite.
Similar to the recruiter screen, the main thing
is scheduling. You can get this done in an hour or so. If it’s a take
home, these can take up to 4 hours or so. Any company that wants even
more than 4 hours is either a scam or a waste of time for you at this
point.
Onsite: For most companies, this portion is usually about 3-6 separate
1h interviews on various topics. The other preparation topics below are
aimed at helping you pass the onsite interviews.
Expect this to take a full day (or more if you
break it up over multiple days).
In the virtual era, it’s more likely that companies will allow you to
schedule over multiple days. Take advantage of this if you can! You want
to be as sharp as possible.
Offer: If you make it to this stage, congratulations! The goal at this
point is to find the best match. Try to envision yourself actually working
at the company and go from there. On the negotiations front, it’s really
hard to go wrong following Haseeb Qureshi’s twoposts on the topic.
At this point, companies will want you to sign
ASAP. If you are looking at multiple offers, you will need to fight for
the time to consider. In that case, budgeting for a week or two is
reasonable.
Tip
Your goal for the pipeline building process is to explore your personal job
market so you can find a great fit for yourself.
One way to do this is by trying to land many offers at approximately the same
time.
Time spent
If we assume absolutely everything goes smoothly for a single company, we can
expect at least a month of calendar time to pass from first contact to signing
an offer.
In reality, we should account for potentially having multiple companies at
different stages at once. Keeping all the companies at the same stage will
draw out the timeline. It’s not the perfect heuristic, but for every company
you add that you take all the way to the end, you should add a week. Budget
your time and money accordingly.
Coding
Coding interview preparations can be broken down into 3 parts.
Theory: There are a ton of resources out there that I won’t rehash here.
You’ll want to make sure you have all your basic data structures and
algorithms theory fresh.
This could take no time (since you already know
the stuff) or a ton of time (if you’re starting from scratch).
Post-secondary education usually presents these topics in at least a
couple classes - algorithms and data structures.
Practice: This is where the bulk of your time will be spent. Try to do
all of these problems without looking first, but don’t spend much more than
about 15 minutes struggling on each problem. You’re looking for breadth
here.
Think about how much time you want to spend,
then do the problems on LeetCode from Grind 75.
Mocks: These are useful to get a sense for the cadence in a live
setting. Consider doing one of these if you never have before, but no more
than 2-3. Spend your time doing self practice.
At most, 2 or 3 mock interviews.
Time spent
If you are already in “interview shape” or if you know that all the companies
in your pipeline are going to only ask practical coding questions, you could
skip this part entirely!
On the other hand, if you intend to study, there’s not really an upper bound to
how much time you can spend here. A good milestone is probably knocking off
the first 75 representative problems. A month or so might be a good
average time spent if you’re looking to get all of those done.
System design
The system design interview preparation is very similar to coding interview
preparations. The difference is that this style is more open-ended and usually
more difficult to administer. It relies on the skill of both the interviewer
and the candidate to produce a good outcome. As a result, the variance on the
results is often higher.
Tip
In general, you’ll get a high level problem like “design X” where “X” is a
product.
The crux of the interview is to lay out and communicate your plans. You’ll be
judged on how well engineered your sketch happens to be.
Tools: This mirrors the “theory” part of the coding interview. You’ll
need to understand the different tools that are used in a distributed system
like databases and caches so you can apply them to your problem.
The lower bound here is close to zero - if you
already have a load of actual experience designing systems or if you know
your interview loop won’t really ask it, you’re good. The upper bound on
this is probably several months. You won’t be able to make yourself
multiple orders of magnitude more effective, but you should be able to
understand the current state of the art in theory.
Practice: To practice, pick any popular service and give yourself some
time to write out a design using paper and pencil. You can pull from this
list to start. Note that there are a load of resources out
there including paid courses and YouTube videos. There’s rarely “one
correct answer”.
I personally spend about 20 minutes or so
trying to get the gist of a solution, about an hour reading /
understanding someone else’s solution, then another 30 minutes trying to
solve it myeslf again. Repeat this for the ~20 common problems and that’s
probably a good start.
Mocks: It’s worth doing at least a few mocks, but arranging them can be
tricky. The main benefit to mocks will be that they let you try out
different frameworks for answering these sorts of questions. Much of this
interview is finding your voice and how best to communicate to your
interviewer.
It probably doesn’t make sense to do more than
2 or 3 of these. You run into diminishing returns after that.
Be honest with yourself with what you know and don’t know.
It’s not enough to have just read a description of something. You need to be
able to naturally weave it into communication with an interviewer.
Time spent
You should cover at least all the common “tools” and review at least a dozen or
so of the common problems.
This will take a least a week for someone already pretty well versed. If
you’re starting from scratch, this could take months.
Behavioral
Recount: Think of 2-3 past experiences that consist of large projects
(relative to your own experience) with good start, middle, and end. They
don’t have to be tech related! You should write these out in as much detail
as you can.
This should be doable within 1 week.
Mocks: Get someone to ask you some standard behavioral questions. Try
to answer using STAR.
Probably doesn’t make sense to do too many
mocks. You just want to get used to leaning on your chosen 2-3 experience
to handle answering most questions. At most a week or so is needed here.
Time spent
Preparing for behavioral interviews is one of the lightest tasks. It’s rare
that you get judged really harshly on your responses unless you’re downright
offensive.
Use the interviews as an opportunity to tell your story. You probably don’t
need to spend more than about a week on the preparations.
Conclusion
As you can see, preparing for an interview can be a ton of work. Don’t shy
away from it. This is how you will spend half your waking hours. As silly as
the game is, it’s worth it.
Best of luck!
Interviewer preparations
If you are preparing to conduct a technical interview, you probably don’t need
much more than about 15 minutes to familiarize yourself with your company’s
problem bank.
If your company does not have a problem bank, it’s even easier. Search or
generate results for something like “software interview questions” or just make
up your own if you’re feeling unique ❄️.
Tip
Remember - if you make a mistake administering the interview, it’s OK!
There will likely be dozens more opportunities to try again over the next
several weeks.