Seattle: Amazon | Facebook | Google | Tableau | etc. [4 offers]
Anonymous User
22557

About Me

  • B.S. in Math and Computer Science at a tiny-but-well-regarded engineering/liberal arts school
  • Idiosyncratic career path:
    • I worked at the federal government for four years out of college doing a rotational program. It was great for getting exposure to a lot of different technical areas, but by design didn't develop much depth.
    • After four years I got fed up with the bureaucracy and left the government to work at a Series D startup doing applied cryptography. Spent two years there on the applied research team building demos and prototypes.
    • After two years there, left to be Employee #5 for a pre-Series-A startup run by some former gov't coworkers. It's been fun and I've learned a ton about every aspect of the software stack as we built up our product from prototype to production.
  • All in all, I have 8 years of experience working with software, but none at all with traditional software companies, and it's reasonable to discount most of the government experience. So call it 4-5 YOE as a generalist, with a bit of focus on security and cryptography?

For personal reasons I'm moving from the East Coast out to Seattle this summer (pandemic permitting), and I was becoming disenchanted with both startup life and fully-remote work, so I started applying.

Application Process

I've had a Google recruiter pinging me every six months for the last couple of years, ever since I failed a simple phone screen. I let her know I was interested and looking to start around May/June, and she recommended starting the interview process in February.

In February, I talked to the Google recruiter again, who told me that she felt we didn't need to do a phone screen and I could move directly to the on-site phase. We scheduled the on-site for March 25, since I hadn't done any interviewing recently and wanted time to prepare.

In the intervening weeks, I asked several friends to refer me, as well as sending off some applications blindly:

  • Referrals: Amazon, Facebook, Tableau
  • Blind applications: Snap, Gravitational, Yubico, (Google)

Of these, Snap, Gravitational and Yubico never got back to me, and Tableau quietly rejected my referral (with no notice - how rude!). So I proceeded with Amazon, Facebook, and Google.

During the initial call with the Facebook recruiter, he expressed some concern that my background didn't line up well with the position, so he passed my information to another recruiter in a different area at FB as well. So I ended up with four active applications in total.

Prep

Like I said, I have a reasonable amount of work experience, but I've never successfully passed even a phone screen for a tech company, so I was pretty worried.

Everyone I talked to, including recruiters and friends, recommended LeetCode, so I ended up here. My algorithms class is at this point ten years in the past, and was heavily focused on the math side of things, so I also grabbed a copy of Cracking the Coding Interview to refresh.

I started by reading through CTCI and thinking through the more interesting exercises for the topics I didn't remember as well; it took a full weekend and another few weekday evenings to get through the parts I was most worried about.

I then switched to focusing on LC; generally I tried to do 1-2 hours each night, and spend at least half a day each weekend on it. My stats say that I've done 107 problems, most of which are Medium. I also tried to do the Saturday evening contests each weekend; these are great for giving you problems you haven't seen before with a time limit. Contests were probably the single most helpful thing I did to prepare.

After I started actual interviews, I dropped my LC time substantially - usually just an hour the day before each interview to get my mind back in gear. Burnout was a major concern for me and this helped a lot.

Interview Experiences

I'll go through these by company rather than chronologically so it's easier to follow.
Most came with NDAs so I won't give direct links to problems to be safe.

Google

The recruiter told me I didn't need to do a phone interview. That was nice; I had never passed one before, and skipping it made me feel a lot better.

On-site (March 25, virtual due to COVID-19): They gave me a Hangouts link and I sat on that call all day (with a 45-minute lunch break).

  1. Coding, LC-hard array problem. I got a solution working in time, though it wasn't quite optimal.
  2. Coding, LC-easy? Super simple recursion problem. He might have been looking at design here as well.
  3. Coding, LC-medium array processing. This went great; I immediately saw two approaches, talked through them, picked one, and implemented it.
  4. Coding, LC-medium tree traversal. I missed an important case, but was able to fix it in time.
  5. Behavioral. An hour of "Tell me about a time when..." questions. Went great. Preparing for the Amazon interview helped a lot here.

Overall I felt like these went pretty well, all things considered.

After hearing that Google's process was slow, I was surprised to hear back just two days later that I'd passed! Hurrah!
Passed Hiring Committee on April 6, set up team fit meeting April 10, received offer details April 16. Google's initial offer was for about $280k/year (amortizing the signing bonus across four years).

Amazon

Referral submitted Feb. 24; recruiter emailed on Feb. 26 and we set up a call on Feb. 27.

Phone interview (Mar. 10): This was about 30 minutes of talking over stuff I've worked on, and asking the interviewer about his experiences. Then we did an easy LC problem (sliding window). Very pleasant conversation, and the only hiccup was when my router died for five minutes. It all worked out in the end, and I was told the next day that I'd passed.

On-site (April 3, virtual): I sat on a video call for six hours, with interviewers rotating every hour, plus a one-hour break for lunch.

Interviews:

  1. Design, with the product manager (?) for the team I'd be working with. Just talking. 30 minutes LPs, 20 minutes talking through a simple system design question, 10 minutes of me asking questions.
  2. OOAD, after the requisite 30 minutes of LP questions.
  3. Coding. 30 minutes LPs, 20 minutes coding (LC easy/medium).
  4. Behavioral. An hour of answering "Tell me about a time when..." questions.
  5. Design again, based on a real system the interviewer worked on. Very cool, had a nice conversation about it.

Amazon's interviews were incredibly focused on behavioral-type questions. I spent five hours in total interviewing, and probably 4 hours of that was answering behavioral questions. Thankfully I knew ahead of time to expect this sort of thing and prepared thoroughly; this also was extremely helpful for behavioral questions with other companies. Even if you're not applying for Amazon, I'd recommend going through their LPs and writing down a story or two for each. It reminds you what you've done and prepares you to talk about it.

On April 7 the recruiter called to tell me that they'd be making an offer! However, the position I'd originally applied for had been filled by an internal transfer, so they found a different position on a related team in the same organization, and after chatting with the hiring manager for that team it sounded fine.

On April 13 I had a call with the recruiter to discuss offer details. Amazon's initial offer was for about $230k TC.

Facebook

The original FB recruiter I talked to passed me to another recruiter as he wasn't sure how well my background matched his team.
I first talked to this side of Facebook on March 11, and set up a phone screen for the next week.

Phone interview (Mar. 20): Introductions, an incredibly-annoying LC-medium problem about string parsing, and we're done. It's impossible to feel good about problems that boil down to casework but it went okay I guess.

On-site (Mar. 31, virtual):

  1. Coding. LC-medium tree problem. I came up with a buggy, inefficient solution, but got it efficient and working in the end.
  2. Behavioral. Generally fine, but not perfect.
  3. Coding. Straightforward LC-medium data structures problem.
  4. Design. This was my first design interview, and I felt very uncomfortable talking through everything, especially over a video call without a real whiteboard. Practice design interviews with a friend! I also found that doing design questions on a virtual whiteboard is completely terrible, and it's impossible to get through them as fluidly as you want.

Overall I felt just okay about this set of interviews. Nothing went horribly, but there also weren't any that I felt like I'd done exceptionally well on. I was amused to find that every one of the coding questions was lifted directly from Leetcode.

On April 8 the recruiter emailed me to let me know I'd passed the interview, and on April 9 I was told I'd passed Candidate Review. Because I had a separate application going with the AR/VR folks, we waited until their side was done before talking about offers.

Facebook AR/VR

This is the position I originally was referred for: Platform Security Engineer at FB AR/VR, formerly Oculus.
Referral submitted Feb. 28, recruiter emailed Feb. 4, and called Feb. 5 to set up a phone screen.

Phone interview (Mar. 19): Pretty standard. Introductions, ~25 minutes on a LC medium problem (tree traversal), 10 minutes talking through a second LC-medium problem, and a few questions.

On-site (April 7, virtual):

  • Two coding interviews (both LC-medium tree problems, one with a second LC-medium tree question after we finished quickly).
  • One behavioral interview
  • One system design question (the elevator control system question)
  • One domain design question. This was specific to the team I'd applied for, and involved designing in broad strokes a few of the systems they actively worked on. This is also the first interview that I felt like I'd really bombed - we got to a design in the end, but there was a lot of hand-holding, and I felt like I did a very poor job of explaining myself or getting to the right answers easily. Again, the virtual whiteboard didn't help.

On April 15 I had a call with both Facebook recruiters, and was told that both sides were interested in extending offers, so that interview must have gone better than I thought. However, Facebook won't compete against itself, so I had to pick either FB Core or AR/VR. After several days of agonizing over it I ended up picking AR/VR.

On April 22 I received my offer details. Facebook was exceptionally generous and offered about $300k/year, amortizing the signing bonus across four years.

Final Thoughts

  • Interviewing is a completely different skill from actually working in tech, and I was really intimidated by the thought of needing to learn all that new material, then talk about it with other people. It turns out I didn't need to be that worried. Particularly when you have a few years of experience (and at Amazon), they're really looking at LC questions as a basic test of competency; as long as you show the ability to understand the problem and think through it, you're fine.
  • Interviewers want you to succeed. If you are having trouble, be honest and tell them. Getting to a solution after getting a hint is far, far better than stumbling blindly while they watch.
  • Your resume barely matters, and is useful mostly as a guide for things to talk about in interviews.
  • Software engineers are ludicrously overpaid at FAANG companies. I will be more than doubling my salary when I switch, and will be making roughly 4x what I was paid when I left government work.
Comments (60)