- Why am I writing this?
- Some Important Reminders
- My 6 Month Journey
- My Statistics
I’ve benefitted tremendously from people who have chosen to be honest online about different topics. I’d like to pay it forward and do the same.
Disclaimer, not all parts of this may be directly helpful or useful. However, in an effort to share as much detail honestly as possible, I decided it to keep it anyway. This is a reflection on my experience, from start to finish, the highs and the lows, and the most important lessons I took away from it. This is mostly going to apply to tech internships, but will generally hold across all types of internships
Firstly, getting an internship is hard. Like really hard. It’s especially difficult when you
- are an underclassmen (i.e. a freshman or sophomore)
- don’t have previous industry experience in the domain you’re applying for
- are not given the opportunity to interview
Things get easier the older you get and the more experience you have. What this means is that
- it will probably take a lot of effort to land your first internship
- investing the time to do so early on will pay off in the future
- Your self-worth is not defined by what internships you have or don’t have
Do not compare yourself to others and the internships they’ve landed or done
- Doing this is a completely unproductive use of your time
- It’s a recipe for being unhappy and ungrateful
- The success of others is not your failure
Do not take rejections personally
- This is especially true when you only have one lead. The rejections that hurt the most are the ones where I did not have any other leads at the time
- Pick yourself up and move on, it’s hard, I know, but you can do it
Have other things going on besides recruiting - do not let recruiting consume your life
- Pursue things you’re also interested in, code a side-project, play sports, hang out with friends etc.
- If you have other things going on, you’ll also take rejections less personally. If recruiting is the only thing you’re doing, it’s completely natural to be devastated if you get rejected
This section is going to be long and rambly (so feel free to skip it). It takes you through my entire process (of getting my first tech internship) and what that looked like over 6 months.
- Started applying to places in late August. After getting ghosted from many places last year, I networked concurrently to applying and was able to land referrals to a couple of big tech companies
- At this time, my knowledge of how technical interviews was very limited. I knew about Leetcode but had never practiced before. I had also not yet taken Data Structures & Algorithms (was taking it this semester at school)
- The first lead I had was an online assessment I got sent from Dropbox. With 0 preparation, I basically completely tanked it. I realized I needed to start working on my technical skills
- I was applying to lots of places by now. I’d try to apply to a couple of places every other day and continued to network.
- For the most part, I was getting ghosted, I did get an online assessment for a Data Science Intern position at Robox but you can’t cram SQL in a weekend…
- I started to Leetcode intermittently at this point but extremely inconsistently
- Still no leads despite sending out many applications. Some places did have the decency to reject me, but for the most part I was being ghosted
- I realized the best thing I could do with my time was start preparing technically in addition to applying to places. That way, when I did slip through an ATS parser and land an interview, I’d be able to convert it to an offer
- This was an important day because it was when Facebook contacted me for an interview
- This was basically going to be my first ever coding interview and so I scheduled it two weeks out in early November and began a super strict Leetcode studying regimen (check stats for details)
- I made one really stupid mistake when I was studying for my FB interview. I stopped applying to places concurrently. Do not do this! Don’t count your eggs before they’ve hatched, whether you’re doing an online assessment or the final round, always be pursuing alternatives
- In early November I had my first coding interview with Facebook. I was nervous but felt prepared. I ended up getting relatively lucky and got two LC mediums and I was able to do well. I heard back a couple of days later that I’d made it to the final round and I was ecstatic!
- I kept preparing and scheduled my interview for the week before Thanksgiving
- I’d also heard back from a healthcare company called Curai and I ended up doing one interview with them. I think the position was supposed to be for PhD students though so, it wasn’t surprising when I got rejected
- My FB interview final round eventually rolled around and I felt ready to get it out of the way. I had done a lot of preparation and knew that I was ready. The interview started out very straightforward and I was able to get a solution quickly. Then things took an aggressive turn for the worse. I got a question related to a concept I had seen before but in a completely, unfamiliar context. I struggled a lot trying to put together a solution and the interviewer gave me a hint. With the hint, I powered through, explained the high level method and asked if that sounded good to start coding it up? He said go for it. I should NOT have begun coding. At a very high level, I knew what I had to do, but I did not completely understand how to implement it properly. The result was that I coded a solution that was just completely wrong, and clearly demonstrated I did not understand how the algorithm worked. Which it didn’t by the way. My interviewer also never said anything to stop me or make me take a step back, so I just floundered for about 30 minutes
- At the end of the interview, I knew I didn’t do great but I also didn’t think I’d tanked it. Then I realized my code was completely wrong. I was conservatively optimistic because as with most things, when the door is still a little open, you always magnify the positives, hoping, praying. Tl;dr, continue to apply to places even after you’ve done interviews
- On the 5th of December, I was rejected from FB. I felt incredibly drained and very pessimisstic about my prospects at other places. Then I picked myself up a couple of hours later and moved on
- Now that the door with Facebook was closed, I was back at square one and had to start from scratch. I reached out to a Citadel recruiter and was able to get an online assessment - yay, I had a lead again! I prepared for a day or two then took it. In general, high-frequency trading firms have a higher bar for hiring than FAANG in terms of difficulty of questions asked. The online assessment was hard and I did not do well. A couple days later I got rejected
- Just before I got rejected, another lead opened up with a company called Numenta, that was working on some cool machine learning research. Just before the Citadel door closed, I had scheduled an interview with the recruiter to talk about their internship program, so I wasn’t feeling completely dejected because I had a lead.
- The call went well but again, this position was meant for PhD students and I didn’t move forward to the technical interviews
- At this point, I had no leads and I felt completley hopeless. I remember lying in bed that night thinking, why does this have to be so hard? I just want to learn and add value, why can’t any place give me a shot? I slept pretty badly that night, but things were going to start looking up soon!
- I woke up from my Numenta rejection with two emails: a coding assessment from Netflix and an invitation to interview at D.E. Shaw Research. Finally I had leads again!
- The Netflix coding challenge was actually not a typical algorithms challenge so I spent most of my Christmas break studying for that. A couple days later, I also got the invitation to do an online assessment with TikTok, which I had heard was incredibly difficult so I didn’t pour too much time preparing and focused on my Netflix one
- A couple of days later on the 17th of December, I also got an invitation to do Amazon’s online assessment - almost 4 months after applying! There are actually 3 assessments you do (one after the other if you do well) and I finished them all in the space of about a day. After part 3, they said they’d get in touch soon about next steps if I made it through
- I ended up doing my TikTok OA on the 26th of December and it went surpisingly well, I completed all of the questions correctly with time to spare!
- A couple of days later, I did my Netflix coding challenge and that went decent, although I did not answer everything correctly (and never heard back so I guess less well than I thought)
- On the 5th of January I did my interview with D. E. Shaw Research and that went well too. Finally things were starting to look up!
At this point, I had heard back from a couple of places and starting scheduling interviews:
- TikTok - I heard back saying they wanted to interview me and I did my first round in mid Jan. That went well and I scheduled my final round for the 26th
- Amazon - I heard back saying I’d moved to the final round and scheduled it for the 26th too
- D. E. Shaw Research - I heard back and scheduled my onsite for the 19th, which was going to be 2.5 hours!
- Eightfold - I’d completely forgotted I’d applied here but I ended up doing a technical interview and then a final interview with the CTO (although I never heard back)
- The 26th January was a very nerve-wracking day but I felt confident because I knew what I was getting into. The more interviews I did and experience I got under my felt, the better I got at the interviews.
- My Amazon interview ended up going well and I heard back a day later that I got an offer! This was my first offer after 5 months of blood, sweat, and tears so I was incredibly grateful and relieved. My TikTok interview was quite difficult (I made it through 1 follow up out of an expected five) and I didn’t get an offer but you win some, you lose some. I’m still in contact with D. E. Shaw Research but I decided to share this as soon as possible so people can benefit from it.
Start early (be on the look out for postings as early as June).
- The earlier you apply to a position, the more likely you are to hear back
Your ability to get an offer is comprised of first getting an interview, then acing an interview.
- If you can’t get an interview, you can’t get an offer
- If you can’t pass the interviews, no matter how many accomplishments you have, you can’t get an offer
- Getting an internship is a marathon not a sprint. Don’t feel dejected if you don’t have any leads or if other people around you have offers way before you. It took me 6 months to get an offer!
- Don’t just apply to postings on Linkedin and Indeed. Find companies that do work you’re interested in and email employees who work there/recruiters.
Applying online with no leads is not the most productive use of your time. For companies on the receiving end, it’s basically a needle in the haystack problem so many qualified applicants fall through the cracks and don’t make it to interviews.
- Use referrals (best method)
- Cold reach out to employees working at the companies
- Cold reach out to recruiters
- Make use of things like conferences, mentorship programs, virtual events
- Make sure your resume is ATS parseable, use keywords, single-column, clearly marked format (useful tools out there to check this e.g. https://glidecv.com/), impact-driven statements with quantitative metrics.
- Apply to many places. Given a very small response rate (if you don’t have previous internships under your belt), maximizing the number of applications will maximize the number of potential responses.
- Software Engineering interviews will mainly consist of data structures and algorithms problems. Data Science interviews will usually have a SQL component. Internships that do not rigidly fall into these positions can be much more flexible - ask your recruiter to clarify what you should expect. In general, the bigger the company, the more streamlined and standard the process is. At smaller companies, interviews may be more variable and can test you on any large number of things.
- Interview prep is a long-term skill. Don’t try to cram Leetcode in a weekend. Some people do it and they get lucky. Most don’t.
- Do mock interviews. Especially if you haven’t done many coding interviews. Practice coding and tracing through your code without a compiler. Don’t rely on running your code to test it.
Leetcode is pattern-matching. Develop a vocabulary for problems then work on your problem solving abilities
In technical interviews, you may be asked a
- question you have seen before
- question with a technique you’ve seen before but with a trick/adaptation
- question you’ve never seen before and have no idea how to solve at first glance
Obviously, the first bucket is the most trivial. The next two require your ability to problem solve.
As you start to prepare with Leetcode, find the signal from the noise
- Learn problem patterns, not specific questions. Most problems will use one technique or a mixture of techniques from List 75
- Focus on the low-hanging fruit first. That means do the highest voted, most common, easiest questions. Then work your way up
Always consistently practice at JUST above your level. When you do a problem, did you
- See the problem and figure it out straight away
- Look at it for a while (without knowing how to start) and then figure it out
- Struggle with the problem and figure out a solution but not the most elegant or optimal one
- Struggle with the problem and give up. When you read the solution, you quickly realized what you missed
- Solution used a technique / approach you didn’t know
- Solution makes sense but you don’t know how you could have come up with it
- Can’t understand the solution
- Doing problems in bin 1 is helpful for developing speed when solving problems.
- Problems in bins 2 through 5 are a great place to be in. If you encounter a problem in 5, spend some time understanding the technique (then a couple of days later, try to reimplement it).
- Problems 6/7 are probably too hard and it won’t be useful to practice these unless you spend a significant amount of time getting help and thinking hard
When you practice Leetcode, keep a list (in form of an excel sheet or Notion page) with all the questions you’ve done, the high-level approach, any reminders of things that you missed, and the number of times you’ve done the question
- Aim to be able to solve any medium problem in about 20-25 minutes. The first time you start preparing, this will not happen. Don’t be discouraged and keep practicing.
- Build a system for tackling problems in interviews. If you have a system, you’re less likely to crack under the pressure of a difficult question. The steps I followed were from this video
- Companies generally give employees a lot of freedom when it comes to interviews. This means there is high variance in the quality of interviewers and difficulty of questions asked. Again, large component of luck, which is out of control but there are other variables in your control!
- There are many factors that come into play, including a lot of luck. Don’t take it personally if you get rejected
- Applied to somewhere between 100 - 200 places (I stopped keeping count)
Rejections where I made it beyond resume screening: ~9
- Assume ghosted/rejected by the rest
- Sent out 50 cold emails/messages on Linkedin
- Started preparing seriously in October
- Did ~ 75 problems in two weeks
- Reached ~100 problems for my Facebook final round
Over next two months, practiced intermittently. Final count after end of my interviews was about 175
Was this overkill? Probably. But,
- It took me a lot of practice to develop the confidence and skillset to tackle these interviews. Some people do way more questions, some people do way less. Keep practicing until you’re confident in your abilities
- I treated interview prep as a class, which meant my studying was distributed over a couple of months. The only difference is a. this is a class I will always need and b. I got significantly more value out of it (in the form of an offer where I’ll learn tangible skills) than any other class I’ve taken
- I also anticipate coding interviews (for the foreseeable future) are going to be something I encounter. I decided to invest some time now to avoid having to grind in the future. Now I’m gonna focus on maintenance as opposed to prepping from scratch each time
Applying to internships can be exhausting, interviewing can be exhausting, but above all getting rejected can be draining. Do not lose hope! Keep practicing, keep applying. Worst comes to worst, you’ll be working on your own fun side projects instead of pursuing an internship!
- Leetcode ofc
- Ranking Interviews by Cram Score
- Python interview tricks/must knows
- Tech Interview Handbook
- Top 75 Leetcode Questions To Do
- Curation of Important Leetcode Qs
- Leetcode Problems that Got Me Hired Series
- Dynamic Programming Patterns
- Practice mock interviews
- Summer 2020 Internship Hunt
- How to Get An Internship
- How to cold email for competitive internships
- Why you’re not getting internship offers
- Python data structures
- 80,000 hours job board