9 Tech Offers and 100 Hours of Studying Later…
Wow, what a whirlwind of emotion after finishing up this exhausting interview run. I feel like I did a speedrun through interviews and leetcode questions in the past 4 months. Starting in August, as I was finishing up an amazing, remote internship with a finance institution, I started to apply to every single new grad role I could find.
In total, I applied to 71 new graduate job postings. From the 71 jobs I applied to, I got 25 rejects total (from the time of writing this article). I got resume-rejected from 9 postings, first round rejected from 11 postings, final round rejected from 5 postings, and I withdrew from 12 postings. And finally, I got 9 offers total. That leaves 25 companies that ghosted me.
I counted the number of individual interviews that I did (I will include hirevues/online assessments in this number as well). It turns out that I did 71 interviews total. To generalize, if each interview is around an hour, that means I did 71 hours of interviewing alone. That is almost 3 full days! This is without including preparation for each interview (with each company I applied to, research was pertinent to avoid looking like a fool when asked “Why this company?”).
Now, you might think that I did a thousand Leetcode problems in preparation for 71 interviews. By the end of my interviews, my submissions for Leetcode looked like this:
In total, I solved just over 100 problems and only one hard. I even had Leetcode premium and while this ocassionally helped, I am fairly confident that without it, I could still land the same offers because most of the companies I applied to had random number generated questions and their lists on premium were 300+ questions.
How I Stayed Organized
I utilized two tools to ensure that I was staying on track with my schoolwork and my interviews. The first thing I did was put down every interview, meet up with my friends, classes, and tasks to do each day on my google calendar. Yellow events represented interviews, blue represented things I could not miss (such as work or class), the tasks in red represented things I needed to accomplish that particular day, purple represented conferences, and green represented miscellaneous.
Anytime I had plans with friends, it would go in the calendar. The first thing I would do every morning before even checking my email was place the tasks of the day on my calendar so I knew what needed to get accomplished. On an average week, in the peak of my interview season, I was averaging 3–4 interviews a week. This made staying organized absolutely necessary.
The second tool I utilized was Google sheets. Underneath the column “Company/Program”, I had color coded the jobs I had applied to. If they were SWE roles, they were in purple, if they were PM roles, they were in yellow, and any other role was white. This spreadsheet was initially populated with roles that I knew about that did not yet come out which is why I have a column called “Applied?” and an adjacent column with the dates that the roles would be posted. In the end, my sheet looked like the following:
Offers are on top in green, withdrawn applications in yellow, and rejections in red. I kept every single recruiter call and interview on my sheet, so that I knew exactly when I was in communication with a particular company. This proved useful when I had not heard from a company after doing two final interviews for over a month. In this sheet, I also included if I applied using a particular conference link. On the left column, you can see “RTC” or Rewriting the Code, so I knew I applied through their link. I also made sure to put recruiter’s emails into this sheet so I knew who to contact if I needed to get in touch.
Perhaps controversial, but because I had time on my hands, I was able to take interviews for companies that I had some interest in, but they were not my dream company by any means. This included companies that were paying less than my current role at the finance institution that I was working at. Because of this, I would get a chance to really interview and figure out the best stories and examples for the behavioral interviews. There came a point that I had done so many behavioral interviews, I no longer needed to prep for them.
Some questions I was asked during my behavioral interviews were:
- Why _____ company?
- What would you do if someone asked you to do something unethical?
- When was a time you disagreed with the majority and what you did to change their minds?
- Tell me about a time you worked with a difficult person.
- Tell me how you stay organized when you have a lot of things on your plate.
For some software engineers, behavioral interviews are the hard part. This part actually came rather easy to me and the difficult part for me was the technical interviews. I used to get physically ill thinking about technical interviews, but after doing so many, even when I do not know the solution to a problem, I do not even break a sweat.
I did everything algorithmically. The first step is to assess the corner cases and narrow down the scope of the problem. With most interviews I had, the interviewer left it purposefully open-ended. It was my job to ask questions. I always repeated the question back and used an example to confirm that my understanding of the problem is correct. From there, I would answer the question conceptually before diving into any code. I would talk about what data structure I would use and utilize the whiteboard feature or comments to show a live example. Then, I would code it and dry-run through some sample test cases. Afterwards, I would talk space and runtime and how I would optimize if we had time to do it again.
The above steps I practiced every single day with my friend. We would do a mock interview a night with at least 2 questions. This made sure that I would not just go and look for the solution, but to try out on my own before receiving any additional help. He would constantly encourage me and tell me that I know the algorithm to solve it, and if I did not, he would go over it conceptually with me and then tell me to code it.
This method got me to understand backtracking, depth first search, and breadth first search in a matter of two weeks. These were concepts that I was familiar with, but do not use enough in my student life or in my internship to remember fully the algorithm. If you do not have an amazing friend like I do, I would recommend trying out AlgoExpert and their mock interview function.
With every single offer, I was so excited, even when the compensation was not the best. My offers ranged from $65k–$200k+. The disparity scared me only because all of these offers were for the same title. Even adjusting for cost of living, these offers were unbelievably different. At the end of the day, the compensation did not matter to me. Initially, it was something I cared about greatly, but my mindset shifted towards career-growth, ability to grow as an engineer, and work-life balance.
I used to think that I would never be good enough for an offer above $200k. My first offer was an offer for $85k and a $10k bonus and I cried when I received that. I would hear from my friends of new grads who got over $200k in total compensation and I would think to myself, “Dang, that could never be me”. Turns out, when you have the right mentality and some luck, you can be that person.
There was a point when I was ready to quit. I was content with the offer I had. For my teamblind folks out there (“TC or GT*O”), this offer was for Austin, TX, and they were offering me $119k base, $40k vested over 4 years in stocks, and a $20k bonus. My parents told me to stop interviewing because they believed it was a fair offer, and I had one friend who told me not to stop. This one friend was my friend who studied with me every single evening, in which we would do a mock interview a night (including weekends) for a whole month. As I was considering withdrawing all of my other applications, he asked me, “You’ve studied this much, why don’t you just take the interviews?”.
I took his advice and ended up receiving offers from both Salesforce and Microsoft. If I had not taken his advice, I would not be in the position I am in now. When I received both of these offers, I knew it was time to stop interviewing and withdraw my other applications. I had a tough choice to make, since both of these companies are well known for their growth, work-life balance, and overall engineer culture.
I ended up scheduling meetings with my potential managers from both companies and I asked them the following questions:
- What is the tech stack of the team?
- What are the expectations for a new grad?
- How long are the code sprints?
- What would I be working on?
- How does mentorship work (is there formal or informal mentorship)?
- What does growth look like at this company?
I was very fortunate to receive offers from both of these companies are amazing. Ultimately, I chose Microsoft simply because the team aligned more with my interests.
My Advice For New Grad Interviewees
When I started applying, I was directionless and I would argue that this was a good thing! Applying everywhere gave me an advantage to see what I liked and disliked about a particular company and get comfortable with interviewing. Two things that gave me the best odds were taking only 4 credits this semester (yes, you heard me right) and surrounding myself with like-minded study buddies.
My plan pre-Covid was to graduate early in 3 years. After I realized that school would end online and I would likely never see my friends again after graduating (or at least never have a late night study session again), I wanted to give myself one more semester. This semester, I intentionally kept light so that I could dedicate days to interview preparation. It also allowed me to maintain a part-time job at my old internship, which I actually eventually quit from because I wanted to dedicate more time to interviewing. I learned quickly that interviewing is a full-time job.
Now, if you are in the position in which you are holding down a job or two and are taking the max amount of credits your college allows, I would recommend studying concepts, not questions. My friend recommended me this article on Hackernoon that goes over the 14 Patterns to Ace Any Coding Interview. If you can identify a problem and know which pattern it falls into, then you could theoretically solve any problem. All coding problems are some sort of variation of the 14 patterns laid out.
My study buddy, Darren, remains my close friend after all of this studying. He was the one to call me incessantly telling me we had to study up for Meta, Salesforce, Google, Microsoft, etc., and convinced me not to just take the offer I was given and be content, but to push myself and try harder. He had me studying on weeknights and weekends which ultimately led to me getting all of these offers. I cannot thank him enough for his words of encouragement and him pushing me to continue trying. Darren, to nobody’s surprise, landed a lot of offers himself and will be working at Google after putting in hours of studying as well.
I recommend to all finding your own Darren. Having a study buddy who is 1000% smarter than you and wants you to succeed is so critical in not burning out. When we wanted to take a break from studying, we would play settlers.io and then continue studying after. Getting burnt out from interviewing is very real. The way I got around it was making sure I took days off and stopping when I felt satisfied (and not just content).
As I have had a lot of support from others, please feel free to reach out to me if you have any questions about this article or if you need help studying! I would love to help out in any way I can.