How I tanked a FAANG interview
(and got hired anyway!)
12 min read
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."
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:
- 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.
- I have already narrowed my goals down to working for Apple, specifically.
"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.
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.
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
& 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.
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.