English major to engineer...my trial and error road to FAANG
Anonymous User
27518

AMAZN [Offer] | FB [Reject] | Capital One [Offer] | Bloomberg [Reject] | English major to engineer.....

Education: BA in English, BA Economics, MS Industrial Engineering
Years of Experience: 2.5
Prior Experience: SWE at small local company
Date of the Offer: Fall 2020
Company: Amazon: SDE1, Capital One: Senior Software Engineer

My Story (skippable):
Went to university with utterly no idea what I wanted to study, so I ended up taking random classes. Finished somehow with a dual degree in English and Economics. I knew I wanted to get into engineering (somehow). I was eventually admitted into an MS in Industrial Engineering program. There I gained my first exposure to programming and knew immediately that is what I wanted to do....somehow.
Fast forward two years, with some time in the army in between, and I am in the job market. I drive uber to make ends meet while sending my resume out to everything I can, and reaching out to every recruiting agency in town. After over 400 applications, I finally get an offer at a small company. I taught myself how to program on the job, and about 2 years later, I feel ready to break into FAANG.

Interviews:

  1. Facebook
  2. Amazon
  3. Bloomberg
  4. Capital One
  5. Misc Startups

I tried and failed to pass an Amazon onsite about a year earlier, which was a bit of a let down. Covid hits and I figured now was the time to commit everything to LC and interview prep and go to war with these interviews. This is the result.

FB | L5 | NYC | April 2020 [Reject]:

Studying Process for FB:

Recruiter reached out to me in mid March, right as the covid lockdowns started coming. She seemed keen in getting right into a phone screen. I figured since I was doing nothing better with my life than staying indoors, I might as well commit everything I had to passing FB. I grinded through leetcode question after leetcode question. I would spend 15 min trying to solve a medium. If I was still stumped after 15, I would implement the optimal solution. This turned out to be a naive approach to studying.

Technical phone screen (1 hour):

  • 1 LC Medium on string parsing
  • 1 LC Medium on arrays

Due to NDA I will not disclose the problems but they are both FB tagged problems

Onsite (4 rounds):

  • 2 LC hards (or at least difficult LC Mediums) to solve in 1 hour, with some basic behavioral:
    I knew I was finished after this round. I had 1 hour to both of these problems, and an hour was not enough to even solve one. They were both very tricky problems involving string parsing. Later I was able to solve them, at home.
  • 2 LC mediums, 1 hour:
    This round was much better. I did well this round. Solved both of these problems, and both were relatively easy LC mediums. I did not get the optimal solution for one of them and this cost me. Interviewers were very nice.
  • System design:
    I had not prepped at all for system design and this cost me BIG TIME. Interviewer was nice.
  • Behavioral:
    I did well this round. Due to my military experience I do well with people and in teams and I stand out very well during these. Had great rapport with my interviewer and he said that he wanted me on his team if I made it through the other rounds (I didn't). Regardless, we still connected on linkedin and talk occaisionally to this day.

Result:
[REJECT]:Got a call from the recruiter a few days later, she enjoyed working with me and wanted me to reapply.

LESSONS
Facebook likes to ask tricky questions, usually at LC medium level. I personally do not like this approach because I feel tricky questions test your ability to hack together a clever solution, not your ability to as a professional programer. I guess that's the facebook 'hacker' culture. But that's just my two cents.
It was a miserable setback, as I had prepared for hundreds of hours and got whacked in the very first round. Fortunately an Amazon recruiter reached out to me the day after my FB rejection, and I knew I was going to have to put my axe to the grindstone again.

Throughout my preperation for FB, I followed a breadth first approach. Breadth first learning allows a very shallow understanding of tehcnical problems. It allows you to memorize effectively and learn basic approaches, but does not provide enough in depth understanding of the problem itself nor of fundumental approaches one should take to solve them. I knew I had to change my strategy.

Amazon | SDE2->SDE1 | NYC | June 2020 [OFFER]:

Studying Process:

I decided to concentrate on a high volume, depth first approach for problem solving. Instead of solving problems shallowly, I would spend 20-30 minutes trying to grasp and code up a solution. If I got stuck, I would read the brute force solution, then try to code it myself. If I again got stuck, I would code in, line by line, and truly understand what each line of code does. I used LOTS of print statements. I would then proceed to the optimal solution. If I could not code it up optimally from scratch, I would enter the solution code in, again line by line, until I understood exactly what was going on. Again, lots of print statements here. Additionally I did about 2 PR4MP problems per night.

My usual schedule was:

  • work until 5
  • hour break
  • pr4mp at 7:00, leetcode until my next pr4mp appointment at 9:00, then leetcode until my eyes shut.

I would focus on topics I had trouble on. I noticed I did well with tree based problems, but struggled with backtracking and bottom up recursive problems. So I looked for questions with these tags and solved them. Sometimes I would use leetcode's explore option to study fields I needed to work on.

After the recruiter reached out to me, I had an online assesment, 1 phone screen, and a 4 round onsite.

Due to NDA I will not disclose exact questions but will talk about process. Disclosing exact questions is a waste of time anyway, questions are seldom reused.

Interview Process

OA: 2 Amazon tagged LC-medium problems. I hated the OA because you cannot see the test cases for cases you haven't passed. One of the questions was kind of tricky. I couldn't pass all the test cases, so after 2 hours I just threw my hands up, said "**** it!" and submitted. To my surprise a recruiter reached out to me the
next day, and wanted to proceed.

Phone Screen: Amazon tagged LC easy/medium: I got the brute force solution easily. Needed a hint for optimal. Was not feeling super well that morning and that definitely affected my performance. I was sure I would be whacked after this round. To my surprise I got an email that night inviting me to the onsite.

Onsite (virtual), 4 rounds:

  • Round 1: 30 min LP questions, 30 min open ended technical question:
    Please, please, please prepare in depth for the LP principles. They will ask detailed and concise questions about certain situations. The technical question was very open ended, and more of an OOD question than an actual LC style question. The key for success here is to be able to ask the proper questions to scope the problem, and concisely code up a solution. It was not tricky nor particularly difficult, but calming your nerves and understanding how to scope the question here is the real challenge. I screwed this up because I was expecting a tricky coding question. I was able to get a solution but it was far from perfect. I lost points on this for sure.

  • Round 2: 30 min LP, 30 min System Design:
    Again, prepare lots for LP and prepare lots for System Design. I studied very, very hard for the system design portion and did quite well this round. They key is to spend most of the time at a high level, discussing basics and tradeoffs of several design strategies. Ask questions at every step. Treat the intervewier like a client, and you are building a custom solution for him. I did not do perfect this round, but well enough.

  • Round 3: 15 min LP, 45 min coding/tech question:
    This was more of a 'pure' LC question. It is an AMAZN tagged LC style question, kind of difficult but not particularly tricky. More of an OOD question. I had seen a similar question before. I struggled with one part, but got working code before the time limit. I did well this round.

  • Round 4: 30 min LP, 30 min coding/technical question:
    This was another 'pure' LC question. AMAZN tagged medium/hard problem which was again more of an OOD design structure. I nailed this question with an optimal solution.

RESULT [OFFER...kind of.....]
After 5 business days the recruiter called me and originally told me I did not make the cut. After a solid 2-3 minutes of being disappointed and asking what went wrong, the recruiter told me that I did in fact recieve an offer for SDE1 instead of SDE2. I was at first really confused and asked several times for clairification if I recieved an offer for SDE1. Recruiter confirmed I did indeed recieve an offer. I was extremly happy. (had to put the reciever down and do some air kicks/punches).

But it was too early to celebrate. The recruiter and promised to find me an opening on a team for SDE1. Weeks pass and the recuiter stops returning my emails. I got ghosted. I finally get ahold of the recruiter and and she confesses there is actually no avaliability for SDE1. But she didn't have the spine nor decency to call and tell me upfront, so instead left me on the hook.
As you can imagine, my disappointment level was near immeasurable. But in these moments in life, you have to be stoic, and move on.

LESSONS
All in all Amazon was the most fair interview of them all. The questions were realistic, not tricky, and questions I felt accuratley tested my ability to code, my practical knowledge of algo and DS, and my ability to problem solve. I enjoyed everyone I met with at Amazon.
Amazon also emphasizes LP. Make sure you have 2 examples for each, and write down every detail of each example. DO NOT LIE. BE HONEST.
Another lesson? Don't ever give up.

Once Covid lockdowns were in full swing, I did virtually nothing enjoyable other than leetcode for over a month before FB, and many consecutive months before Amazon. I had a medical emergency and was hospitalized (leetcoded in the hospital) to prepare for Amazon. I was going to do whatever it took. I did get an offer (downgraded but who cares), life decided to tease me once more and ghost the offer Amazon gave. However all these setbacks only increased my resolve. Fortunately, after my Amazon offer, Bloomberg and Capital One recruiters reached out soon after.

Bloomberg | Senior Software Engineer | NYC | June 2020 [Reject]:

  • Phone Screen 1: LC medium. I did well. Interviewer and I got along great as we lived in the same foreign country for a period of time.

  • Phone Screen 2: 30 min getting absoloutely grilled in technical questions about garbage collection and python interpreter lock, 30 min to sovle a common LC hard on trees traversal.
    I knew I was going to get whacked after this round and I did. It was tough. But the interviewers liked me and wanted to give me a second chance at another team.

  • Phone Screen 3: LC medium on strings. Struggled a bit but got a working solution. Got a rejection.

RESULT: [REJECT]

LESSONS
People skills matter! Sometimes if you build good rapport with someone, they will give you a better reivew and give you another chance to interviewer later. Bloomberg asks pretty in depth questions and also expects you to be able to write your own tests for the code. Know your programming language and know how computers work.

Capital One | Senior Software Engineer | NYC | July 2020 [OFFER]:

Recruiter reached out. Process seemed pretty normal. Online assesment then virtual onsite.

Online Assesment
2 LC mediums. Many test cases, took few approaches to pass all test cases. Pretty straightforward.

Onsite

Was a bit shaken up because of such short notice for interview.

  • Round 1: 2X LC Mediums. This round was not that bad. Straight forward questions.

  • Round 2: Technical question where I had to talk about how to implement a technical solution in a business environment. Kind of weird and unstructured. I asked for a fair bit of guidance.

  • Round 3: Behavioral. 3-4 in depth questions with in depth answers.

  • Round 4: High level system design.

RESULT
[OFFER]

LESSONS
My preperation for Amazon had really grown my leetcode muscles so by the time cap one came around, I did pretty well with only a few days notice. Since the Amazon ghosting, I was really, REALLY not in the mood to interview that morning but pushed through anyway. I nailed it and got the offer. A big lesson here is to leave no stone unturned, oppourtunity pokes its head in the most unassuming terrain. I nearly flaked on the interivew for my first job! Flashback a few years I woke up after driving a long uber shift and realized I had an interview for a full stack position in a few hours! I was utterly unprepared, but showed up anyway. I nailed it, got the job, and that started me off in my software career.

Final Words

1. Rome was not built in a day, neither will your programming skills.

Many people just try to memorize leetcode problems with the hopes that they get questions they have seen before. This is unlikely to happen. The key approach isn't to memorize problems, it is to memorize approaches. By memorizing approaches, you equip yourself with a toolkit to solve problems. The more problems you do, the larger your toolkit grows. This process is called learning. After enough time, solving LC becomes instinctual, and you can almost predict the types of solutions for certain problems.

2. Fear not the man who has practiced 1000 kicks, fear the man who has practiced 1 kick, 1000 times...

So while doing many problems will expand your toolkit, you must solve each problem thoroughly and to completion. Otherwise your effort will be wasted. It is better to solve 2 LC mediums in one day while understanding the brute force and optimal soltions clearly and concisely, rather than memorizing 10 optimal solutions per day.

3. Work smart, AND hard

You need to divide and conquer your pain points. Be methodical. Start with LC easy, do at least 50 before even attempting a medium. Once on mediums, if you find you struggle to understand or implement certain types of solutions, solve those types of questions! Leetcode tags are your friend.

You will also have to work virtually non stop until the offer comes. My strategy was to take an hour break after the work day, and leetcode/study programming/systems design until my eyes just closed. Which often was between 1-2 in the morning. Wake up, and do it again.

4. What worked for me won't always work for you

Everyone is different and I learn through sheer repetition and trial and error. Some people learn differently than me. Others are more intelligent and/or learn quicker. You will have to find a strategy that works for you.

5. Be careful what you wish for...

FAANG is not everything. You can certainly have a rewarding career and generous salary outside of FAANG. I see many people sacrificing their sanity, passions, friends, and family just to grind leetcode. I grinded for months only to get a downgraded Amazon offer by a recruiter who ghosted me.

Then you get slapped with a pair of golden handcuffs and end up working for someone else, not necessarily building and creating something that you find truly fascinating and wonderful.
FAANG companies have picked up on this obsession and now have ignited a Leetcode arms race to solve ever more outlandish leetcode questions. In Google's case you could even pass all the coding questions, only to be whacked by the hiring commitee. You can do very rewarding work in smaller companies. And there are plenty of smaller companies out there that recognize the leetcode fever is crazy, and have much more fair interview processes.

Good luck!

UPDATE ON AMAZON

I met an Amazon recruiter through a small gathering of friends last weekend. I explained to her my situation and asked if she could help. She did. Official offer came today :)

LESSON? Its not just what you know, its who you know.

Comments (81)