Students pursuing Computer Science (or related) major often ask this million dollar question – how to land a software engineering job in my dream tech companies like Google, Microsoft, Facebook, Apple, Amazon, etc. In fact, this is one of the primary goals for most CS students in the US with little to no experience. I was in the same boat a few years back while pursuing my Master’s degree in Computer Science from the University Of Southern California (USC).
Software engineering can be an exceptionally rewarding career, but there’s a lot of effort (and a pinch of luck) that’s needed before you can start to reap those rewards. It’s not all about coding questions – at least not for the first half. You need to be aware of the opportunities that may come knocking, followed by a plan to convert these opportunities into job interviews, and then finally prepare hard (and smart) to crack these interviews and grab a few offers. In this article, I will help you navigate through this process based on my experiences.
Note: This guide takes Master’s students in the primary perspective but can be used by all students and even experienced professionals trying to get a software engineering job – simply ignore some of the Master’s specific content.
Job Opportunities for MS Students
As international students, you have the following options to gain industry experience during (or after) your Master’s degree.
Internship & Co-op (CPT)
As part of CPT (Curricular Practical Training), students can receive academic credits for their off-campus work experience while pursuing their Masters’s degree.
This opens up a window to gain industry experience in the form of a summer internship or a Co-operative Education (commonly called Co-op) during your fall/spring semester. You should exercise them both if the end goal is landing your dream job.
Full-Time Job (OPT)
Optional Practical Training (OPT) lets F1 students work off-campus after completion of Masters degree in a job that is directly related to their major field of study through a temporary employment authorization document (EAD).
Every F1 student gets 12 months from the start date on EAD, unless you are in a STEM program that qualifies for a 24 months OPT extension (and hence a total duration of 36 months). And during this period, most companies will apply for your H1-B Visa that can be extended every ~3 years for eternity if you have green card application form i-140 approved. Don’t worry too much about the H1-B part as it’s beyond the scope of this article.
Note: You must have a job within 60 days of your graduation to apply for an EAD, and kick in your 12 months OPT. Failing to do so will make you out of status and return to your home country. Sounds scary but don’t worry – read on and you will almost guaranteed avoid ever reaching anywhere close to this deadline.
Based on the opportunities above, you most likely will aim to grab at least 3 job offers during your Masters – one each for a summer internship, co-op, and full-time. And preferably in one of the best tech companies out there in Silicon Valley.
Luckily, they all require a similar strategy! 😉
How To Get Interviews With Top Tech Companies
1. Build Projects That Stand Out From the Pack
This is the most important piece of advice that helped me land tons of interview calls. While GPA, school brand, etc may matter, a project that stands out from the rest of the crowd is usually the one that impresses the recruiters and managers when you are selling yourself to them during a career-fair pitch or when they screen thousands of resumes online.
But how to build something that stands out? You can go Elon Musk and build something cool – that’s guaranteed to catch some eyes. But, it doesn’t really need to be a breakthrough innovation – just something good outside your academic projects (coz hell everyone has that WebCrawler or WeatherApp on their resume). It can be something out of your research assistantship (RA), personal projects or even hackathons (discussed later).
I will give you my example. Before starting my Masters, I built a few Android Apps and published them on Google Play Store. The apps were trivial but I did my due diligence to shape the app such that it racked in over 2 million downloads (that’s a story for another day). Now, this is the kind of project I could easily leverage because it’s not just about the downloads but several technical intricacies like understanding of SDLC, search optimization, Java/Android language command, writing code that scales, production-readiness, etc – something most companies will value. And, I did use the above in my pitch to get interviews from then mobile-first companies like Facebook, Tinder, YouTube (Google), Yahoo, Uber and many more.
2. Decorate your LinkedIn & GitHub Profile
We all know that LinkedIn is the new Resume! You must have a complete, all-star profile on LinkedIn. If you haven’t already, add all minuscule details including skills, projects, education, work experiences, etc. Add a crisp yet catchy bio and try to get recommendations from your mentors or colleagues with whom you worked in the past. And finally, do let recruiters know you are open to job opportunities!
Besides LinkedIn, staying active on GitHub is not only healthy for your interview calls but also gets you rolling with a version control system like Git to manage your projects – you will be anyways doing that a lot once you get into the industry. Besides, you will be embracing the world of open-source, and even better if you can start contributing to other projects. So, it can help to take out some time to push all your previous projects to the GitHub repository and henceforth use Git to manage and showcase all your new projects.
3. Prepare A Resume That Pops Out
Well, we all know that this is one piece of paper that can be a game-changer if you do it right! Getting your Resume right is crucial to land more interviews, thereby increasing your chances of getting hired.
Here’s a postmortem of my software engineering resume that helped me bag several top tech interviews! I have included a winner format and several tips that I believe substantially increases your chances to get noticed. So, do check it out and leave a comment if you have any questions or need suggestions.
4. Create A Simple Website To Display Your Portfolio
I can hear the backend engineers groaning – I am already on LinkedIn & GitHub, why another website now?
The answer is simple – you can go creative with your own website and present the data in the format/order you want to impress the hiring crew. And, don’t forget to add a dedicated tab for your resume!
If you have some experience with front end development or are interested in learning, this is a great opportunity to showcase your skills. Otherwise don’t spend too much time developing it from scratch and simply use a website builder like Wix.
Back then, I used Github Pages and a free open-source template to get my portfolio up and running in a couple hours (I do not maintain it anymore so couple links might be broken).
5. Write That Cover Letter
A cover letter is an optional field in most job applications. But should you really leave that space empty? Absolutely not! Please do yourself a favor and write a kick-ass cover letter.
Be crisp and always try to tweak it a little based on the company and job role. “I can be a great fit for this role as I can print Hello World in all possible languages”. Lol just kidding, you get my point right?
You can also use contents from this cover letter in the body of emails or in-mails when writing to recruiters!
6. Participate in College Hackathons
For those who don’t know, Hackathon is a coding marathon where you hack (prototype) a project from ideation to a working demo.
It’s not only a great way to add another cool project to your portfolio (remember point #1), but also an opportunity to spend a weekend traveling to your dream US schools, network with students/companies, collect a lot of cool tech swag, savor those delicious free meals for the weekend and most importantly try to win something that can decorate your Resume!
Hackathons gave me massive tech exposure and played a big role in landing me a bunch of interviews including the one with Microsoft. Devpost is the perfect place to look up for upcoming hackathons. You can also check some of my projects for reference.
God, I miss college hackathons and just committed myself to write a full post detailing several tips/tricks to make the most out of college hackathons! Subscribe below if you’d like to learn.
7. Have a Plan For The University Career Fair
Well, this is the day you have been waiting for! The campus is filled with companies that are here to hire YOU! Students typically line up by the company stalls and wait for their turn to talk to a company employee who can be a recruiter, engineer, manager, or sometimes the CTO himself in early-stage startups.
In most campuses, the number of students to the number of companies ratio can be very high. This makes it very hard to visit all company stalls. So, you need to do your due diligence in order to make the most out of the career fair. Here are some tips:
- Prepare a list of companies you want to apply to in order of preference. Aim for your dream companies and also ones that are hard to reach by simply applying online.
- Most conversations start with you handing over the resume and then the company employee asking you – “So, tell me about yourself”. This is your opportunity to partially control the conversation by driving it in the direction you want. So, prepare a crisp high-quality pitch of ~ 1-2 minutes that includes one of your kickass projects (recall point #1 above).
- Research about the company and ask interesting questions if there’s time.
- Finally, don’t just submit your resume. If you think the chat went healthy and the interviewer seems interested, it’s a good idea to ask about the next-steps or try to get some point of contact … but don’t push it.
8. Apply to Companies Online
Now that the career fair is over, don’t stay in a fool’s paradise by applying only to your dream companies. It’s time to apply to all the remaining companies online (company websites, LinkedIn, etc.) to the extent that it starts feeling frustrating filling out those lengthy forms. I highly recommend you to create an excel sheet to track your applications!
Apply to companies or rather interview with companies in increasing order of difficulty. Top tech companies like Google, Facebook, etc are renowned for their high interview bar. You don’t want to mess up your chance by scheduling your first interview with them. Instead, practice your interviewing skills in companies with a relatively easier interview bar to get your mojo!
Getting LinkedIn Premium subscription for a month or two can come in handy when reaching out to potential recruiters or hiring managers!
Chances of getting a response from recruiters is way higher when you write to them during office hours, Tuesday – Thursday! Mondays can be busy for them and definitely avoid the weekends.
9. Use The Power Of Referrals
A good referral can increase your chance by tenfold to land an interview with that company.
So, don’t be timid and reach out to fellow alumni or friends by doing an advanced search on LinkedIn. Remember 2nd hop connections are better than 3rd hop ones. Send a connection request with a nice message that catches their attention (do NOT directly ask for a referral).
Even if you can’t get a referral, it’s a good idea to stay in touch with them which brings me to my last point.
10. Network Network Network!
Networking doesn’t necessarily mean expecting something in return (at least not immediately). Tech is a small world and you will surely bump into a few of them sooner or later.
- Attend Tech Conferences: One conference that particularly comes into my mind is the Grace Hopper Conference which is especially tailored towards encouraging women in tech. It not only gives a big opportunity to network with a lot of students and companies in tech but also opens up doors to job opportunities. A lot of tech companies interview and hire directly from these conferences! Apart from Grace Hopper, keep an eye on other tech conferences happening in your university, city, and country.
- Join Tech Meetups: Another great way to network will people in the tech industry is to attend tech meetups near you. Even better, if you can do a short talk on a topic you are comfortable with. It will open up doors to endless contacts and few might happily refer you for that awesome talk.
How to Crack The Coding Interview
Now that you have a plan to get a handful of interviews, it’s important to convert them into an actual job offer when they come knocking!
1. Start Your Preparation Early
I know MS in US can be overwhelming and you will have a lot on your plate especially in your first semester when you are getting accustomed to a myriad of new things. Trust me I know that feeling! But also take my word for it – you do not want to wait for an interview call to open your books for the first time!
I suggest you start the interview prep even before coming to the US especially when you are joining in the fall semester. This is because the career fair (hiring for summer internships) happens almost immediately after you arrive in the US. The big tech companies tend to hire early in the fall semester.. so expect most seats to be filled if you wait until the spring semester.
Besides, interviews for full-time roles are much more grueling than those for internships and a summer internship in your dream company may well convert to a full-time offer without any further interviews.
Starting your prep early is one of the keys to landing your dream job! Unfortunately, a lot of us take it for granted – even I did and had to struggle until the Spring semester to land my internship. The choice is yours.
2. Prepare For The Coding Interview
You can’t escape this … you knew it right? Coding questions involving data structures & algorithms comprises the major chunk of the interview process.
If coding interviews seem daunting to you, know that you are not the only one. However intimidating it may seem, a good plan can overcome it all and you will be back to speed in a matter of a few weeks.
Let’s first list the most important topics that one should study:
- Time and Space complexity.
- Array, queue, stack, linked list, binary tree, BST, heap
- Hashing & Hashmaps.
- Searching and Sorting algorithms.
- Recursion & Backtracking.
- String manipulation.
- Greedy Algorithms, Divide & Conquer.
- *Dynamic Programming.
- *Bit-manipulation.
- *Graphs.
*assuming you are preparing for the worst.
I am sure you must have already encountered these topics to some extent by now. But, the problem is that a lot of us are rustic and it’s very daunting at the best to even think where to start.
Consider taking the Algorithms course in the first semester of Masters to boost your interview preparation!
Study Resources
To begin with, I highly recommend Data Structures and Algorithms Made Easy by Narasimha Karumanchi! This book summarizes the fundamentals very well, followed by a variety of flavors of top interview questions (with solutions).
Only after you are comfortable with a particular topic (say linked lists) and solved a few questions from Karumanchi, you should jump to the corresponding topic on the most popular interview prep book Cracking The Coding Interview (CTCI). You will find some repeat questions which you may want to solve again (to practice) or skip them if confident.
After you have been doing the above for a few weeks and have gotten familiar with various topics, the next stop would be Leetcode! Leetcode has a collection of almost all the questions you will ever need to crack a coding interview. You can filter the questions by difficulty or by company name (very useful). Take a one-month subscription if you have to – it’s totally worth it. Try to solve at least 100-200 questions (although sky is the limit) across various topics and difficulty levels.
I would also recommend getting familiar with Hackerrank because a lot of companies use this platform for initial rounds of screening candidates.
Besides, you can also find some really great resources on GeeksForGeeks, and CareerCup. But, I don’t tend to jump around all of them – it can get overwhelming very fast. I simply use them as a reference for more interview questions, interview experiences, and better solutions to some problems. But if you have time, you can participate in several coding challenges organized on these platforms to get into the habit of coding for fun while practicing more problems!
Programming Language
Almost all companies will give you a wide variety of programming languages to choose from for coding interviews. So, your goal should be to get proficient in one programming language of your choice to the level that you can write complete code on a whiteboard or a piece of paper (without needing the smart code completion available on an IDE). For example – if your primary language is Java, you should be comfortable with the Collection Framework, stream I/O methods, and so on.
Unless you are applying for a specific role that requires a particular programming language, you should stick to this one programming language from the beginning for all your coding interviews.
3. Object-Oriented Design Questions
If you are a college grad, you can sometimes expect OOD (object-oriented design) questions. Here, you are expected to apply object-oriented programming concepts (like classes, inheritance, composition, abstraction, polymorphism, etc) into a real-world problem. They give the interviewer an insight into your style of programming. So, it’s important to not miss this during your interview preparation.
These questions often make use of the common design patterns especially Singleton, Factory, Builder, and Observer. So, I would highly recommend understanding these 4 patterns and how/when to use these. You don’t need to read all of them but it’s doesn’t hurt to browse through the list if you have time.
Some examples of OOD design questions are:
- Design an online shopping platform like Amazon or Flipkart.
- Design a movie ticket booking system like Fandango or BookMyShow.
- Design an ATM machine.
- Design an airline management system like Expedia or Skyscanner.
- Design a parking lot.
If you have time, check out this excellent course to master OOD questions: Grokking The Object Oriented Design Interview, which contains a detailed approach for the questions above and many more.
4. System-Design Questions
System design questions are meant to evaluate whether you can break down a seemingly complex open-ended problem into a simple, scalable solution. For example: design Instagram or design a URL shortening service.
These kind of questions are usually common for software engineers with 2-3+ years of experience and can be crucial in deciding both the level and salary. But, companies sometimes tend to throw these at new college grads as well.
However intimidating does a system-design question sound, it can be often easier to crack than a typical coding question. It’s because you are not expected to come up with a fancy algorithm or logic on the spot – most problems have a known set of approaches. That said, you need to take them seriously as they can be a big red flag on your computer science fundamentals. Interviewers will know if you are trying to BS them.
I very strongly recommend the course Grokking The System Design Interview to master system-design questions. It’s almost a no-brainer if you are a new grad and not very confident about these kinds of questions.
5. Miscellaneous Topics
While most of the interview rounds are about the coding and design questions discussed above, you should also know some fundamental software engineering concepts that are used by almost every software product and hence can be asked in a software engineer interview. Some examples are:
- How web services work?
- Database Systems
- Multithreading
- Digging deep into language-specific questions. For example, how is Hashmap implemented internally in Java?
Apart from technical questions, it’s a good idea to research the company and use the last 5 minutes of the interview rounds to ask intriguing questions that can show your interest in the company or team. Also, prepare a crisp pitch since some interviewers may ask you to introduce yourself.
Make sure you know what you write on your resume! This is very important as some interviewers like to dig deep into your past work or projects. Always try to sway the conversation in your favor by leading into strong areas you know well. If you find yourself in the dark with a previous project in some company, the NDA (non-disclosure agreement) can be your friend.
6. Plan Ahead And Practice
I know all this sounds like one herculean task at this assuming you are just starting your preparation for the coding interviews. That’s the reason it’s advisable to create a plan of action.
Based on the time that you have left before the interviews, split your preparation hours between the various sections above with ~60% focus on coding interview questions as they encompass the greater chunk of software engineering job interview rounds. For example, start by trying to solve 3 to 5 new questions in a day and gradually increase it to 5-10 new questions per day if needed. I will leave the elaborate scheduling to you. Also, don’t delegate these non-coding topics to the last couple weeks – try to find time for them in your daily or weekly schedule, along with the coding interview questions.
Check out these 7 Steps to Approach every coding interview question that greatly helped me formulate a robust plan to crack these coding interviews. It also talks about developing the following habits while you practice:
- Do not see the answers to the questions. Try to solve them by yourself.
- Mock Interviews with friends or use Pramp.
- Accuracy matters to some companies like Facebook. Using a timer can help simulate interview time pressure.
- Use whiteboard or a notepad to practice.
How To Leverage Job Offers
It usually takes the longest to get your first job offer. But, once you have it, you can leverage it to speed up the process in several ways and land some possibly better offers. Even if you have landed your dream job offer, you can wait and use competing offers to improve the Total Compensation (often jargoned as TC) in your dream company.
So, the moment you get your first offer, pat your back and pop a few champagnes. You deserve it!
But, don’t accept the offer yet. Dig into your excel sheet (and/or emails) for all pending interviews (of same bar or better than this company’s offer), that are lined up or may line up. Next, start contacting their recruiters (LinkedIn in-mails, email, etc.) requesting them to speed up the process given the offer you received and corresponding deadline to accept. In most cases, this will speed up the hiring process by tenfold.
In my case, it took me over a couple months to land my first job offer, but then only 2-3 weeks to get a few more! So, my advice would be to not settle on the first job offer after all this hard work – it’s your time to pick! Shop a few options and choose the one that fits you best.
Thanks for reading through patiently and making it this far. I know this is a lot of information but my hope is this article helps some of you look into the bigger picture and develop the necessary skills at the right time.
Landing that perfect dream job offer is more like a 5K marathon rather th an a 200m burst. So, start building some kickass projects that you can easily sell to the recruiters and slowly develop your coding mojo!
Please do share your progress with me and leave any questions you might have in the comment section below. You can also connect with me on LinkedIn.
I can’t wait to see some of your success stories!
2 Comments
Ashutosh Yadav
May 29, 2021 at 3:45 amThis is one of the best articles I have ever read on this topic. Thank you so much for writing such a detailed article, it’s really helpful!
Ankur Khemani
December 21, 2021 at 1:31 pmThank you, Ashutosh! Glad you found it useful. Good luck 🙂