Coding interview preparation can seem like an incredibly daunting task. This is especially true if you’ve never done one before, if you are a self-taught developer or bootcamp grad, or if you don’t have much industry experience. Unlocking the coding interview opens the door to top pay, benefits, and perks at premier tech companies.
The key to preparing well for a coding interview is having a great preparation plan. A structured coding interview preparation plan can bolster your confidence and readiness. It also ensures that you will spend your time optimally without getting overwhelmed.
Though we’ll be focusing primarily on coding interview prep, the strategies we’ll discuss here apply to other interview types as well, both technical and non-technical.
Crafting a great coding interview preparation plan begins with the job description. It is likely the first official documentation you’ll read regarding the job. Hiring managers and recruiters will take hours and even days to define and refine a good job description. It describes the ideal candidate they hope to attract. It will also serve as the source of truth for skills you’re expected to display in the interview process.
Make sure to read the job description between three to five times at minimum. As you read, keep a pen and paper handy and have a dictionary available to look up unfamiliar words. Having a search engine is also useful for looking up concepts that aren’t immediately clear.
The aim of reading the job description is to establish an initial study list. Here’s how I recommend you study the job description for coding interview prep:
On the first couple of passes, read through the content passively noting the overall structure and tone. Resist the temptation to dig into details just yet. Try not to even take notes. At this point, this is more about the forest than the trees. Focus on absorbing the whole job description as a unit. Get a sense of how everything fits and flows together. At this stage, you’ll begin to start unconsciously memorizing words and phrases. This will help you later in the process.
In the next phase, read through the job description starting again from the beginning. Highlight any words, phrases, or concepts that stand out. Focus especially on things that are repeated multiple times. Repetition is often used to imply emphasis and importance. These are the things that you should prioritize in your preparation plan.
In the last iterations, write out a list of topics that will form the foundation of your study list. Organize your list into three categories: 1) technical skills, 2) soft skills, and 3) key values. For your coding interview preparation plan, the technical skills category will matter the most.
Now, with a solid understanding of the job description, it’s time to research the interviews. Your research should reveal the types of interviews you will encounter. It will also help you to nail down even more specific topics you should know. If you are reading this article, I assume you already know that a coding interview will be involved. But there are other types of interviews you will also need to anticipate in your interview preparation plan.
Here are some places you should look for details on the interview process (in order):
For top tech companies, you will almost certainly be assigned a recruiter who will discuss the role with you. They will be a fountain of pivotal information upon which you would do well to rely. Use your recruiter to tease out the nuance in the job description and get more details around interview specifics. They can also give you up-to-date information that the job description may not yet present. They may even tell you what things you can safely ignore.
Many companies in recent years have built their own interview preparation resources designed to help you understand their unique process. No two companies interview exactly alike, so understanding the process for a specific company is important. My favorite so far is Google’s own Tech Dev Guide. It contains example problems, links to free courses, and practice assessments. Amazon also has some useful resources that you should read if you’re interviewing there.
Third-party sites can provide a wealth of information about the interview process. My favorites are Glassdoor and Blind. However, you need to carefully consider that any reviews on these sites are non-authoritative. They may not apply to your specific interview process. Like other review sites, people are most likely to leave reviews when they are unhappy. Be wary of bias.
It is not too hard to find people who work at your target company using tools like LinkedIn or Medium. Sometimes, you’ll find that these individuals have blogs and that they write about their interview experience in way more detail than you’ll find in other places.
Apart from the coding interview, one of the first ones to prepare for is the recruiter screen. Early in my career, I didn’t even realize that I was in a recruiter screen interview until after the fact. Now, I treat every conversation with a prospective company as an interview and do my best to prepare accordingly.
You won’t get to do the coding interview if you don’t pass muster with the recruiter. This won’t be a difficult assessment. Rather, the recruiter screen is a pretty straightforward check of your skills and your interest. You could be asked about programming languages, frameworks, and projects you’ve worked on in the past. The recruiter will also assess your interest in the role and determine how active your job search is.
You can prepare for the recruiter screen by reviewing your resume, familiarizing yourself with basic behavioral interview questions, and understanding the job description.
In addition to preparing for recruiter questions, make sure that you have a couple of questions ready to ask. Get all the information you can around the interview process and the position you’re interviewing to fill. You might even learn about the specific team that’s hiring and the kind of work you may be doing.
Now if you’ve been wondering when I was going to get to the coding part of the coding interview preparation process, don’t worry! We’ll get there soon. But first, we need to talk about design principles.
You need to write good, clean code that is idiomatic for your programming language. It also needs to be largely bug free and syntactically correct as well. If you’re going well under a stress-inducing live coding interview, make sure you are solid on code design.
Write code everyday. This is easier to do if you already have a full-time coding job. If you aren’t employed, make your own opportunities so that you are building muscle in your programming languages and tools.
Review good code construction practices. The goal is to know how to define good variable names, clear functions, and well-structured classes. There are good books on writing high-quality code like Robert C. Martin’s “Clean Code” or Steve McConnell’s “Code Complete.” You don’t have to agree with everything that they recommend. However, their insights will help you to think about how to write code for clarity, extensibility, and easier maintainability. Style guides are also great. I really like Google’s style guidelines and Microsoft’s as well.
Once you understand how to write well organized functions and classes, it’s time to think about code design patterns. Start off by reviewing SOLID design principles and understand the differences and tradeoffs between object-oriented programming (OOP) and functional programming. Also, lock in the essential Gang of Four design patterns. I grew up learning these from the book Head First Design Patterns. There are also YouTube videos and websites like Refactoring Guru or GeeksforGeeks that are pretty great too.
Lastly, make it a practice to read good code regularly. It’s not hard to find decent repos on GitHub, maybe even from your prospective company. If you’re doing coding interviews with companies that have rigorous style guides and conventions, read examples of their code. This is especially useful for FAANG company interview prep. Make it a point to do your best to mimic that style. It’s about looking like you’re already an engineer who would fit right in with their engineering culture.
You’re almost ready to build your coding interview preparation plan. You should already be aware of what you need to know for your interview. There is just one more thing that you need in order to proceed: a priority list.
Building a prioritized list of topics helps you to organize your preparation. It will help you tackle the most important things early on and save the easier stuff for later. But how do you know what should go first, second, and third on your list? You might already have an intuition about this. However, I recommend that you validate by benchmarking yourself using sample questions and problems by topic area. You can use a stopwatch to measure how long it takes you to provide an optimal answer. The slower you are, the more work you need to do to get faster over time.
The hardest part of this step will be figuring out what your benchmark assessment will look like. If you’re going to have behavioral, live coding, and knowledge interviews, then you’ll want questions for each type. For FAANG style coding interviews, I picked a couple of questions from each section of Cracking the Coding Interview, a few behavioral questions, and some random Java language quiz I found. That could easily have you working through 40 problems and questions before you’ve even started studying!
After you have worked through sample problems, you should have a good idea of what your strengths and weaknesses are. You will have a well-informed, data-driven priority list tailored to your skill set and the role for which you’re applying.
At this point, you should have all of the necessary inputs to build a good coding interview preparation plan. You now need to combine all your data into a cohesive preparation strategy. Your plan will largely dictate what you need to study and when you should study it. Now is the time to put on your project manager hat!
Time is going to play a big factor in how you arrange your plan, so starting early is key. It probably won’t be realistic to expect that you’ll spend 10 hours a day studying. Some of you reading this may be able to. However, most people cannot just start from zero and suddenly sustain a rigorous work ethic without getting crushed. It’s usually better to work up to this.
Figure out how many hours you can commit per day and on what days of the week. Then, extrapolate how long it will take you to cover everything on your list. Alternatively, work backwards from your interview date. Determine how many topics you can reasonably cover with the time you have, then set a schedule. If you think you need to push your interview date to give yourself more time, talk to your recruiter ASAP.
Here are the elements that should be included in your preparation regimen:
This one is pretty obvious. You’re going to be working through LeetCode and HackerRank style coding problems to build up muscle in this area. You should select your problems based upon your priority list and occasionally mix in random easy and medium level problems. I recommend working through pre-organized lists of problems that help you focus on specific patterns. And remember, your goal isn’t to memorize solutions. It’s to memorize and feel comfortable with patterns and common paradigms.
Do keep in mind that not every interview features data structure and algorithms style interview questions. Make sure to find coding questions appropriate to the interview type you expect.
I recommend to my clients that they memorize several algorithms and data structures and write out the code by hand. Not only does this give you something to code each day, but it helps you understand these algorithms better.
Your coding interview may feature fast-fire knowledge questions about programming languages and principles. Make it a habit to quiz yourself regularly on key terms and design principles so that the information stays fresh.
Make sure to pre-craft responses to the most common behavioral questions and rehearse them. Rehearsing responses will help you answer questions fluidly and succinctly in an interview situation.
Although you will spend much time studying on your own, you must also practice being interviewed by another human being. I have come to believe that mock interviews are the cornerstone of a good coding interview preparation strategy. Sure, you can also watch sample mock interviews on YouTube and on other platforms. But there’s nothing like sitting in the hot seat yourself.
You should have a reading list that you can work through covering some of the things we discussed earlier. This includes reading news about the company for which you’re applying, books on good code design and design patterns, and blog articles about system design. You might even continue reading interview stories from individuals who have gone through the interview process for which you are preparing. And, if nothing else, keep reading good code so that you become more comfortable with best practices and patterns.
I know that we’ve covered a lot of information in this article. This all might have you feeling some kind of way (as my wife likes to say). It took me 15 years to figure out everything that I’m sharing with you. Trust me, this isn’t even half of it. There’s even more I could teach you.
If the thought of all this preparation has you feeling overwhelmed, don’t worry. Give yourself time and permission to work though this content at a pace that makes sense for you. Read this article a few times. Let it soak in. Then do a little bit at a time. Not everybody will need to do everything that I’ve spelled out exactly as I’ve written it here.
If you need help crafting your plan, you can book a complimentary consultation with me. I’ll be glad to discuss your unique situation. I’ve also got a free upcoming live webinar on technical interviewing that you can join. I’ll teach you even more stuff about succeeding at technical interviews to help you win.