Pro-Tips to Land the Interviews at Your Dream Companies
Introduction — From Wall Steet to Googleplex
On March 31, 2019, I was downsized by a startup hedge fund. Having been a quantitative software developer in the finance industry for the last 10+ years, I didn’t want another job doing more of the same. I set out to follow my passion and find my next job in Artificial Intelligence/Machine Learning/Deep Learning (AI/ML/DL). Over the next 6 months, I worked very hard towards that goal. By September 2019, I had multiple ML related on-site interviews and offers, including offers from both Google and Facebook. Here is how I did it, and hopefully, it would encourage and help other potential career switchers to make this transition. Your reward for switching would be two folds, both intellectually and financially.
If you are short on time, here is the quick 5 step recipe that worked for me.
- Curate: Work on a project that is passionate for you and showcase it online
- Study: Practice Algorithms and Data Structures coding and System Design problems and intensively
- Apply: Leverage multiple channels to land interviews
- Interview: Keep your cool during Phone and On-site Interviews
- Negotiate: Know what you want as you negotiate offers and match with teams
As you can see, this is a very SIMPLE 5 steps recipe. However, completing each step takes a lot of HARD WORK. Read on for details.
Here is a little about me, because I think this guide would be most helpful for someone with a similar background as myself, namely, experienced software engineer/developer in a non-tech industry wish to switch to a top tech company on the west coast (Bay Area or Seattle). If you have no software engineering work experience, the recipe above should still work for you, you just have to work A LOT harder than someone with the coding experience.
I graduated from the University of Waterloo in Canada as a computer engineer. In my earlier career, I worked as a software engineer for Microsoft and Oracle. Then I switched into the Quantitative Finance industry after MBA. For the last 10+ years, I worked as a quantitative developer/analyst for Bank of America, UBS, Citadel, and a few smaller firms. But since 2016, when I first stumbled upon machine learning/deep learning, I fell in love with it. I knew I wanted a job in the AI/ML field eventually. Since April 2019, I started my full-time preparation for this career switch. And I will be moving to the Bay Area next week to join Google, one of the leaders in AI and ML.
5 Simple Steps to Success
Step 1. Curate: Work on a Cool Project and Showcase it
In Feb 2019, my good friend, Igor, encouraged me to create a cool project and write about it. At the time, I didn’t have any good ideas, never published anything online and didn’t know where to begin. But in early April, while I was vacationing with my family in Mexico, one night I suddenly had a revelation that I want to build a self-driving car. Given that I had no prior experience with robotics or electronics, I set out to build a Deep Learning/Self-Driving Robotic Car, DeepPiCar, that can run in my living room. One month later, after successfully built the self-driving car, I started to write a 6 part blog post on Towards Data Science to teach others how to build one. Within weeks, my blogs received over 10,000 views, and the reaction from the readers worldwide was overwhelming. I felt my 2 months hard work — one month to build the car, and another month to write blogs — was well worth it.
However, I did not realize its full impact on my professional career until my interviews and offer team-matching calls, when interviewers asked me “Why are you looking to switch from your current industry?” I was ready with talking points! Not only was I able to tell them how passionate I feel about AI/ML, when I pulled out my car (yes, the ACTUAL robotics car) from my backpack and put it in the hands of the interviewers, I could see the excitement from their eyes! Many of them even said they would love to build such a car with their kids. I then tell them that I have published the full step-by-step instructions with source code online (with links in my resume) for them to follow. I was pretty sure they won’t file my resume in the recycle bins afterward. ;-)
Some of my friends ask me what do I suggest as good projects to work on. Here are some of my suggestions:
- If you want to transition into front-end development, create a cool website with a lot of interactivity with popular open-source frameworks, such as React and Angular.
- If you are interested in server-side development, try to create a web crawler or search engine using distributed server technology such as Cassandra, ZooKeeper, Memcached, and Elastic Search, etc
- If you are into mobile devices, try to create and publish an Apple/Android app. Note that publishing an app on Apple’s App Store takes much longer than Google’s Play Store.
- If you are interested in AI/ML, take one of the existing Computer Vision or Natural Language Processing deep learning models, and try to make a product out of it. For example, I took a pre-trained object detection model, SSD, and adapted to be a traffic sign detector for my DeepPiCar. If you are new to AI/ML, be sure to read Part 1 of DeepPiCar, where I list several ML courses and resources to get you started.
- If you are into robotics, try to build some cool robots using a Raspberry Pi or an Nvidia Jetson Nano. Be sure to use either the new Raspberry Pi 4 or Jetson Nano. Raspberry is more widely used by makers and enjoys better support, while Jetson Nano has a GPU onboard, so it may be better for Deep Learning projects.
- If you don’t have any project ideas, do not despair. You can always contribute to one of the open-source projects mentioned above, as well as TensorFlow or PyTorch if you are into AI/ML. You may think you need to be an expert to contribute to these well-known open-source projects. You do NOT. Actually, in each open source project, there are quite a few small features and easy bugfixes designated for noobs to get their hands dirty first. This way, you can be familiar with the code base and submission process before tackling more complex issues.
Once you finish your project, be sure to let the world know it! Is it enough that you just publish your finished code on GitHub and be done with it? No! Because most people prefer to read blogs about what your code does first. Nice, well-polished blogs are great marketing material for your project, and more importantly, YOU! Yes, writing polished blogs with nice pictures and graphs takes a long time. It took me about all of May to write 6 articles. I estimate about 200 total hours or 30 hours/article. If you are working full time, maybe write one well-written blog, which serves as an overview of your project. (BTW, I have spent over 10 hours writing this article, which is only part 1.)
One thing to remember is that you HAVE TO enjoy what you are doing, instead of doing the project just to land a job. If you do have a passion for what you build, it will shine through when you talk to interviewers.
Step 2. Study Hard and Smart
Algorithms and Data Structures
If there were one single skill you need to master for tech interviews, it would be Algorithm and Data Structures (A&DS) coding skills. No matter which big or small tech firms you interview with, they will grill you on your coding skills, although most firms won’t care which programming language you use. My favorite programming languages are C++ and Python, but for coding interviews, I recommend Python, as it is so concise and you can do so much with so few lines compared to C++, which is very verbose. There are tons of resources that prepare you for A&DS. I used the following resources:
- Cracking the Coding Interview Book(CtCI): this book is about 700 pages, and only costs $30. If you need a refresher on A&DS concept, this is an excellent starting point. In addition to concepts, it gives a series of easy to medium level practice questions with full solutions. I spent about 2 to 3 weeks full time on it, spending 1–2 full days on each A&DS related chapter. I skipped chapters on math/brain teasers/OOD/C++/Java/SQL, as they are not related to A&DS.
- LeetCode.com: I also used LeetCode (LC) heavily, as I felt CtCI did not give me enough practice. Leetcode is probably the most comprehensive and organized online database of coding interview questions, with over 1000 easy, medium and hard questions. Each question has a unique number. (e.g. LC#1 is TwoSum) Many online posts simply refer to their interview questions as LC #xxx instead of typing out the whole question. I highly recommend spending $30/month to sign up for LeetCode Premium, as it gives you access to ALL of the LC questions and solutions. I felt it is so helpful, I signed up the annual membership for $99, as I think of it as a “gym membership fee for my brain”. I completed over 100 LeetCode questions (35 easy, 60 medium, 14 hard) About 90% of my actual interview questions, or their slight variant, can be found on LeetCode. In most cases, I didn’t know they are from Leetcode until after the fact. But since I practiced enough of the LC medium questions, I was able to solve questions around the same difficulty. Actually, I feel I can NEVER do enough LC medium questions, because to this day, I still struggle with some of the LC medium questions.
- Tushar Roy’s LeetCode Hard Solutions: Tushar is actually an Engineering Manager at Apple. He made these videos when he was just a software engineer. I would say that watching his videos taught me not only these algorithms but also how to present complex ideas/algorithms clearly. This helped me immensely when I was doing whiteboard coding during on-site interviews.
Note that most interviewers would give LC medium level questions, as it is pretty fair to ask someone to solve a medium problem in 20–30 minutes. I would suggest doing at least 20 easy, and 30 medium LC questions before your first phone interviews. I did my first phone interview after I finished CtCI book and before starting on LC, and was promptly slaughtered.
Also, I time myself on each practice problem, as if I am in an interview. However, I use an IDE, with auto-completion and a debugger. You won’t get these in an actual interview, so I usually set a tighter time constraint when I practice, at about 30 min/question, instead of 45 min. You may choose to mimic the real test environment by using a regular text editor only or even use a whiteboard. It would be a personal preference.
The second most important skill you need to master is System Design. Usually, one on-site interview session would ask you to design a large scale distributed system, such as the Netflix video serving system, or WhatsApp instant-messaging system, or Instagram stories, etc. This is a test of a mixture of hard and soft skills. It is a hard skill test because you need to understand a lot of the commonly used distributed system components, such as a distributed database, distributed in-memory cache, distributed configuration manager, distributed file storage, and distributed search engine, etc., and when is the right time to use each of them. It is also a soft skill test because you need to be able to draw a clear diagram to illustrate your design and verbally discuss and defend your design. I was told that system design interviews heavily influence the level you are offered if you pass the on-site interview. (i.e. it may decide whether you are offered a Level 4 or Level 5 engineering position, etc.)
Here are the resources that I used:
- Cracking the Coding Interview Book(CtCI): There is a chapter that discussed system design, but it is covered at a pretty basic level
- Gaurav Sen’s System Design YouTube Channel: I felt unfulfilled after reading CtCI’s system design chapter. Then I stumbled upon Gaurav’s channel, which has 22 videos. I downloaded all his videos onto my laptop and watched them on a long plane ride. Man, this guy is so GOOD (and funny) and explains things so clearly! About 10 videos are in-depth descriptions of individual distributed system components, the rest are actual use case discussion on how to build NetFlix, or Tinder, or Facebook systems, etc.
- Tushar Roy’s System Design Videos: While Tushar is very good in LC Hard questions, he also has 5 great System Design videos. I recommend watching these videos after Gaurav’s, as Gaurav gives you a solid foundation in system design, and Tushar’s videos assume some of that knowledge.
To me personally, since I worked on quite a few distributed systems before, I was able to grasp the general idea pretty quickly, even though I have not used some of the new technology mentioned in the videos above. After watching enough videos, I was able to generalize most distributed system into the following layers:
- Clients (PC/Mobile apps, browser)
- A distributed Load Balancer to handle client requests
- Location-based Content Delivery Network (CDN) or In-memory Cache to quickly deliver large and relatively static content (videos and images) to clients that are geographically closer to the CDN/Cache.
- A series of microservices to handle various business logic, such as authentication, serving/saving user content, deliver messages between users.
- Communications between microservices are sent via a distributed messaging system.
- A distributed database to save user content and messages. Optionally, add a distributed caching layer before the database to improve read/write throughput.
To me personally, behavior questions are the easiest part of the interview. Unfortunately, it also carries the least amount of weight in an interview evaluation. Sure enough, tech company knows that it is easy to put on a “nice guy/gal” personality and say the right thing in a behavioral interview, but it is much harder to train yourself to be a good coder. For a career switcher, the most important question to prepare for is, of course, “Why are you looking to switch industry?” Hopefully, with the project you built in Step 1, you can probably knock this question out of the park by showcasing your project and your passion for the new industry and the company you are applying for.
Here are some other behavioral questions to prepare for:
- Why do you want to work for my company/my group?
- Give an example of a goal you reached and tell me how you achieved it.
- Give an example of a goal you didn’t meet and how you handled it.
- Describe a stressful situation at work and how you handled it.
- Have you been in a situation where you didn’t have enough work to do?
- Have you ever made a mistake? How did you handle it?
- Describe a situation you had a disagreement with your coworker/boss/subordinate, and how did you handle it?
The key to all behavioral questions is to end on a positive note. For example, even if you are asked about a disagreement with a co-worker or a failure in your career, truthfully mention what happened, but more importantly mentioned what you learned from it, and how it helped you become a more effective team member/engineer when similar situations arise again.
Step 3. Apply via Multiple Channels
I started to monitor the ML Engineer job market in the Bay Area closely at the start of June, right after I published my blogs on DeepPiCar. At the same time, I started my 1 month of intensive full-time coding preparation (about 200 hours total). By the end of June, even though I didn’t feel quite ready, I started to apply to companies. The reason is that there is a 1–2 week lead time between I send in my resumes and the phone interviews. Via multiple channels, I made contact with over 20 companies and did over 30 phone interviews. Sometimes multiple phone interviews with the same company.
Resume — List the relevant stuff first
I won’t discuss resume writing too much, as there are already many great articles on it. My focus is on how to do it from a career switcher’s point of view so that recruiters will be able to quickly identify you as a good fit for the new industry/job function. Remember I was changing from a quant developer in Finance to ML Engineer in Tech, so it doubly tricky, as it is both a role shift and industry shift. Again, my projects came to rescue. I listed it at the top of my work experience, as “Personal Projects”. Yes, even though it is not exactly “Work”, but this is my work, and it is highly relevant to what I want to do as my next job. You should know that most recruiters don’t read past the first page. If they can’t spot the keywords they are looking for in 10–20 sec, your resume is tossed aside. I also list the skill sets (and all the keywords) relevant to the new job at the top half of the first page of my resume. See below.
LinkedIn — Let them come to You!
The best job applications are the ones you never have to send out. After I posted my DeepPiCar blog posts on LinkedIn, I was excited to receive so many messages/calls from recruiters, including from some huge self-driving companies, asking me if I would be interested in their ML Engineer roles. I was surprised by the power of Medium blog and LinkedIn posts. But be sure to mark yourself as “open to opportunities” in the LinkedIn Privacy Settings, so that recruiters can easily find you. When recruiters contact me, I almost always get a phone interview.
Internal Referrals — Have a strong advocate
I would say the 2nd best job applications are the ones submitted by internal referrals. I had an internal referral at both Facebook and Google. I failed my first Facebook interview badly, but because my referral gave me a strong recommendation, Facebook offered me to try again. Luckily, I passed the 2nd phone screen a month later. With Google, it was even more surprising, partly because of my strong referral, and partly because I told them I have other on-sites coming, they skipped me directly to on-site interviews, even though I was a remote candidate (I live in Chicago, BTW).
So I recommend that you find any of your family member/friends/classmates that work in one of the tech companies that you want to join. If none of them work there, maybe they know someone who does. Please ask your friends to introduce you to them, and maybe have them submit your resume via internal referral. Your chances of getting a phone interview are much higher that way.
Another way is to use your LinkedIn network wisely. You can search for people that work for a specific company, and ask one of your mutual friends to introduce you two, if not, send the person a LinkedIn Mail. Note that if you send a lot of LinkedIn Mail, you need LinkedIn Premium. I signed up for about 3 months of LinkedIn Premium (about $30/month) and was able to connect with a lot more people directly. Some of the connections lead to interviews. As a side benefit, I received many more recruiter messages than before, because I believe that the LinkedIn algorithm ranked me ahead of non-paying users.
3rd Party Recruiting Agencies
Overall, I felt that most 3rd party agencies didn’t work well for my job search this time. As a reference, when I looked for finance jobs in the past, I exclusively used executive search firms, and the results were great. But most of the tech giants don’t use 3rd party recruiting agencies. The only agencies that worked well for me are TripleByte and DeepLearning.ai, which I will discuss below.
TripleByte — Skip the phone interviews
TripleByte is a very unique recruiting agency. Its appeal to the candidate is that once the candidate passes TripleByte’s comprehensive 2-hour live tech screening test, he/she can go directly on-site with many companies. It is also appealing to companies because TripleByte would weed out most of the weak candidates for them, saving their engineers hours of phone screening time. When I passed TripleByte’s test, I could choose from about 200 companies. They were mostly small startups, but with quite a few large companies, such as Apple, Adobe, American Express, etc. I ended up interviewing with the Apple Siri group(Huge), Zoox (Medium), and Determined.ai (small) on-site. All of them are doing amazing engineering work. I highly recommend going through the TripleByte process, as it identified my weak point and saved me from many hours of phone screening and related headaches. Take TripleByte’s online test here.
If you are an aspiring Data Scientist/ML Engineer, you must have heard or taken one of Andrew Ng’s Machine Learning/Deep Learning courses, offered by Coursera/Deep Learning.ai. Actually, DeepLeaning.ai has two parts, one part is education, which is very well known, and the other part (GoSensei.ai) is recruiting, which is lesser-known. That’s because GoSensei.ai is quite new, only started at the beginning of 2019. They don’t have nearly as many affiliated firms as TripleByte, but I believe they are quickly ramping up this effort. They also make you take a test. The differences between GoSensei.ai’s and TripleByte’s tests are two folds. First, it is a test designed for Data Scientists(DS)/ML Engineers, where TripleByte has tests for general software engineers as well as ML engineers — the ML engineer test is brand new. Second, the GoSensei.ai test is non-binding, meaning passing its test does NOT skip you straight to on-site interviews. Instead, GoSensei.ai would refer you to DS/ML groups in a few of their affiliated companies, and essentially bringing you to the front of the queue, but you still have to go through the whole phone/on-site interview process. I feel it is still very valuable as Andrew Ng’s reputation and network in Deep Learning space in the Bay Area are quite wide-reaching. I ended up interviewing with Pinterest and Scale.ai’s ML groups. I don’t think I would’ve gotten interviews from either company had I just applied directly. Click here to apply to GoSensei.ai’s AI Program for Experienced Engineers.
Online Job Boards — Don’t rely heavily on them
To widen my search, I had also set up job search alerts at a few online job boards, such as Linkedin, Glassdoor, Indeed and ZipRecruiter, etc, so they would notify me of any new job postings matching my search criteria. Over time, I did receive a few phone interviews after applying. Overall, I have found the signal-to-noise ratio to be somewhat low, meaning I would get a lot of daily emails, but very few good job functions from top companies. But don’t ignore this channel altogether. You need to cast your net wide initial, and maybe you will catch some fish via this channel
Direct Apply — Doesn’t really work
In the old days, people would send a nice cover letter with a resume to the companies, and they would expect to hear back from someone from the HR department. But this time around, this approach didn’t work for me at all! I identify about 10 companies (mostly autonomous vehicle companies) that I would like to work for, and directly applied on their company websites, under the career page. To my surprise, I didn’t hear back from ANY of them, not even a rejection email! Luckily, applying to each company online didn’t take that long. I would say, still apply to any companies that are interesting to you but do not hold your breath to hear back.
Apply Jobs in Phases
Try to apply to a few companies that you are not so excited about or that you think are easier to get into in your first phase. Then apply to your dream job/companies in a later phase. You can use your first phase to practice, improve, if you get offers, even leverage those for better offers from your dream companies. This may sound quite controversial and may seem like a very “materialistic”, but think about it, many people would work at a less prestigious company, with the plan to gain experience and then move into a more prestigious company a few years later. And who knows, if you don’t land your dream job, at least you have a few offers to choose from your first phase companies.
Get Organized: Keep a log book
When you are applying via so many channels, it is hard to keep track of which companies you applied, and which stages you are with each company. I maintain a detailed interview log book. It organized by interview stages (Applied, Interview, Offer, Rejected, etc) and then by companies. Each company is essentially a page, with background information and a list of events in chronological order, such as phone calls and interviews. This way, I can see which companies that I have applied and interviewed with so that I can do the proper follow up.
Keep Calm and Study On!
Blind: This is an app that allows employees of varies companies (mostly tech) to post questions and answers anonymously. People generally discuss career decisions, company culture, interviews, and compensation, etc. I found this platform to be both good and bad. It is good because you get more candid answers/responses and sometimes inside information. It is bad because some people write offensive responses due to the anonymity, and the environment can be toxic at times. You have been warned.
Coursera: Learn about the subjects you are passionate about. It is free or for a very nominal fee. I took both ML and DL courses there.
- Take the 5 course Deep Learning series, if you are interested in Deep Learning techniques in computer vision (CV) or natural language processing (NLP)
- Pass their screening test to be referred to hiring managers in ML groups in top tech companies
Elements of Programming Interviews Book: This is another excellent interview preparation book, similar to CtCI book, except it is more geared towards experienced engineers, while CtCI can be read by beginners who have little algorithms background.
GeeksForGeeks: Like LeetCode, this is another website with very comprehensive A&DS questions and solutions. This site is free, and some time contains actual interview questions not found in LeetCode.
- Check a company’s employee reviews
- Find previous interview questions
- Set up job alerts to receive new job updates
Google Search: The starting point for ANY question in life. Do I need to say more?
Internal Employees: Always try to reach out to your friends, or friends of friends, that work in the companies you want to apply to. They will be your most effective informants as well as advocates. Connect with me on LinkedIn, if you are a good fit, I would be happy to refer you.
- Practice A&DS questions
- Use LeetCode Premium ($35/month or $99/year with coupon) to find past interview questions asked by a given company. I recommend paying for the annual membership. Just think of it as a gym membership for your coding brain.
Level.fyi: This site lists crowdsourced salary information by company, by seniority levels, by location, and by job function, so you will know if you are getting a fair offer from the companies. Of course, this works well only for larger companies, as there are more data points.
- Lookup people’s professional and educational background
- Turn on “Open to new opportunities” setting so that recruiters can find you.
- Use LinkedIn Premium to connect to people you are interested
- Set up job alerts to receive new job updates
- Read tutorials and how-tos to help with your personal projects
- Blog on Medium to showcase your own personal projects
TripleByte: Skip the phone interviews and directly go to on-sites if you pass their tech screening. See detailed description above
- Watch tutorials and how-tos when you work on your personal projects
- Watch System Design and algorithm videos
- CAUTION: Do NOT get distracted and watch hours of videos for fun during your interview prep time!