The Swamp

Just like every other day, I find myself walking down to the Swamp. It’s overcast and chilly. I’m tired and achy and my ankles click uncomfortably loudly as I amble down the hill. I am heading to…

Smartphone

独家优惠奖金 100% 高达 1 BTC + 180 免费旋转




Introduction

From zero to hero in 4 months to land 8 offers

The internet has infinite resources for how to study for the software engineer interview. However, it’s hard to navigate these resources without a clear direction. If you make a plan, will it work? Could you focus on the wrong things and bomb your interview? Are you even good enough for this company?

I struggled with these questions when I started preparing.

In this post, I’ll show you my process. We’ll cover how I studied, interviewed, and earned 8 offers in under four months. This post is part of a 4-post series. You can find the first post here.

We’ll define the interview format & tools, guardrails (not rules) I followed, my study plan, a sample routine, and my tips for before and during interviews. My goal in sharing this information is to provide an approach that works!

It’s important to understand some terms.

The interview process is tiered: you’ll move to the next round if you pass the previous one.

The steps are:

Each interview has a consistent pattern:

There are roughly three types of interview rounds:

The interview process is intentionally designed to test for certain characteristics and experience the company feels are important factors to make a hiring decision. Every company has their nuances and quirks, but the overall process is similar.

It’s also useful to understand some tools we can use to improve our odds of success.

The tools:

With the fundamental building blocks of the interview process as well as the tools covered, let’s dig into the rules — cough, cough guardrails — I followed to land my offers.

Before I started interviewing, I reflected on what types of studying worked well for me. I made four conclusions, and I believe these are helpful to anyone:

These laid the foundation for every step in my study plan. They provided structure and kept me roughly aligned with my destination, like guardrails do.

It’s worth mentioning I read Elements of Programming Interviews initially but quickly became disheartened by the difficult questions. This led me to cycles of dropping interview prep for a week or so, binging a Netflix series while I soaked in self-pity, getting my motivation back up, tackling the book with newfound earnestness and energy, and then rinsing and repeating like a washing machine.

Eventually, I changed gears and then actually decided to think about what types of studying worked well for me. Let’s cover these principles in detail so you can avoid those motivational ruts leading to you binging all five seasons of Rick and Morty — I don’t judge if you do.

Deliberate practice (in the context of interviewing) means studying and practicing components of the interview, gauging your strengths in each, and optimizing your study time by prioritizing weak areas.

It was my solution to the problem of interview prep taking too long and unnecessarily grinding Leetcode.

Here are a list of components for a technical interview:

You can probably break it down even further. In my experience, most people tend to struggle with steps 2–5, so I practiced those.

When you’re starting for the first time, you’ll likely be bad at all of these. That’s expected! You can’t reasonably improve if you don’t know your baseline performance. And your baseline performance will probably be bad. After your first few mock interviews, you’ll have a decent idea of the parts you’re struggling with. Write these down and focus on them during your next mock interview.

Guardrail #2: Mirror the environment as closely as possible

For deliberate practice to work effectively, you’ll need the best environment possible. The best environment is the one most similar to the actual interview: timed, mock interviews with a friend or colleague using random, medium-difficulty coding questions.

Mock interviews are emulated interviews where you go through the motions of an actual interview except with a friend or colleague. So, you introduce yourselves (I know, it’s weird), the mock interviewer shares a google doc with you, and you start asking questions & explaining what you’ll do. At the end, you’ll ask some brief questions about their company and wrap up! Afterwards, ask your friend or colleague to give you some pointers & feedback on what you did well and what you didn’t do so well. Ideally, follow a grading rubric you both agree on beforehand so you can more concretely measure your performance between mock interview sessions.

The idea is to use mock interviews as a barometer of actual interview performance.

By mirroring the interview environment using mock interviews, you:

Guardrail #3: Study the “test” as closely as possible

Deliberate practice and mock interviews work best when we use the best ingredients to facilitate excellent practice sessions. A key ingredient you’ll need is to practice real, Google / Uber / Facebook / etc. — level questions to acclimate to the difficulty of these interviews.

By practicing with big N company-level questions, we’re studying the “test” because if we had an interview with any of these companies, we can reasonably expect a coding question from them to be like the ones we practiced.

Finally, when studying the “test”, ensure you focus on learning from each interview and identify what went wrong and well. This helps round out deliberate practice by learning from our mistakes.

Guardrail #4: Reduce surprises and/or be comfortable

When I started studying for technical interviews in the past, I focused on achieving a certain number of Leetcode problems. It could be 200 or 300 — and even those are rookie numbers compared to some — but I’d still get rejected.

This time around, I focused less on the actual number of leetcode and hours, and more about my comfort level. There were weeks I did 3 leetcode questions and others when I did 15. I considered both cases a success because I felt comfortable with my level and depth of practice during those weeks.

I believe comfort should be your North Star: I believe this so much I avoided doing phone screens or mock interviews the day or two before my actual interviews simply because I didn’t want to torpedo my confidence.

An aspect of feeling more comfortable for me was reducing surprises. So, in the context of the interview, this meant nailing your introduction, conveying your behavioral stories, and asking follow up questions. I effectively removed these parts from the list of interview components mentioned earlier by practicing to the point where I felt reasonably comfortable I could perform well automatically in an actual interview.

Stack every advantage in your favor.

With the guardrails to guide you to a successful study session covered, let’s cover my study plan.

In this section, we’re going to cover my study plan. Then, we’ll cover each topic area — nailing your introduction, behavioral, coding, and system design — piece by piece for best practices, specific tips, and a basic first step you can take to make progress.

After we’ve laid out a basic routine, we’ll discuss how to implement this study plan in the context of the actual interview process. So, this includes mock interviews (before doing phone screens & onsites), before the interview, and then during the interview.

Your introduction is a small part of the interview, but an important one to set the tone for the rest of the interview. At a high-level, a good introduction contains:

The general formula I use for my introduction is:

Here’s an a concrete example:

The most important thing to remember for an introduction is to practice until it’s smooth and rehearsed to the point it’s automatic. You don’t want this part taking too much time and nailing this gives you the confidence to do well on whatever comes next.

Here’s a good first step: write down a brief introduction following the formula above. Practice it out loud three times. Make sure to rehearse these during mock interviews too!

With your introduction down, let’s cover how to answer behavioral questions.

Behavioral questions are questions interviewers ask you about your professional experiences. However, they’re not typically used to assess your technical ability, but rather to understand if you have certain traits, experiences, and skills the company values.

The general formula for any behavioral question is:

For example, a question assessing Amazon’s Bias for Action leadership principle is: “Tell me about a time when you worked against tight deadlines and didn’t have time to consider all the options before making a decision”.

By asking questions like these, the company is prompting you to give a story where you demonstrate the value. If you demonstrate it well, that’s a good sign to the company! If you don’t — or worse, do the exact opposite of the value — it may be a red flag to the company.

While this sounds daunting — there’s tons of companies and each has their own values- the real trick behind doing well on behavioral questions is to write down a few of your answers ahead of time and repeatedly practice these until it becomes second nature to you. These are called Behavioral Stories.

A behavioral story is a written script of what you say for a behavioral question. By writing stories ahead of time, you can practice until it becomes smooth.

To write a good story, keep it short (max 250 words) and write your stories in the Problem — Action — Result format (P.A.R.).

By keeping it short, it’s easier to memorize it.

While you can follow any format, the P.A.R. format is a way of writing behavioral stories in a structured format. You briefly describe the problem, the action(s) you took to fix the problem, and the results of your actions. It keeps your story on track. Also, your interviewer takes notes on your responses and a common format to write these notes in is the S.T.A.R (Situation — Task — Action — Result) or P.A.R. format. It’s easier for them to write down the details if you use a similar format in your stories.

Finally, before I write a story, I write a brief set of qualities I’d like the story to demonstrate. These are generally universal qualities and experiences like proactivity, mentoring junior engineers, working across teams, etc.. These inform my writing and generalize my answers for a wide variety of behavioral questions. When answering a behavioral question, you can tweak your story slightly to emphasize one quality over the other.

Here’s the format:

Here’s a short example:

When you answer a behavioral question, you can mentally leaf through your 3–4 stories and choose the one best fit for the question. I recommend you memorize 3–5 stories with as distinct a set of qualities and experiences as possible so you can answer a wide variety of behavioral questions.

To take a first step: in a bullet-point fashion, list 3 or so experiences at a high-level. So, an example bullet point could be: Server-side Pagination @ Amazon on the platform team.

Then, for one, expand on the point by writing out a 50-word description of the problem, 50-word description of the action you took to fix the problem, and a 50-word description of the result. Repeat this for all stories.

With behavioral stories nailed down, let’s move on to coding.

There’s two distinct parts to preparing for coding interviews: learning the fundamentals (data structures, algorithms, etc.) and practicing Leetcode.

While I was studying a particular data structure or algorithm, I also kept in mind how often it could turn up in an actual interview. Here’s a list of the topics I studied:

This is not exhaustive, but it gives you 80%+ of the results you want for the least amount of effort.

I omitted a few topics. These are use-case specific topics you can cover if you know they’ll show up.

As a first step: using the topics above, just watch the baseCS videos on YouTube and take some brief notes. You’ll prime your brain to recognize some of these. You can also do a few Leetcode questions on these topics as you cover them.

Also, create a schedule for yourself to cover these. For example, you’ll learn about Arrays for a week and do Array leetcode problems. Then you’ll study Linked Lists for two days and do Linked List leetcode problems. I’d follow the list from above in order and spend a proportional amount of time to cover subjects based on rarity. You can also follow the routine discussed later in this article.

After a basic coverage of the data structures & algorithms, you should feel reasonably confident you can discern what a coding question is asking and the inklings of a solution using data structures or algorithms.

It’s time to learn how to deal with Leetcode.

Leetcode is tough to grind. If done properly, you can be confident you’re grinding the minimum number of questions you need and come away with a huge amount of knowledge by understanding the kernel of the approach to a problem. Most problems are variations of a few patterns.

My overall strategy was to first study high-frequency Leetcode questions. My goal was to maximize my odds of seeing a similar question in an actual interview. Additionally, I mostly focused on medium-difficulty questions. They represented the bulk of my questions (65%) while the remainder came from hard (25%) and easy (10%) difficulties.

While you’re studying a topic, cover questions using the data structure or algorithm. You can filter by topic and also sort by frequency to get the best set of problems to review while covering the topic. After you’ve covered all the data structures and algorithms, start looking at all the high-frequency questions in general (regardless of topic). Lastly, as soon as you’ve scheduled an interview, start reviewing the company’s question bank and sort by frequency and within the last 6 months. If you finish the 6 month list, go on to a year.

And that’s basically how I studied Leetcode — studying high-frequency, medium-difficulty questions in a tiered approach to maximize my odds of seeing a question or a similar one.

While you’re doing a problem, if you can’t figure it out, make sure you stop after 15–30 minutes. Cut your losses as soon as possible so you don’t waste time staring at a blank screen. Read the top-voted answer on the problem’s discussion tab, and rewrite the solution from scratch so you understand how it works. In my experience, half of the difficulty in solving a problem is in identifying a working approach. Working backwards from a clear & clean solution by rewriting it makes it easier to absorb the solution instead of trying to both problem-solve and then code for a solution.

Often, you’ll bounce back and forth between watching BaseCS videos, giving up, practicing LeetCode, giving up, and repeating….. That’s natural. Just focus on consistency — do one question a day at minimum. More if you can. Be mindful of your energy and your off-days. Take plenty of breaks to avoid burnout. Relax, you’ll get this job.

Also, plan the problems you’ll do in advance. This removes a key decision step so you can start the day without figuring out what you want to do.

Whenever my friends ask how I prepared, I give them unconventional wisdom: watch two YouTube videos. I kid you not. In fact, generally speaking, I studied System Design by watching YouTube videos and drawing out the diagrams on paper. I’d also add any notes and comments if applicable.

Those two videos are:

The gist of my approach to practicing system design interviews was to mimic the thinking process and copy the approaches until I learned the tricks, pitfalls, and rules of thumb.

After you’ve watched the two videos, expand to other topics:

Once you’ve completed a video, you should have a beautiful set of diagrammed notes and annotations. You can skim these before an interview to refresh your memory, tips & tricks, and things to watch out for.

With System Design covered, let’s move on to a sample routine to put this altogether.

This routine is an example. You can mix and match, cram, or skip content.

Phew, thanks for reading this post. I hope it helped you! Let’s cover some of the important points:

Feel free to comment on what you’d like to hear more about. I review every comment. In the meantime, stay tuned for the next post, how to team match to find the team for you!

If you’d like to support my writing, sign up for a medium membership here: https://kencortereal.medium.com/membership.

Add a comment

Related posts:

How to Balance Daily Life

Our lives consist of so many different strands. It can get pretty overwhelming and upsetting when we look at our lives and we realise we haven’t contacted our friends in months because we’ve been so…

Reflections on Riri

What does one think of when they hear the word “Rihanna”? Is it her bold charm? Her diverse voice in the music industry? Her top of the line fashion statements in NYC, L.A., and Paris? Her…

Different kinds of alcohol might make you feel different emotions

Humans have been buddies with booze for thousands of years. Some scientists believe this love affair goes back even further. The so-called drunken monkey hypothesis speculates that our ancestors…