Interview prep can stir up a whole cocktail of emotions and self-doubts, especially for tech professionals. You might find yourself swinging between feeling like a genius one minute and grappling with imposter syndrome the next. Or maybe you're questioning why interviews still follow those traditional, sometimes rigid formats. It's all part of the package. The trick is not to let these feelings run the show. Instead, understand that interviews are a game with certain rules, and your goal is to play it as best as you can.
The Many Flavors of Tech Interviews
Tech interviews are like snowflakes — no two are exactly alike. Some might be heavy on tech questions, and others might focus more on how you fit into a team. This variety means you need to be adaptable and ready for anything.
But despite their differences, there's a growing trend towards a more standardized process in these interviews, thanks to our ever-connected global world. So while each interview will have its unique quirks, there are common themes and patterns you can prepare for.
OOP Interviews
OOP interviews represent a significant segment of technical interviews, often characterized by their ironic and sometimes convoluted nature. These interviews are particularly popular in environments dominated by a single programming culture, often among devoted Java enthusiasts. These interviews dive deep into the programming principles, design patterns, and specific technical knowledge.
Over the years, they have become notorious for posing the same set of questions repeatedly:
- What are the different data types?
- Explain synchronized.
- How do you implement a Singleton?
- Can you demonstrate Spring framework concepts?
- What is CQRS?
- What are the three fundamental principles of OOP?
- Decode SOLID.
If you find yourself facing such an interview, you may end up in one of two companies:
- The Dead-End Workshop: Here, you might be in a place where people are content wielding only two hammers and tightening nuts with them. There is a distinct lack of more profound knowledge, and the architecture is typically designed by "architects" who do little more than ask these same questions. It might be wise to consider other opportunities.
- Specialized Position: Alternatively, you may be in a place where expertise in a specific tool or technology is a non-negotiable requirement. This could apply to positions involving compiler development, toolchains, or any role heavily reliant on C++. In such cases, you're expected to have a certain level of competence from the outset.
For generalists who excel in multiple languages but lack deep knowledge of the internal workings of Go's scheduler or Java's garbage collection, consider avoiding companies that prioritize such minutiae over practical problem-solving skills. FAANG-like companies often place a higher value on candidates who can apply their knowledge in real-world scenarios.
Or if you see some distinctive tech stack listed in the position and want that role, you probably need to be prepared for the distinctive tools features and pros and cons — the documentation, a bit of googling and some specialized blog posts are probably a good start. Also, be honest about your knowledge. Honestly recognize your strengths and weaknesses. If you are not very familiar with a particular technology or concept, admit it. It can be appreciated, and it sets the stage for a constructive discussion.
Some recommended resources:
- List of some discussion questions split by category
- Python interview questions: Part I, Part II, Part III
- Machine Learning Interviews
- Catalog of all FAANG interview
Whiteboard Interviews
Whiteboard interview is a common and challenging format. Paradoxically, it is also among the easiest to prepare for, thanks to its clear rules. These interviews typically involve solving algorithmic problems on a whiteboard or a shared online platform.
During the interview, it’s crucial to:
- Communicating Your Thought Process: During the interview, clearly articulate your thought process, consider alternatives, and discuss trade-offs.
- Understanding the Problem: Make sure you thoroughly understand the problem statement before attempting to solve it.
- Staying Engaged: Don't freeze up or get discouraged if you encounter difficulties. Keep engaging with the problem and maintain a dialogue with the interviewer.
Preparation involves understanding and practicing a variety of algorithmic concepts, like dynamic programming, divide and conquer, backtracking, etc. Effective preparation includes both theory and practice. Resources like LeetCode, HackerRank, and Codeforces can be very helpful. The focus should be on understanding problem-solving patterns and applying them in different scenarios, not memorizing specific solutions.
Some recommended resources:
- Good LeetCode lists: grind75, SQL 50, Top Interview 150
- Coding Interview University
- [Book] Grokking Algorithms
- Data Structures and Algorithms Specialization
- [Book] Cracking the Coding Interview
- Top 100+ Data Engineer Interview Questions
System Design
In a system design interview, you are presented with a hypothetical system and tasked with designing it.
Let me begin by stating that, in my opinion, success in system design interviews is closely tied to experience. No matter how many books you read, if you've never worked with distributed systems or have never designed anything substantial, you're in for a tough time. There are rumors that some individuals can pass System Design interviews by rote memorization or mimicry, but that might get you a job at Amazon AWS, where they play chess with interest. Therefore, if you've spent your entire career in companies without distributed systems or design experience, it's time to change that.
Beyond the tech knowledge and interview skills, there are three things that many folks forget to focus on when preparing:
- Communication Skills: You've got to be able to explain complex ideas clearly. Practice talking about your designs in a way that makes sense.
- Interactivity: Be ready for back-and-forts with your interviewer. They're gonna shoot you with questions, challenges, and discussions while you're designing.
- Flexibility: Don't be stuck on your first idea. Be open to changing your design based on feedback and new info. Stubbornness won't serve you well here.
The more senior you are, the less your interviewer should be heard during a system design interview. Show your initiative by leading the discussion and actively engaging with the interviewer. The best system design interviews, based on feedback, often resemble a 45-minute monologue, with the interviewer chiming in only sparingly. Ideally, you get the task, sort out any questions you have, and then take charge of explaining how it's done.
Next, couple tips regarding the technical aspect of that.
Focus on Requirements
When it comes to system design interviews, it's crucial to show that you're a genuine engineer, not just someone tossing around buzzwords or doing a sales pitch. You can do this by consistently considering trade-offs and framing solutions based on requirements rather than blindly chasing after specific platforms or technologies. Articulate your thoughts clearly and concisely (probably it's applied to all the stages of the interview process). Speak aloud about the trade-offs and decisions you are making during the design process. If an engineer can't see the downsides of a solution, they probably don't fully understand the problem, the proposed solution, or both. It may sound complicated, but I'll show you how it's done.
Not-So-Good Example: "Let's use Amazon Certified DynamoDB as a Service for the database and Amazon Certified Cache as a Service for caching because that's what I learned in my courses."
Better Example: "We need a database here, and our requirement is to insert data very quickly and perform infrequent reads only by key. Therefore, we should consider LSM-like storage systems because they work like this and that. If we choose B-tree storage, it would be worse for these reasons, but it would offer this capability."
Only towards the end of your discussion about the system, you can mention a couple of technologies. It's also a good practice to bring up your own experiences, like: "We had a similar situation in my previous role, and it unexpectedly failed under these circumstances. It was quite a challenge, because...".
In practice, startups often ask candidates to design the architecture of their products. This requires a deep understanding of system design concepts and the ability to apply them creatively. For big tech companies, questions may revolve around general topics such as designing YouTube, messaging platforms, or search engines.
Structured Approach
Perhaps one of the most crucial aspects of a system design interview is time management. Surprisingly, many candidates fail to manage their time effectively, leading to situations where they only have 10 minutes left, yet are still asking initial questions. Therefore, it is very important to keep track of time and have a clear plan in your head, preferably right in front of you, with a breakdown of time allocation.
Try to follow a structured approach during the interview. Maintain a logical flow in your discussions. Randomly jumping between topics won't yield positive results. Here's a plan I personally use:
- Requirements and Questions: Start by discussing the problem, users, workload, and all relevant details. [5-10 minutes]
- Estimations: Consider storage needs, network load, and other related factors. Allow [5 minutes], roughly. Sometimes, I skip this part and calculate as I progress.
- High-Level Design: Sketch out a few boxes with arrows to represent the high-level components. Discuss goals, what you aim to achieve, highlight potential bottlenecks, and trade-offs. [10 minutes]
- Deep Dive: Take one or more of the boxes and delve deeper. I usually pick storage and explain how it should be designed. Be prepared to address questions posed by the interviewers or go deeper into the specific component or address specific challenges. [20 minutes]
- Wrap-Up: Reiterate what you've discussed, where there's room for improvement, what can be monitored/alerted, and how to push this into production. [5-10 minutes]
Having a plan like this with a timer can help you avoid spending too much time on elaborate speculations and ensure that you maximize the amount of valuable insights in the given time.
Prep tips
You can prepare for system design interviews through two main approaches:
- Study Existing Examples: Read existing examples of system design interviews and learn how to structure your responses, allocate time, and remember a few good ideas that might come in handy when needed. I personally like explanations from this guy, also you can check some popular mock interviews here.
- Mock Interviews: For System Design, mock interviews are almost essential. It's best to ask a friend who already works in a company similar to your target employer for help or use some service (there is a ton on the internet).
- Post-mortems: A highly valuable technique for me when preparing for system design interviews is studying post-mortems. There's nothing more captivating and informative than witnessing systems crash with a bang for various reasons. They read like thrilling stories or even bedtime tales. You can find a valuable collection of post-mortems from Dan Luu here.
Some recommended resources:
- System Design Interview Cheat Sheet
- System Design Interview Cheat Sheet for time management
- ML system design
- Grokking System Design Interview course
- Systems Architecture Interview: Clarifying the Question
- System Architect Breaks Down System Design Interview
- [Book] Designing Data-Intensive Applications
- [Book] System Design Interview: An Insider's Guide
- [Book] Grokking Concurrency
- [Book] Understanding Distributed Systems
- How to pass the data architecture interviews in big tech
- System Design Primer
Behavioral Interview
This part can be surprising for juniors and mid-level folks and highly valuable for senior and staff-level individuals. It forces "real devs" to break a sweat and stumble over their words because they're used to talking about code, but here they need to discuss strange questions that seem unrelated to work.
If a whiteboard interview checks if you can code and talk, system design and behavioral interviews nail you down for a potential job offer. So you need to prepare for behavioral interviews as much as technical ones! Especially if you are aiming for senior positions! A strong performance in the whiteboard and a mediocre showing in system design and behavioral interviews won't help you rise above mid-level. However, a weak whiteboard performance and strong system design and behavioral interviews still give you a good chance.
In a behavioral interview, you have two competing goals:
- Demonstrate Fit: Convince the hiring manager that you are a perfect match for the competency requirements of the position.
- Evaluate Fit: Understand for yourself whether this position aligns with your values and interests.
Goal 1: Demonstrate Fit
Here, the goal is simple: provide as many positive signals as possible to the interviewer. Let me explain how it works by example.
Suppose there's Company X, and Company X has LEADERSHIP PRINCIPLES, which look like this:
- Roar
- Hip movement
- No Losing Your Marbles
With a high degree of probability, your behavioral interviewer will be someone whose goal is to check off (or score) these three points. And your goal is to tell cool stories from your previous experience to prove you've got these traits.
On the interviewer's question "Can you roar at all?"
Not-So-Good Example: "Yeah, I can roar if I have to."
Better Example: "Excellent question! In my previous role at a social network for fishermen, there was a situation where I had to roar (briefly describe the situation). Generally, I think roaring is important and beneficial because of this and that, but sometimes roaring is harmful because of this and that. And I also move my hips in such situations; it helps!"
What's the difference? In the first case, you're reasoning from the couch. In the second case, you're talking about your specific experience and how you behaved.
How to prepare for this? Fairly simple:
- Reflection: We've already discussed the importance of reflection. As a result, you'll have a set of cool, truthful stories that are uniquely yours. Of course, it's also a good idea to use some structured approach like the STAR method to present those stories.
- Research the Company: Find the competency matrix or leadership principles of the company you're interviewing with. Smart companies send it in advance so candidates can prepare. The next step is to match your stories with the competencies. Ideally, have at least a couple of stories for each competency.
- Rehearse: You can do it in front of a mirror, friend, or pet with a timer, but it's better to do a couple of mock interviews.
Goal 2: Evaluate Fit
Unfortunately, many people driven by low self-esteem and an uncontrollable desire to "give me money, I'll do the work... please", forget about the second goal and start lying just to get that offer. This leads to burnout and wasted years in their careers, all for the sake of an offer. Please don't do this. There are many companies out there, but there's only one of you. Approach your choices responsibly and know when it's not the right path. Your sanity will be better for it, and psychotherapists will be poorer (doubt it).
So the next task is: YOU need to interview the employer. The difficulty here lies in the fact that the standard "10 minutes for questions at the end" is clearly insufficient, so it's a good idea to use them to the fullest. Ask provocative questions that do not have "correct" answers. You'll quickly understand the management style and what principles guide it.
Some recommended resources:
- Intro to Behavioral Interviews
- Software Engineer behavioral interview questions
- Behavioral interview questions
- List of reverse interview questions
- Amazon Official Interview Guide
Optimizing Your Interview Process
If you want to optimize your interview process and secure the best job offer possible, chances are you're interviewing with multiple companies simultaneously. Because of that, it's crucial to manage your time wisely and ensure you're at your best during each interview. Any interview while dealing with a headache, fatigue, or lack of sleep can potentially cost you a job offer, so it's essential to avoid such situations whenever possible.
- Avoid Mixing Current Job with Job Search: Avoid mixing your current job with the search for a new one if possible. Quit, take a vacation, or do anything except combining them. This approach is more honest towards your current employer and, more importantly, it's easier on your mental well-being and your body.
- Time Your Interviews Strategically:
- Avoid morning interviews: Schedule interviews after a good night's sleep to ensure you're mentally sharp.
- Avoid late evening interviews: After 6:00 PM, your focus and energy may wane.
- Limit interviews to two per day with at least a two-hour break in between.
- Manage the Number of Companies Simultaneously: Don't overwhelm yourself with too many interviews at once. Limit your active applications to a maximum of three companies at a time. Use the sliding window technique to transition from one company to another, but be clear in communicating your timelines to avoid misunderstandings.
- Treat Interviews as Networking Opportunities: To reduce the stress associated with interviews, consider approaching them as networking events. Understand that rejections are sometimes unrelated to your skills and that it's unwise to pin your hopes on specific positions or companies. Every interaction can lead to valuable contacts.
Of course, YMMV (Your Mileage May Vary). Everyone is different. Some people can breeze through ten interviews in a second and not break a sweat, while others may find one interview a week exhausting. You should assess your situation, listen to your body, and remember to take breaks!
Negotiating Your Job Offer
Congratulations on making it through the interview process!
Now comes the exciting part — negotiating your job offer. Negotiating effectively can have a significant impact on your compensation, benefits, and overall job satisfaction.
The Art of Negotiation
Negotiation is an art, and you can learn a lot from experienced negotiators. Start by reading articles like this one or this one which offers valuable insights into salary negotiation techniques.
Ideally, you should have multiple job offers on the table before diving into negotiations. Having three or more offers, especially when they are competitive with each other, puts you in a strong position. Why is this important? First, it signals to potential employers that you are a highly desirable candidate. Second, it creates a sense of urgency (FOMO) for companies that have already invested time and resources in you. They are less likely to let you walk away.
One powerful technique is to create a win-win scenario. Approach negotiations with a partnership mentality, not as a zero-sum game where you're taking money from the employer. Instead, focus on reaching a mutually beneficial agreement where you can contribute your best work effectively.
Here's an example of how you can frame your negotiation: "I'm really excited about the opportunity to work with your company, and I'm eager to join the team. However, I've received another offer that's financially more attractive. If you can provide some additional benefits or a relocation package, I'll sign the offer today and decline the other offers."
When negotiating, be mindful that some employers might try to compensate with non-cash benefits like stock options, signing bonuses, or meal vouchers. While these can be valuable, if your primary goal is a higher base salary, stay focused on that. You can gently steer the conversation back to your cash compensation by mentioning your family's financial needs or other financial responsibilities.
Lastly, keep in mind that the negotiation process should be a conversation, not a confrontation. If your requests are reasonable and well-explained, most companies will work with you to find common ground. And remember, I've never heard of a job offer being withdrawn because someone tried to negotiate for better terms. So don't hesitate to advocate for yourself and your financial well-being.
Conclusion
Looking for a job is hard. It's like another full-time job, especially if you have to prepare on top of it — usually a more stressful one with everybody looking at you. Preparation for interviews is highly contextual and depends on individual experience. I understand very well those who look for a long time, get rejected and don't believe in themselves. But you can do it, I'm certain of it.
Additional materials
- How do you interview? (Russian)
- How do you interview in 2023? (Russian)
- Negotiating Your Salary: How to Make $1000 a Minute
- Ultimate Guide to Technical Interviews
- The Data Science Interview Study Guide