How I tanked a FAANG interview

How I tanked a FAANG interview

(and got hired anyway!)

Intro

Hello, my name is Spazure! I have been working in the tech industry for a little over 20 years, all of which have been spent performing some form of tech support or another. I have made my own CAT-5 cables and installed them. I cleared an entire government building of the Melissa virus) in a single weekend. I have managed Customer Support teams. I have been at varying levels of call center technician and help desk. I even worked for a tiny unknown startup way back at the turn of the millennium.

I absolutely love problem solving. I was originally drawn to tech because I love the "figuring out how things work" aspect of it, especially when things don't go as expected. Although I have thoroughly enjoyed my career thus far and all the friends I have made along the way, it's not where I wanted to end up. I have always wanted to be a programmer, but I have never quite gotten there.

Last year, when I turned 40, I vowed to change everything. I was sad because I wasn't a programmer yet, realized I could not change my past, but I had the ability to change my future.

It's not like I haven't been a hobby programmer the whole time. I made a fun Alexa Skill to use voice interaction to lookup Magic: The Gathering cards. (Don't go looking for it in the skill store though, because my employer won't allow me to release it.) I wrote a neat little iPhone app to sync shopping lists between a popular online grocer and a popular recipe app (also unreleased, see prior aside). I've made little plugins and utility apps as the need has come up, but until last year, I had never made a concentrated effort to say:

"That's it. I'm going to code with purpose. I am intentionally gathering skills with the express purpose of getting myself a coding job."

The Setup

I started reviewing job postings for things I wanted to do. My end goal is to one day contribute code to something that is so mind blowing, so awesome that Craig Federighi brags about it on stage one day in a keynote.

Some things to note from that goal:

  1. I don't care about fame. I don't need to be "the" person who wrote it. I'd rather be a part of a team than the face of anything.
  2. I have already narrowed my goals down to working for Apple, specifically.

OK, that narrows things down somewhat. I already know JavaScript pretty well at this point, but so does almost anybody who's been coding for more than a month or so. What can I do to stand out?

"I know! I'll do the 100 Days of Swift challenge! If my goal is to code for Apple, it makes sense to pick up Apple's own programming language!"

So I did. That's easier said than done -- closures were a completely new concept to me that broke my brain, had me almost giving up. Any time I was tempted to quit, a little voice inside my head would say "Hey, remember last time you quit and lost another decade of your life to not being a professional coder?" I did ultimately complete the 100 Days of Swift, but I noticed towards the end of it that I had the glaring question: "Well, what now?"

Armed with a decent working knowledge (and some fun projects!) in two languages, I got started applying to some jobs. I got used to the sound of crickets. I had a phone screen for a job that went so well I never heard from them again, even to say I wasn't selected. OK, fine, the current plan isn't quite working. What next?

For me, that next step was college. Although I am 100% capable of self teaching myself quite a bit, college is able to give me something I was unable to get on my own: the world's best loophole. As you may have gathered earlier, one challenge in my current job is that my work doesn't allow me to share or distribute code or applications in my personal time. I can't just collaborate with a friend or show someone my code when I get stuck. I understand the corporate reasoning behind it, it's just something I need to learn to work with. "How does college fit into this picture?", you may be asking. Well you see, there's a loophole where of course the company isn't going to ban me from turning in homework and showing it to my professor. I now have a way to deepen my learning by being able to get feedback on how I can improve.

The Interviews

There I am, taking 12 credit hours of school (oops, need to pare this down .. 12 hours on top of a full time job is too much), and I get a notice about a job fair. "OK cool, interview practice!" I think to myself. I apply to a an intern level programming job, I get the interview, they start to offer it to me.. but I turn it down because it is only part time and I have a family to support. They counter by offering to consider me for an associate programmer position. The catch? I'd have to pass a skill assessment, and Swift isn't one of the language options. I have to do it in JavaScript, a language I hadn't used in *checks watch* 3 years.

I pass my very first two interviews for a programming job! Great! I then get the (thankfully take home) skill assessment, and I um .... don't even finish it. It's 3 basic algorithm questions, I finish two and I run out of time before I even have a chance to START the third one. Needless to say, I did not get this associate position. I start beating myself up for not accepting the earlier position, which at that moment, seemed like the only way I could ever get a job programming for anybody.

While I'm feeling down from completely failing a skill assessment (my first ever, not counting college exams of course), I learn my employer is once again asking for applications for an amazing intern-level talent exchange program. How it works is, you take the job on a temporary basis, keep your current level of pay, and kind of get to "try out" various aspects of the company. This is a very competitive program, I had already failed to get selected once, I didn't go into it with much in the way of hope. The way I saw it, I had two years before I finished my degree. I needed interview experience, I needed to get my name and face and goals out there.

I attended some resume workshops, wrote a (admittedly pretty terrible) cover letter, and applied. I got two phone screens and passed them both. OK, this is new. I just passed two phone screens.. at a FAANG company. I learn more about the positions, and they're more-or-less the same thing but for different departments. I take one interview and as near as I can tell, I completely ace it. I'm still scared because there's a bunch of other applicants.. but the interview ended with her saying things like "you will..." instead of "the chosen candidate will..." From what I have read, that tends to be a good sign.

The second interview is the one that prompted this post.. this interview, y'all. I told the phone screener that I had just learned Python this semester. I was up front and honest about my level of understanding, but they appreciated my honesty and pushed me through anyway. That was the fun part. The fact that the second interview included a skill assessment?? The not so fun part. Remember, I had already failed an assessment in JavaScript, a language I know relatively well. How on earth was I going to survive a Python assessment?

So I get to the interview. It's me, the woman who wrote the code I'll be working on, and her boss. OK, no pressure, I have never passed a panel interview in my life, but let's try it. I get in there, we do our introductions, everybody's chill. We have a great vibe going, my confidence starts to feel better as we get into a flow.

and then, the skill assessment

From my perspective, this is where everything falls apart.

They show me some HTML and ask me to tell them what the page does. I tell them without the rest of the code, I can't know because the <DIV> tags are basically meaningless unless I can see the associated JavaScript and/or CSS. Great, my first question I tell them I have no idea what the answer is, good going.

So then I review some JavaScript. The JavaScript includes promises. I have never in my life gotten promises to work correctly. I can't even fully explain how they're supposed to work. I have done ridiculous .then() tricks to get out of having to use them my whole life. So I read through the JS, telling them what I can make out -- but I'm definitely not following all of it. At one point in the JS, it's pulling info from an API somewhere. The interviewer asks the difference between ? and & in a query URL. Despite having literally just covering this in my college course the week prior, I could not remember. I admitted I did not remember. (The answer: Question mark is the start of the query, ampersand is each parameter passed to it.). Most of my projects have involved manipulating an API and constructing queries, I should have known this like the back of my hand.. but due to being spoiled with Postman, I did not.

I was then given a block of CSS to look over and finally, an easy question (I thought). They asked me to explain the difference between display: hidden and display: block. (Reader, please understand that display: hidden does not exist. It's either visibility: hidden or display: none) In any case, I explain what a block element is, how it differs from an inline element, and that hidden.. hides things. I completely miss the syntax error of using invalid CSS in that line, and in fact don't catch it until later on in a twitter thread.

OK, made even more mistakes than I initially expected to, but they haven't called the whole thing off yet.. let's take a deep breath and see if that's the end of it.

"OK, so now we're going to give you some coding problems and watch you solve them!" Yep, saw that one coming. They hand me the world's easiest coding problem ever. I was to take the contents of two lists (what's usually called an array in other languages), combine them into a single array, then sort that array from smallest to largest.

Dear Reader, when I tell you what happens next, you are going to feel large amounts of second hand embarrassment.

I go silent. I suddenly forget how a keyboard works. I forget every programming language I have ever known in my entire life. In this moment, I probably couldn't even write HTML. I stare at this problem for what feels like an eternity (but was probably only about 20 seconds), and I cannot type a single word. I didn't even get as far as for i in listname1, I just... choked. Knowing no way out of this other than running away or pushing through, I am honest with the interviewers. I tell them I have literally blanked on all the Python I have ever known in my entire life, so I ask them if it's ok to just talk through the problem in pseudocode. We start talking pseudocode and finally, Python starts flowing out of my fingers and onto the screen. After much trial and error which included me getting stuck (i forgot the .sort() method existed) and them allowing me to prove that I am capable of finding my answers in the Python docs, I finally solve it. It's not the cleanest code, but it functions. One down.

I am then given the second problem. It's essentially a play on Fizzbuzz involving dictionaries, but changed just enough that a memorized Fizzbuzz solution wouldn't work. "Wait... how do I iterate on a dictionary again?" I just learned this literally three weeks ago, and GitHub copilot had been doing all the work, so I didn't remember the available methods off the top of my head. If I wasn't being watched and terrified of making a mistake, I could have probably guessed them because Python is awesome like that. In any case, I did a quick google to look up dictionary methods, facepalm because I fucking knew that , then finish the solution. This is quite possibly the ugliest solution anyone has ever seen to this particular problem, I explain that I'm aware of existing repetition and in a real world situation would be refactoring to keep it DRY and then .... we run out of time because their next interview is about to come in.

We have a few laughs about my nerves, they explain that most applicants breeze through the assessment with little difficulty and perhaps I need more practice in Python. No mention of my earlier CSS and JS flubs. I thank them for their time, and the interview ends.

Post-Interview

This is where things get really interesting! A week or so later, I get a phone call saying that the competition was fierce, it was down to two remaining applicants, but ultimately someone with more experience than I was chosen. There's a bit of confusion on the call (both interviews were with the same company), until they clarified the specific position they were referring to. "I'm sorry, the interview with .. that's the one where I made it to the top 2 applicants?" She confirms. I thank her for her time and the call ends.

At this point, my brain is swimming. The interview I thought I had completely bombed to the point that the interviewers were probably laughing about me in Slack by the end of the day -- I had passed enough that I was in the last two potential applicants. I still didn't get the job, fine, I accepted that the day of the interview anyway -- but.. I almost got it? What does this mean about the interview I thought I did well on!??! I am absolutely floored. The only thing I could figure is that they were impressed with how I handled the failure, and didn't focus as much on the failure itself as I did. They provided no interview feedback other than "more practice with the tech."

A couple of days go by. Today, I get a phone call. The first position I interviewed for, the one that involves a team working with iOS and Swift (my baby! she's in my twitter username!) - I landed that one. I start in June. I have to relocate to California, which isn't ideal.. but for an opportunity to actually code for a living, even if it's not a permanent position -- is something I absolutely cannot pass up.

So that's the story of how I gave the worst interview of my life and got offered basically my dream job -- all in the span of less than a week. I don't really blog that much, so if you want to watch the story from here as it unfolds, feel free to come follow me on Twitter @swiftlyspazure. I assure you, I'll make more laughable mistakes along the road -- but what I won't do is let those mistakes hold me down.