The Realistic Software Engineer Job Hunt

I was happy with my job. I would almost go so far as saying I was very happy. I had some good friends within the company and had a really good relationship with my team and manager. I was working on a semi-modern tech stack (Java Spring Boot microservices with React front-ends) and continuing to learn at a company with good work-life balance. I had a hybrid work schedule that I chose, so I would make the 20 minute commute into office once a week for the complimentary breakfast.

In short, I was content where I was.

It wasn't perfect. The work came in waves; some sprints were action-packed with lots of spillover, others were so light I was practically begging my manager for more to work on.

But most important was that I was being underpaid.

I knew that I was making a good amount of money compared to the average person, which I was extremely grateful for. But on the other hand, I was making far less than the average software engineer in the NYC area. I had started my career with this company and had been there for around 3 years, and was comfortable. I thought there was good opportunity for growth.

And then the job market really seemed to heat up.


I was never really looking prior to March 2022. I had sent a few applications previously to companies I really wanted to work for: some startups, the NBA, Twitch. Those almost consistently went nowhere. Now, companies were reaching out to me directly. Even without enabling the LinkedIn setting "Open to work," I had recruiters from major companies flooding my inbox.

Google, one of my dream companies, had reached out to me.


LinkedIn DM from Google

That's when my perspective changed.

I noticed how many of my coworkers were leaving for new opportunities, whether that be at FAANG companies, consulting firms, or early-stage startups. I started checking out forums on Reddit and Blind talking about "The Great Resignation" and the shifting of the job market. I realized, more than I had before, how much power and leverage the average developer had right now.

I had an incredible opportunity on my hands, and I had to do whatever it took to take advantage of it.


For posterity, let me start by describing myself as a candidate. I have 3 years of experience as a full-time developer; 2 years doing exclusively back-end work on a Java monolith and 1 year working full-stack. I had one internship prior at L'Oreal to my time at my current company coming from my time at Rutgers University. In addition to my full-time job, I worked (and still work) part-time as a consultant at a small basketball startup called ShotQuality. You can check the About page for more details.

With that out of the way, I took two major steps to prepare for the job hunt. First, I enabled the LinkedIn "Open to work" setting for a week and a half to see what other companies would reach out to me. Second, I started prepping for the interview grind.


LinkedIn open to work setting

Preparation

To summarize the prep:

  1. I started immediately with the interview prep by re-learning all relevant data structures. Using LeetCode's explore page, I relearned data structures I hadn't used since sophomore year of college. After getting up-to-date in that department, it was all about the Blind 75 LeetCode problems and NeetCode's YouTube videos. For about 2 months, I would either complete a problem or watch a video every day. A few things to note:

    • There's no substitute for hard work. If you want to move up and find a good job, you have to play the game and grind the problems. Even though the questions are generally unrelated to a software developer's day-to-day, currently the best way to get a job at a FAANG company is the Blind 75. It's a stupid game to play, but you have to play it.
    • Personally, I rarely ever practiced a LeetCode Hard. I started with Easy/Medium problems and continued to work on those until I understood the patterns. Once I understood those, I figured I would be able to combine the patterns & talk out the result well enough for an actual interview.
    • In the same vein, I practiced very few systems design/behavioral questions. I watched a few YouTube videos on systems design interview answers and took some notes and felt that was adequeate. For behavioral interviews, I feel like one of my best skills as a developer is my personability/communication, so I only wrote down a few common behavioral answers according to the STAR method.

  2. I received initial LinkedIn messages from recruiters from American Express, Capital One, Bloomberg, AWS, Microsoft, and multiple early stage startups. I also had referrals from Twitch and MailChimp, but those both went nowhere. Once I got started in the process, I realized what I valued in my workplace:

    • Strong company culture. I wanted a place where people liked coming to work everyday, with good work-life balance and leadership. I didn't have a preference on remote/hybrid/in-office, as long as I deemed the culture to be strong.
    • Good morals. I could not work for a place that I felt wasn't trying to do good for the world. I know this is subjective, but it led to me ruling out some bigger players such as Amazon & Meta.
    • Lower risk. I didn't necessarily mind working for a startup, but there's more risk in going to a company with 15 people than a company with 1500.

    With these bullet points in mind, I decided to move forward with 5 companies: Bloomberg, Capital One, American Express, and Microsoft, in addition to Google.

NeetCode YouTube channel

With that in mind, it was time to actually start interviewing.


After the Bloomberg recruiter ghosted me, I only ended up going through the interview process with 4 companies, in order: Capital One, American Express, Microsoft, and Google.


Final 4 Companies

Tech Screenings


The initial tech screens for each company varied.

  • Capital One had an online coding assessment through Codility for their screening. In 70 minutes, I was to complete 2 LC Easy problems and 2 LC Medium problems. I ended up passing the screen with 3.25 problems correct out of 4 (I couldn't complete the last Medium problem in the time limit.)
  • American Express had a more laid-back, conversation screening interview. I had a remote interview with a team lead and the hiring manager where they discussed my current role & the expectations of the position. Then, I was given one LC Easy problem to solve, which I did practically from memory.
  • Microsoft, like Capital One, had an online coding assessment. I completed the 3 problems in 60 minutes, 2 LC Easy and 1 LC Medium. I didn't get my score for this online assessment, but I was confident I did well.
  • Google was the only tech screen I was nervous for. The question was a semi-open-ended implementation of a file system. It was more conversational in nature with some systems design elements to it.

After all the tech screenings were finished, I was lucky enough to make it to the final round at all 4 companies.

Final Rounds


With approximately two months of practice behind me, I felt that I was ready for the final rounds. In order of the interview dates:


Capital One


I googled around and saw that most of the Capital One interview questions were well-documented between Reddit and Glassdoor, so I felt really good going into the interviews. The questions were exactly as expected, but my rehearsed answer to the systems design question didn't seem to be what the interviewer was looking for, which started the interviews off on the wrong foot. The second of the 4 interviews was the coding question, which was another one I had prepared. And... I froze. I completely froze. I forgot the answer, bullshitted around, thought about giving up, and eventually stumbled into a sub-optimal solution with the help of the interviewer.

After the interview completed, I felt useless. I had studied for two months and bombed the very first big interview I had. My anxiety was at an all-time high going into the day and I was ready to call it quits. Eventually, I mustered up the energy to finish the behavioral & case study interviews strong and on a positive note.

I definitely felt defeated after knowingly bombing the first interview I had. However, I knew the only thing I could do was put my head down and learn from my mistakes.


Google


The Google interview was a GAUNTLET. 4 hours of difficult technical problems (with an hour break in between, to be clear) followed by the "Googliness" behavioral interview. The questions all had multiple parts and varied in content, structure, and difficulty. One was a dynamic programming problem, one graph, one array/conceptual theory of randomness, and one binary search, with other questions/asks sprinkled on top.

With that all being said, I thought I did pretty well. My recruiter forgot to include a link to the coding platform, so I had to do all the programming in a Google Doc. Because I was unable to test my work, I couldn't verify my solutions, but I felt good about the theory behind them. The interviewers were very good communicators and good at helping me along with small syntactical issues.

One other thing, the Google hiring practice is very unique. The interviewers do not give a yes/no decision, and instead take extensive notes during the interview to send off to the hiring committee. They were copying my code from the document straight into their notes, which was a little bit jarring without any guarantee it worked. However, all in all, I was really surprised with how well I thought I did. The preparation really paid off.


Microsoft


Confidence was high following the Google interview, and it reflected in the 4 hour Microsoft interview. Each 45 minute interview consisted of ~10 minutes of conversation with a behavioral question and then ~30 minutes for a technical question. Again, the questions varied in content, with a linked list question, a string question, an array question, and a question debugging a different language. These questions were structured similarly and were definitely doable in the 30 minute timeframe.

Overall, I thought the questions were between LC Easy/Medium, and that I did well on all of them outside of the linked list question. I definitely failed that interview because of the setup needed. With Leetcode problems giving you the implementation, I never really needed to setup a linked list class myself. Because of that, it took me the whole interview to get it functioning.


American Express


Finally, the last interview was with American Express, which was a unique company from the get-go. After being bounced around internal teams, I landed with a final interview on a Friday afternoon. The entire interview process is simply a one hour tech screen and then one hour for a final interview. The final interview was extremely conversational about the position and my fit, and didn't involve a single programming problem. I had to answer a few questions about Python/Java in front of the team architect and director.


Offers


Once all my interviews had been completed, a weight had been lifted off my shoulders. However, I was still awaiting my results with bated breath. I thought, of all my interviews, Google & American Express went the best. After that, Microsoft was a slight tier below. Coming up last, I was waiting for the rejection from Capital One.


Graph of Confidence in Offers

I made this graph just to break up the monotony of the text on the page.

First response, surprisingly, was American Express. Less than an hour after my interview finished, my recruiter called me and said they were willing to make me an offer. AmEx was the only company that gave me a salary range up front, and I asked for more than their given upper bound (which would be around a 30% salary increase from my current job). They met my salary expectation with the offer and were pushing HARD for a response. Still, I knew I had to wait for my other offers.

Next was the expected no from Capital One. The feedback was very positive on behavioral/communication but they said my tech skills weren't up to par. Oh well, as expected. On to the next one.

About a week after the interview with Microsoft, I got an email from my recruiter:

Thanks again for your participation in the Microsoft interview event on 05/5! I am a recruiter for Microsoft and am helping follow-up with candidates from the event. Based on the feedback from your interview, YOUR TEAM would love to move forward with an offer – CONGRATULATIONS!

This was an awesome relief. I now had two offers, one of them from one of my dream companies. I had yet to receive any formal offer letters, but I was really excited. If I got an offer from Microsoft after my interview where I wasn't sure if it went well, how well did I do at Google?

After hearing back, I immediately let my AmEx and Google recruiters know, to see if they can delay and expedite my processes, respectively. After a little bit of waiting, I heard back from Google.

It was a no.

Honestly, I was surprised. I wasn't really upset, just surprised. I thought my feedback was positive and I answered all the questions to the best of my ability. I asked the recruiter for further feedback but she said she was unable to provide it.

Still, I had some incredible offers in front of me. It was time to make a decision.


American Express was offering me good work-life balance and a modern tech stack, with average compensation. Microsoft was offering me great compensation on an interesting project, but I'd be working PST hours despite living in an EST zone. I had a big decision on my hands.


Job Hunt Sankey Diagram

Sankey diagram of my job search.

Negotiation


Just to preface, I'm not good at negotiation. I've read blog posts like this and this about how to game the compensation system, but I just hate it. It feels extremely disingenuous to me, and this is one scenario in which I choose not to play the game as much as possible.

I told my AmEx recruiter, in a more professional manner, the compensation would have to improve for me to work there. After being given the spiel of "we don't negotiate" and "we want people who want to work here," they said they might be able to do something about the compensation.

Similarly, for Microsoft, I was incredibly candid. After being told the original offer on the phone, I sent a reply email with slightly different amounts on the base salary, RSUs, and bonus. Once I got on the phone with the recruiter after sending that email, I was tremendously honest. Here is roughly what I said:

Look RECRUITER, I'm gonna be honest - I hate negotiating. I didn't feel right sending my previous email. While that is true, I want to be happy and comfortable with where I work and want to relish in coming to work everyday. That means some differences in compensation. Is there anything that can be done?

And somehow, that worked out.

My recruiter said she'd see what she could do, and the next day the compensation team really stepped up their offer. I was floored. A sturdy, robust tech giant wants me to work for them?

Once AmEx made it clear they weren't going to up their offer to the level it needed to be, my decision was made.

On Thursday, May 19th, I accepted an SWE job from Microsoft.


Me in front of the NYC Micrsoft office


Conclusions


All in all, this was a really interesting two months. It took a ton of time & energy, but I can say it was well worth it. Without giving any specifics (check out the corresponding Blind post for that), I basically doubled my previous compensation. By no means is money the most important thing in the world to me, but it is still pretty sweet.

The process is designed to be painful. All of the interviews required LeetCode algorithm knowledge and none of them required code reviews, documentation, or pair programming exercises like I'm more used to working on in my day-to-day. I understand the point is to eliminate bad candidates moreso than bring in good ones, but it feels like a surefire way of missing some awesome candidates.

The more I think about it, the more excited I am to work at Microsoft (and not just because I am biased). Every single employee I spoke with directly, from the 3 recruiters to the 5 interviewers, were personable and pleasant. There wasn't a single person I wouldn't want to work with, and at the end of the day, that counts for more than anything money can buy.