Reflections on my last 4 months job hunting
Interview Experience
I've been working in the SWE industry for about 3.5 years at a FAANG subsidiary. After feeling like my personal growth has stagnated on my team for some time, I decided to embark on a job hunt around
Full Details
I've been working in the SWE industry for about 3.5 years at a FAANG subsidiary. After feeling like my personal growth has stagnated on my team for some time, I decided to embark on a job hunt around August of 2019, and finally finished my hunt! Overall, I applied to roughly 10 companies, heard back from 7 of them, and made it to the onsite for 4. I ended the search with 4 offers, all of them from companies in the SF Bay Area. The total compensation is comparable for all 4, ranging from 200K to 280K Offer 1: Public FinTech company Offer 2: Private FinTech company Offer 3: FAANG-sized public company Offer 4: FAANG-sized public company There were actually many great things I noticed that are trending in the industry as I did these interviews, and I'd like to share with you all my experiences, both positive and negative. They aren't really formatted in any specific order. On Studying - Leetcode is still by far the best way to prepare, though the large majority of the questions I received for technical screens both over the phone and onsite were design questions that asked me to build an API. For example, a card game, or Pacman, or a class representation of a Universe that has galaxies in a grid system. Even though I prepared for it, there was far less random dynamic programming questions that required you to come up with a trick. I viewed this as a huge positive because a few years ago the only questions I would get asked were DP related or some recursive question traversing trees that I would never implement in real life. I would suggest going on Leetcode and searching for "Design" questions which will ask you to program things like a Snake game or a Hit Counter. They're much more useful given my experiences. - I tried many resources for studying, including Leetcode Premium, Interview Cake, and Grokking the System Design Interview. Of those three, the only one I found worth the money was Leetcode Premium. The discussion forum for most well written questions is quite extensive, which is usually useful enough for figuring out a problem. I "only" did about 100 questions, 80 of which were medium difficulty. I find that the problems used by Interview Cake are too simple and unlikely to ever be touched upon in an actual interview. As far as Grokking the System Design Interview, it had the most examples of questions you might be asked (design the Uber backend, for example), but I felt that at some point if you learn enough generic concepts through free online materials, there's nothing that this particular course offers except an aggregation of those public resources. I also bought and read the Elements of Programming Interviews book (which was great), and Designing Data Intensive Applications (also great for supplementing System Designs knowledge). - System design interviews were something new I encountered this time around and shouldn't be underestimated. There's so much you can talk about when building a system and you're given 50 minutes. I studied extensively focusing on depth for certain categories and relying on my work experience to carry me through designing APIs and talking about specific behavior for services. Generally, the interviews are in my experience very much focused on the data model, and how a specific request from a user (say, making a donation to a charity) is going to be specifically routed through my design, including what data fields are touched and how messages are passed around. I feel that interviewers were impressed with how much I knew here given the amount of experience I have (not trying to brag, just got positive feedback in this regard) - In terms of the questions I received at interviews, I would say that the most frequent type of question I got was OOP design related, followed by some sort of question that could be solved as a graph traversal (BFS, DFS), followed by DP, followed by string manipulation / sliding window questions. I did not receive any questions that would be considered a Leetcode Hard, but none that would be considered an Easy either. On My Overall Experiences - Not to be too fatalist, but it does seem like the number of software positions at specifically larger, more well-known companies are dwindling for engineers with less than 5 YOE. Specifically for engineers around the SWE II level, many companies that I interviewed with or found openings at as recently as last year no longer had any availabilities. I'm talking about companies with a decently high bar, like Airbnb or Stripe. - I dealt with some, but significantly less assholes during this job hunt than in previous years. I hope this is a sign of the industry improving even though my sample size is small, but most people I talked to whether at start ups or big companies were generally happy with their company, and didn't have large egos. Many engineers seemed genuinely interested in knowing the work I was doing for my current company. - I had forgotten how fucking exhausting interviewing could get. I scheduled multiple onsites for some two weeks back to back, and it was incredibly draining not only because I had to take time off work, but because generally you're looking at 5-6 hours of interviews where you're assessed and grilled non stop. I had to ask some interviewers for bathroom breaks not because they weren't courteous, but because we used up every single minute in every interview. My recommendations - If you're seriously looking for a job, I estimated that it took me about 3.5 months to get fully ready for the interview process where I felt seriously confident at the interviews. The first 2.5 months I mostly dicked around, studying maybe 1 hour every 3-4 days. By the last month, when the phone screens were completed and onsites were coming up, I spent most weeknights doing coding questions or reading tech blogs. Do you have to do this in order to get the right job? Hell no. But it really did help me feel confident for every single onsite. I felt like I walked away from all my interviews knowing that I passed them. - For coding practice I purchased Leetcode Premium and started with the Blind 75 list, which is really great. I used the Elements of Programming Interview book and got through about 30% of it, just doing random questions in chapters I felt weak on, like heaps and DP. I bought the book specifically in Python, since I knew I would be interviewing in the language, and it was helpful because the book teaches you how to use Python standard libs, such as during the heap questions. I should have scheduled interviews with companies I was less excited about earlier, because I failed my earlier phone screens due to nerves and lack of practice. - For system design, just use this github repo. This, plus some googling and reading tech blogs is more than sufficient for passing your system design interviews. I did some mock interviews here with a friend. During system design interviews, really focus on figuring out how a service is SPECIFICALLY routed through your design. Does the client engage with a RESTful API in your backend? Does the backend use a thread pool or message queue? Designing data models was extremely important, and understanding how to scale databses. Picking the Job - I haven't fully decided yet, but I don't intend on taking the offer with the highest compensation. My current team's culture sucks, and I really want to join a company with a team of engineers I know I would enjoy working with. The company that offered the most money also felt the last personal. I didn't like that for some interviews I didn't meet with the actual team of people that I would be working with, since I feel like that is really important for your day-to-day happiness. - I feel like the dimensions I rated my offer on included: company size, compensation, interest of product, team / company culture, and perceived interest in engineering work. For anyone who's interviewing, good luck! I sucked so bad at interviews before my recent job, but I really put in the time and came out confident. It's like the SATs, it sucks to study for it, but there's a system that you can master given enough time and effort.