Welcome back! Let’s continue the previous post on my reasons for moving from Google to Microsoft by looking at my whole interviewing process. I’ve been asked by a few peers to narrate this story because they are curious to know how this process looked like for a person with 10+ years of professional experience. And, well, it’s just a topic I wanted to write about anyway 😉.

As a reminder, and to pique your interest, I applied for:

  • 🟦 a Software Engineer (SWE) position at Facebook;
  • 🟦 a Production Engineer (PE) position at Facebook;
  • ⚫ a Software Engineer (SWE) position at Twitter in their Build Efficiency team;
  • 💚 a Principal Software Engineer (SDE) position at Microsoft in their Azure Data product; and
  • 💚 a Principal Software Engineer (SDE) position at Microsoft in their Azure Storage product.

That’s a total of 5 applications and talks with ~40 different people. Of those, the position in Azure Data vanished before I even interviewed, but I successfully got to the offer stage for the other 4. I entered this whole endeavor fixated on joining Facebook but… along the way, I uncovered exciting opportunities throughout, making my choice exceedingly difficult. In the end, I swerved towards the Azure Storage position for various reasons, but it’d have gone either way.

In this post, I want to be as honest and open as possible about my personal situation and how it related to the processes. As a result, some of the things I say might sound like a borderline rant—but that’s not the intention. Lastly, remember that interviewing always comes with the need to sign an NDA, so I cannot go into a lot of details.

The elephant in the room: levels

Before we get into the processes, let’s talk about… career ladder levels! Uh, so exciting.

Levels are a very important topic for this discussion because each of the positions I applied to was attached to a specific level. The positions’ level significantly influenced how I went about zeroing in on my final choice. Beware that my view on this topic is through Google-tinted glasses and doesn’t necessarily apply to all companies—although I believe it does for the companies I talked to.

You see, recruiters and higher-level peers will often tell you not to get obsessed with levels or promotion: “levels don’t matter”, they’ll happily say. In principle, the people you work with know how you work in practice so the level you are at is irrelevant, and higher compensation can be achieved without promotion. Yes, compensation is weird: you can be paid more at a lower level by constantly exceeding expectations than at a higher level by just cruising.

In reality, however, I believe levels do matter a lot, even for an Individual Contributor (IC, non-manager) position. Here is why:

  • Being at a higher level influences the kind of opportunities you are exposed to work on. You’d like to think that expertise and recognition do that instead: and they definitely do, but only within the realm of your team. Once you have to deal with teams and managers that don’t know you personally, the level you hold conveys that information. And thus the same applies when you land at a new company where nobody knows anything about you.

  • Being at a higher level grants you extra responsibilities and expectations—and I say grant because I think those are great traits. I personally want to grow in these areas, and I know that getting a higher title will subconsciously influence me to behave differently, just as it happened once I go the not-officially-recognized Tech Lead job within my team.

NOTE: This is a good chance to visit levels.fyi. Familiarize yourself with how levels map across companies and how they overlap across them. What’s not depicted there are the actual responsibilities of each level, nor that level compensation bans overlap within a company.

You might be wondering why any of this is important during the interviewing process. In fact, if all you care about is higher compensation, then this isn’t very important.

For me, though, my personal situation was problematic in finding the right position. I had been at the Senior (L5) level at Google for 5 years now, trying to make the jump into Staff (L6) territory for at least 3 of those years. My management chain and direct peers had been supportive of this promotion for quite a while now, and I am convinced my work did too. As a result, my compensation matched that: I was at the top of the Senior level band.

This unofficial recognition, however, is not reflected anywhere: you have to believe me at face value. For anyone that doesn’t know me within or outside the company, I’m an L5—and that can mean a lot of different things because of how broad levels are. One might be at the lower level, struggling to keep up with the demands and being paid the bare minimum; one can be in the middle, having a comfortable and non-stressful life with a good salary; and one can be at the top, trying to make the leap into the next band.

Unfortunately for me, the jump into the Staff level didn’t materialize at Google, dare I say… due to process failures. Promotions are a game and it is a game I did not play well; keep that in mind if you want them. But I didn’t want the job change to feel like a step down. My goal was to get hired as a Google L6-equivalent position elsewhere to properly reflect my skills, to make me uncomfortable enough to grow new skills, and to not have to prove myself all over again, which would take a long time.

Timeline: from March to October 2020

Dealing with different companies at the same time was an exhausting, but important, process. As a reminder: if you want to have any leverage during offer negotiations, you ought to have other offers on the table. In the end, and as we shall see later, these weren’t very useful for my own negotiations (other things were), but they were eye-opening as I got to witness that there are exciting opportunities everywhere.

Given the many people I talked to (about 40) and the length of the process, I took copious notes each time I interacted with anyone. Specifically, I captured the names of each person I talked to and what they did at each company. I also captured anything the recruiters said in order to prevent future misunderstandings, because sometimes they contradicted what others had previously said.

Below is the full timeline. I know it’s long but I want to show how all the processes interwove. To that end, I have color- and shape-coded entries: Facebook is 🟦, Twitter is ⚫, and Microsoft is 💚:

  1. Initial approach:
    1. 2020-03-04: 🟦 Attended a happy hour event organized by Facebook’s PE team. I indicate my interest to apply and get contacted right away by email to follow up.
    2. 2020-03-11: COVID-19 lockdown. I “forget” about job switching for a little while.
    3. 2020-06-05: Researched jobs in the Seattle area and how leveling works across companies.
    4. 2020-06-11: 🟦 ⚫ 💚 Got back to the Facebook recruiters with my intention to move forward. Applied for one Twitter position and two Microsoft positions online.
  2. Phone screens (about a month):
    1. 2020-06-12: 🟦 Phone call with Facebook’s PE recruiter.
    2. 2020-06-16: Phone call with an Amazon recruiter. I forgot about that one… but I let it slide.
    3. 2020-06-17: 🟦 Facebook SWE recruiter chat to explore openings in Seattle.
    4. 2020-06-29: 💚 Chat with Azure Data recruiter.
    5. 2020-07-02: ⚫ “Cold call” from Twitter recruiter who approached me separately from my application. Same-day (!) chat with hiring manager.
    6. 2020-07-06: 🟦 Facebook PE phone screens.
    7. 2020-07-07: 🟦 ⚫ 💚 Facebook SWE phone screen. Received coding challenge from Twitter. Second recruiter from Microsoft asks me to file questionnaire for the Azure Storage application.
    8. 2020-07-08: 🟦 Facebook PE recruiter follow-up after passing phone screens.
    9. 2020-07-09: 🟦 Facebook SWE recruiter follow-up after passing phone screens.
    10. 2020-07-10: ⚫ 💚 Turned in Twitter’s coding challenge. Phone screen and chat with Azure Data.
    11. 2020-07-13: 🟦 Facebook PE prep call for interviews.
    12. 2020-07-14: 🟦 Facebook SWE prep call for interviews.
    13. 2020-07-15: 💚 Notification that the Azure Data position is gone (or I failed?).
  3. Interviews (three weeks):
    1. 2020-07-20: 🟦 Facebook SWE interviews.
    2. 2020-07-21: 💚 Azure Storage phone screen / champion call.
    3. 2020-07-22: 🟦 Facebook PE interviews.
    4. 2020-07-23: 🟦 Facebook SWE follow-up interview on soft skills.
    5. 2020-07-30: 🟦 Facebook PE confirms I’ll get an offer.
    6. 2020-07-31: 🟦 Facebook SWE confirms I’ll get an offer. Two champion calls with PE managers.
    7. 2020-08-03: 🟦 Two more Facebook champion calls: one PE and one SWE.
    8. 2020-08-04: ⚫ Twitter interviews.
    9. 2020-08-05: 🟦 💚 Facebook SWE recruiter chat. Azure Storage interviews.
    10. 2020-08-06: 🟦 ⚫ Facebook SWE and PE recruiter chats, decide to go for SWE. Twitter replies and notifies that they won’t move forward with a Staff position, but we can research other options.
  4. Offers and negotiation (2 weeks):
    1. 2020-08-10: 🟦 💚 Got initial Facebook SWE offer. Pinged Microsoft recruiter and got told I got strong feedback so will know the outcome soon. Also, my birthday.
    2. 2020-08-11: 💚 Azure Storage initial offer.
    3. 2020-08-12: 💚 Champion call with Azure Storage hiring manager.
    4. 2020-08-14: 🟦 ⚫ Facebook replies with a new offer and one more SWE champion call. Twitter manager call to explore new options.
    5. 2020-08-17: 💚 New Azure Storage offer.
    6. 2020-08-18: ⚫ 💚 Twitter recruiter chat with option to get an offer as Senior or the chance of doing more interviews. I say no to Twitter at this point. Got new Azure Storage offer.
    7. 2020-08-20: 🟦 💚 More Facebook manager champion calls. New Azure Storage offer.
    8. 2020-08-21: 💚 Azure Storage offer amendment (there was an issue with the previous numbers). I say yes.
    9. 2020-08-24: 🟦 Facebook recruiter call. I say no. Got one more manager champion call.
    10. 2020-08-25: 🟦 Facebook manager champion call. My decision stands.
    11. 2020-08-26: 💚 Signed Microsoft offer.
  5. Landing:
    1. 2020-08-27: 💚 Background checks start.
    2. 2020-09-02: 💚 Relocation starts.
    3. 2020-09-10: 💚 Gave notice to Google. Initial departure date Oct 2nd.
    4. 2020-09-16: 💚 Renegotiate start date with Microsoft for proper Google departure.
    5. 2020-09-23: 💚 Move to Redmond, WA.
    6. 2020-10-19: 💚 Leave Google, start Microsoft.

There are two key details I want you to notice here. The first is how much Facebook tried to dominate the conversation and how many resources they threw at me. The second is how late Microsoft’s Azure Storage process came into the game and caught up.

The interview processes

Now that you know what happened when and how the processes intermixed, let’s talk about each of them separately. These reviews are based on my personal experience, of course, so they are completely subjective. They are also highly influenced by the topic on levels I opened this post with—and I’ll try to cover that here.

Here are the common aspects between the Facebook, Twitter, and Microsoft processes:

  • The processes for these three companies are all similar and have 4 stages: phone screens, on-site interviews, offer extension and negotiation, and rejection/acceptance.

  • The kinds of interviews I got were similar and very “standard” if you read how things work almost anywhere. There was a 50/50 split between coding interviews and systems design interviews, with a separate behavioral one.

  • There were no physical on-site interviews due to COVID-19. I think this made things much easier because I did not have to travel and could more easily overlap the processes. But on the other hand, I missed out on the travel and visiting real offices. ¯\_(ツ)_/¯

  • In an attempt to replicate in-person experiences, these companies had set up whiteboard-like software… but it was pretty terrible to try to draw anything quickly on them. Luckily most interviewers didn’t care about using the software at all: only one asked me to draw stuff.

  • Each of the ~40 people I talked to was great throughout. I did encounter a couple of interviewers that were a bit harder to deal with than others, but everyone was very conscious about the difficulty of remote interviews.

Overall, I have to confess that I enjoyed the interviews. As many others say, I dislike the coding interviews that focus on LeetCode-style puzzles very much, and I think I didn’t do great on them. But the systems design and behavioral interviews were all super fun to go through.

As a senior engineer, you should treat all interviews as conversations, not exams. The interviewers want to see how you think, how you approach a problem, and what you do when you encounter roadblocks (as you would in real life). I doubt that getting a precise, great answer to a coding problem, for example, is very important. (I’ve been the interviewer many times too, and I couldn’t care less about the quality of the code you write on a whiteboard as long as you are aware of where the deficiencies are, for example.)

I sense, but I have no proof of this, that the systems interviews have a lot more weight than the coding ones for people that claim to be senior and have years of experience (like in my case). So I might have gotten a pass for not doing great in the coding ones. Although, of course, I think that’s why I failed to prove Staff-level territory in two places.

🟦 The Facebook interview process

The Facebook process was the one with the most hands-on involvement from the recruiters; refer back to the timeline above and see how widespread 🟦 is. As I mentioned, I was dual-tracking for SWE and PE so I went through two completely separate recruitment processes: both of these processes were very similar though, but I could only get an offer once I decided for one.

This is the process that put the most emphasis in training for the interviews. It was made abundantly clear to me, time and time again, that I had to put in weeks of practice in order to pass the coding and systems interviews. And, you know, they were right for SWE. But I was always wondering: “if I have to train a skill just to pass the interviews (because, face it, we all know that’s not how our day-to-day job goes), maybe the interviews aren’t assessing the right thing?” I know, I know, this is an industry-wide problem and we won’t find a solution here…

I spent many, many late nights going over LeetCode puzzles and reading through “Cracking the Coding Interview” book. To be honest, these did help in the interviews later on, although it was pretty frustrating to go through these exercises. I also spent quite a while going over a systems design course that Facebook shared with me, which was somewhat useful, but not as much.

I found the PE interviews to be much easier for me than the SWE ones. I don’t mean to say that they were easy—because, really, the interviewers probed pretty deep—but they felt easy. Part of this is because the coding interviews for PE were applied (not puzzle-like), and part of this is because Unix internals and systems are my expertise. My SRE background was invaluable too.

Speaking about PE, I had various champion calls with managers to discover whether to go for PE or SWE. From these chats, I realized that both paths seemed super-interesting (so the choice wasn’t easy), but I was also unable to grasp how Facebook’s PE and Google’s SRE differ. Facebook put quite a bit of effort in explaining how PE works and how different it is from SRE… but PE and SRE sounded pretty much identical—except for how PEs are “embedded” into their SWE team counterparts in the general case.

Even though I got to talk to countless people within the company, the process felt quite “anonymous”: Facebook puts a lot of emphasis in their unique BootCamp experience, which means you don’t know what you’ll end up working on until you join the company. This also means that you are interviewed by “random” engineers, which is very similar to how Google interviews and I guess makes the process more homogeneous—but on the other hand, the interviews feel more fictitious as they cannot focus on the things you’ll need to succeed in the team you land.

And, finally, we get to my sore spot: levels. Facebook slotted me upfront at their Senior level (E5) because that’s what my Google resume said. I got conflicting information through the process about the possibility of being assessed as E6 instead, as that’s where I intended to land, and I think I got assessed at that level too. Unfortunately, I failed to convince them. So: I got an E5 offer (well, actually two, but I had to decide which path to take before seeing just one offer).

⚫ The Twitter interview process

I applied to Twitter for three reasons: they have a presence in my target location; I regularly use their product and like what it does; and their opening fit me well because of their need for Bazel expertise.

For all I know, the resume I sent through their online portal fell through the cracks. It wasn’t until a recruiter found my Bazel- and Google-related profile and cold-contacted me that things started moving very quickly. The fact that I was already scheduled for Facebook phone screens, and the fact that I had previously applied online made them rush. I actually had a talk with the recruiting manager the same day I spoke to the recruiter, which was awesome but also anxiety-inducing. I was concerned they’d move too fast and leave me no chance to finish the Facebook process.

Compared to Facebook, I was applying for a specific role within the company and within their build organization, so I got to interview directly with the people on that team. The interviews were not as domain-specific as I imagined, but it was nice to meet my prospective peers. Twitter wants to make sure you understand and you like what you’ll be doing from day one so that there are no surprises.

As part of the initial application process, I was offered the chance to either do a phone screen or go through a coding challenge. My dislike of puzzle-like problems in 45 minute-long interviews made me chose the latter. This way, I felt in control: I knew I’d do well in an offline coding exercise whereas interviews are still subject to luck.

Another key difference in Twitter’s process is that they put a lot of emphasis in finding people that are passionate about their product. I think no other company did that for me, and I guess this is because Twitter is a much smaller company so they really need to find people interested in them. And indeed, I got probed around that topic and I think I sufficiently like and use Twitter to pass that part of the process 😉.

And to conclude, we have to revisit the topic on levels: Twitter slotted me at Staff level upfront, which was what I was looking for. Unfortunately, I failed to perform well during the interviews. But what was very nice of them is that this wasn’t the end for me: I was given the option of getting an offer at the Senior level without further questions or to try to interview again for Staff (without losing the Senior offer). I had long talks with the recruiting manager to find a good fit for me (thanks a ton for your time David, if you are reading this), and there were plenty of cool options to choose from. In the end, I never got to the offer extension phase because at this point I had already made up my mind that I wanted to try my chances at some non-Bazel related stuff.

💚 The Microsoft interview process

I kinda like to equate what happened to me with Microsoft with a car that’s always in your back mirror, seeming inoffensive, until it isn’t any more: it is now in your face, passes you with ease, and wins the race.

Seriously. As with Twitter, I sent my resume to two separate positions and I did not give them a second thought. Well, I did: “I’ll never get a reply; I have zero experience in Microsoft technologies and this is a huge company, so no way they’ll find my resume among the thousands of applications they might get”.

I was wrong though. I got contacted for both positions. For the Azure Data position, I got to a champion call but that fell through somehow (I might have failed the initial technical question), so I’m not going to cover this at all. As for the Azure Storage position, I ended up getting a recruiter mail that went along the lines of “We are interested in your background; please file this very impersonal questionnaire”. Which I did… and I didn’t expect to hear anything good from them.

But oh boy I did. Right when I was almost done with the Facebook process, the recruiter got back to me excitedly saying that the hiring manager (hi Peter) was super-interested. I had a very quick chat with the recruiter on what the role would be like and we moved forward with the process, so I got interviews scheduled within a few days… and an offer very quickly after that.

I think the Microsoft process was the most transparent of all. It was kinda like: “I want this specific job and, look, I qualify for it”. I interviewed directly with the team, I got an offer without any fluff, I negotiated with a recruiter that was super transparent about numbers and what could or could not change, and poof. The deal was done. You might say it was almost transactional, but the emphasis put on my well-being made it feel better than that.

This is the process where I got, I’d say, the most domain-specific interviews. There was just a single puzzle-like algorithms question (in which, again, I didn’t do well at), but the rest focused on topics that would reasonably come up on the day-to-day job. It was a lot of fun, and thinking that these are the kinds of things I’d we touching on a daily basis made the position even more interesting.

Microsoft didn’t slot me at a level upfront: I did by picking what I thought was a good fit for me from their careers site. I applied for Principal level positions and apparently I did well enough to justify getting hired ad that level.

Offer negotiation

I was dreading the negotiation phase of the process. You see, I don’t particularly like confrontation in non-technical topics and maximizing my gains wasn’t my primary deciding factor… Plus I understand how compensation works, more or less, so I can see why offers look one way or another.

Fortunately, though, something played in my favor. Remember that, in the section about levels above, I explained how levels can be have broad compensation bands, at least at Google, and that I was at the very top of my level. But also remember how this latter fact isn’t recognized anywhere: if you tell someone outside the company that you are Senior-level, they can assume that you are anywhere within that level. And the most reasonable thing for any recruiter to do is assume the midpoint and low-ball the offer—which is precisely what happened in my case. Thus why I say this played in my favor: these initial offers felt so unfair and wrong in my current situation that I felt a need to fight for a better offer no matter what.

Now, the way I went about this is weird. To be honest, I read but didn’t follow the best practices for negotiation you see online. I tried, for example, to not disclose my current compensation… but that’s what resulted in the very poor initial offers no matter what I said about what my position was. In the end, what worked best for me was being transparent about my current compensation and clarifying that staying at Google was still a possibility for me; I didn’t have to leave. The prospect of remaining at Google was, in the end, my best competing offer.

Finally, one thing that really worried me about leaving Google was the unvested stock you end up accumulating. We often joke that this equals “golden handcuffs” because if you leave the company, all those huge numbers you see in your account go “poof”. And that’s true if you just leave the company. But as I found out… if you go to a different company that is known for paying well (like all the ones covered in this post), they’ll cover that stock in one way or another to make you feel comfortable.

Parting words

This was a very long post. There are no takeaways, really, as this was just a narration of my own experience over the last few months. But if you want some anyway:

  • You’d be surprised by how many interesting roles are out there if you have never looked before. Keep your eyes open, especially once you’ve already made the decision to change jobs.

  • Practice, practice, practice. We may agree that current interviewing practices are problematic industry-wide, but that’s what they are. If you want in, you have to play the game. And you must do well, especially if you want to prove that you belong in a higher position than initially offered.

  • Even if you feel like you are very well compensated and that no other company could possibly match that… some will.

  • Know what you want. Recruiters will ask you how you plan to choose, and having some answers there will be helpful. If it is money, be upfront about that; there is nothing wrong with it.

  • Take the chance to speak to as many people within each company as possible. Even if you end up discarding an offer, it’ll be helpful to know as many details for any future changes.

The end. If you have any questions, please let me know!