How I lucked into a FAANG company (pt. 1)

Ponder E. Stine
6 min readMay 9, 2023

--

I read the email inviting me to the first round interview for the Amazon entry-level Software Development Engineer role on my iPhone screen. By this point I had been preparing for full-time job interviews for months and I’d sent out resumes and cover letters and applications to a range of companies. I had already interviewed at a few places, with some mixed results. I had gotten a few offers from companies that were further down my interest list, but I had also already gotten the “thanks but no thanks” notification from the company on the top of my wishlist. I was already in the middle of the interview process with Tesla, beginning the interview process with Blue Origin, but Amazon had been one of the top companies I was interested in from the start. It was important for me to do everything in my power to make something of this opportunity. I felt like I was starting at a disadvantage when applying to tech companies because I was not a computer science major and because I did not have any software development internships on my resume. Regardless, it was exciting to be invited to interview.

The first round of the interview process was a two-part Online Assessment (OA). The first OA consisted of two coding questions, graded automatically by the computer against a group of predetermined test cases (a set of input data and its corresponding solution/expected output from my code). Perhaps unsurprisingly, most of these test cases were hidden from me so I could not cheat and jump right to the solution without going through the necessary hoops to actually solve the problem. I had 90 minutes to solve both questions. The goal was to get all of the test cases to pass, or as many as possible within the time limit.

And so I got to work on the first coding question. I was able to reason through the problem fairly quickly and figure out a decent solution. I felt good, confident in my abilities and preparation. With a few tweaks to my code, I had solved the first coding question. I tested my code and all of the test cases passed! The computer auto-grader displayed my grade, a 100%, and I was only 20 minutes into the assessment. Naturally, I felt pretty good about how much time I had to solve the second question.

And so I got to work on the second coding question. It was more challenging than the first. The problem statement included more variables to keep track of, more factors at play with each other, and more decisions that needed to be made which would bring you closer, or further, from your desired destination. I got an idea for a method of solving the problem, but I knew it was not very good. It was correct, in that it got to the right answer eventually, but it took ages for my code to get there (at least relatively in computer time, it still took less than a second for me to try my code against all the test cases with the click of a button). When I tested my first attempt at the problem, 12 of the 15 test cases passed. The specific details of the failing cases were hidden from me, all I knew about them was that they required processing a larger amount of data than the other test cases to get to the solution. My code needed to return the answer within a time limit, and the offending test cases had taken too long and timed out. I could not just come up with some design that gets to the right answer eventually. I needed to design something better, something faster, something more efficient.

I commented out all of the code I had written for my first attempt at this question (essentially I told the computer to ignore that code for now, but it did not delete any of the code in case I wanted to look at it again later). I thought through a new algorithm, a new process to solve this problem. Feeling hopeful but a bit doubtful that this second idea would be significantly faster, I coded up my second attempt and crossed my fingers. 12/15 tests passed... again. It was the same exact outcome as my first attempt. By this point, I had used all but 10 minutes of my allotted time for the coding questions, and I was out of ideas for improving my previous attempts. In a last ditch effort, I began to retrace my steps. Maybe I hoped that a glaring error I’d missed before would jump out and smack me in the face, maybe I hoped for inspiration to strike, maybe rereading the bad code would shed light on where a fix was needed. Honestly, I don’t really know what I expected. I commented out my second attempt, and uncommented my first attempt (i.e. I told the computer to try the first method again). I clicked the button to test my code, and I did not believe what I saw…

All the tests passed. Even the ones that had failed before. My solution was graded as 100% correct. I sat staring at the screen, trying to understand how Amazon would play such a cruel joke on a college student. I had coded one version of a solution which was too slow. So I coded a second version, which was also too slow. And then when I tried running my first version code again, unchanged from its previous test run, it worked perfectly. In the business, we call this “indeterministic behavior,” when an operation provided the same input value(s) doesn’t lead to the same result(s) across multiple executions. Indeterministic behavior is one of the biggest pains in the ass in my job now, because it makes it much harder to determine why something is working the way that it is. At the time, however, I couldn’t care less about this. I held my breath and quickly pressed the ‘Submit Solutions’ button before I could screw it up again or before the computer reversed its merciful decision. I didn’t even want to chance touching my code and breaking it again in the eleventh hour, especially when I was not sure what got it to work correctly in the first place.

The initial coding assessment was finally over. I felt shocked, relieved, lucky, and, the all-too-common friend of coders, guilty. The cries of imposter syndrome grew louder in my head. “How will I ever get through the next round of interviews if I couldn’t get through the first round under my own abilities? Stick to your field and leave the coding for the CS majors. Maybe you could develop software for an aerospace project, but you‘ll never be good enough to work at a well-respected tech company or FAANG without a CS degree.”

The second part of the OA was a work day simulation. It is a bit of an odd assessment, but I had seen it once before when I’d interviewed for Amazon’s internship the previous year. I’d had a whole year for that experience to sit in the back of my head, for me to process the assessment. When I was finished this time around, I felt like I had done better than my attempt the previous year.

And I went back to my routine: waiting, checking my email, waiting some more, hoping to make it to the next round, continuing through interviews with other companies, and waiting some more. And the voice of imposter syndrome grew louder in my head with every day that passed. But I did not feel relief when I got the email I had been expecting. Instead, I felt more and more unsure…

--

--

Ponder E. Stine

Aerospace Software Engineer @ Amazon, Project Kuiper 👨🏻‍💻 📡 🛰️