How To Land a Software Engineering Role

Failure

Around the middle of May 2019, I was talking with a fellow intern of mine at SAP. She is one of the most driven people I've met here in Melbourne and was wrapping up her Masters degree in Software Engineering. We were discussing the status of her current interview pipeline (which was amazing by the way, she had interviews lined up with Palantir and Google). After our discussion, I checked my calendar and realised something that still annoys me to this date: It's May 2019, and I haven't even considered applying for a graduate role at any company?!

I genuinely wasn't even aware that people applied to graduate roles nearly an entire year before they graduate. For some reason, I thought you'd graduate from your degree then start applying for roles. Of course, you can still do that (with little disadvantage apart from temporary unemployment) but most people would prefer to secure a job fresh out of university if they can.

I spent the next few hours after this realisation searching for graduate roles on all the job boards that I knew, but it was a vain and desperate attempt. Unfortunately, most applications open between January and March, and closed around April/May. For the companies that I did end up applying to, they were either already at the tail end of filling up their graduate roles, screened me out at the resume review stage, or I completely flunked their interview.

Here's a rundown of some of the higher-profile companies I applied to (that still had applications open) and how far I got through the interview process:

CompanyProgress
DeloitteResume rejected
REA GroupRejected after assessment center
AtlassianFailed Hackerrank (first stage)
GoogleResume rejected

I received no offers and I was set to graduate at the end of 2019.

What do you do when you fail?

Try again, but better.

I underloaded in Semester 2 and pushed my graduation date to Semester 1 2020. I intended to use this time to optimise my chances of getting a graduate offer for 2021.

Know the Rules

Many people, when they start looking for graduate roles, think to themselves

Finally, I have my Software Engineering degree! Now all I need to do is update my resume, look for jobs on Jora/LinkedIn/Gradconnect/Seek and apply to them.

This is deceptively simple, and will end up costing you down the line. You can think of the graduate job search as a sort of game, and you're trying to figure out the optimal outcome.

To maximize your chances of landing the best graduate role for you, you'll have to have:

  1. A thorough understanding of how tech recruiting actually works
  2. An idea of what the 'ideal' graduate role looks like for you
  3. A plan to get interviews
  4. A plan to pass interviews

In order to play the game, you need to know the rules. To understand why it's a 'game', it helps to think about the recruitment process from the perspective of a recruiter.

Thinking Like A Recruiter

Imagine that you're a recruiter at a big tech firm. Your task is to fill up 10 software engineering graduate roles for next year. You've set up a job listing on various websites and then wait a few months and let the applications roll in.

Let's assume that 70% of the ~1500 domestic software engineering graduates of 2020 (an estimate based on Telstra CEO's comments) apply to this role.

You now have 1000 or so resumes that you'd have to sift through. You could set out a week to manually screen each and every resume, and certainly some recruiters do so. This gets rather tedious though, and we've only considered local applicants. If international students are eligible to apply then the number of resumes you'd have to go through would skyrocket. Is there an easier way to sift through applications? With the help of technology, of course! Most employers these days use applicant tracking systems (ATS). When a candidate submits a resume through a platform it goes into the company's ATS. I'll talk more about this later.

With the help of an ATS, you've identified 150 or so 'top candidates'. There's a bit of an issue though, these candidates are very similar. They've nearly all graduated from group of eight universities with the same degree. Some of them say they've done internships, and some of them say they have great grades, or both! Some of them have mediocre grades, but have contributed meaningfully to open source projects. How do we decide between such a large number of candidates? Do we interview them all? How do we know what they've put on their resume is legitimate? Most tech recruiters have adopted one particular way to answer most of these problems: coding tests. I'll talk more about these later.

After you've established what candidates are/are not technically competent, you finally need to figure out what candidates would actually fit into the culture of your company. You'd do this through a behavioural interview.

The behavioural interview and coding tests generally hold a lot more weight over a resume, if you're lucky enough to those stages. This is a blessing for those who have prepared adequately, and typically means that you're on a level playing field once you've passed resume screening.

Getting an Interview

Resume

Beating the ATS

An Applicant Tracking System (referred to as ATS) is a type of software that helps recruiter sort through job applications. Lever and Greenhouse are two modern ones that I've come across in use by companies here in Australia. ATSs are typically used to rank candidates, or even worse (for applicants) filter them out entirely. They try to parse your resume, looking for keywords that the 'ideal' applicant would have. There are over a hundred different ATSs and most of them can be configured by the company to match their needs. A goal of yours should be to make your resume as ATS-friendly as possible.

Here are some useful resources that I discovered when I was fixing up my resume:

Personally, I made my resume in LaTeX. If you haven't come across LaTeX before, it is a fantastic typesetting system that a lot of people use these days, especially the math and computer science people in academia. Your lecturers almost definitely use it, as it gives documents a much more professional look. This LaTeX CV template is a very popular one.

Once you've optimised your resume for ATSs, I highly suggest you ask your friends for feedback and points of improvement, especially those that have done an internship or are currently where you want to be. I did this, and also used Rooftop Slushie's resume review service. It cost me only $20 and I received actionable feedback from a current Google employee.

Referrals

Referrals are hands down the best way to get your resume seen by a recruiter. It definitely doesn't guarantee an interview, but knowing you got past the ATS will be a relief.

Getting a referral depends on how many people you know. Throughout university, make friends with bright students. Later on, these students will have had strong internships and can vouch for you through a formal referral to their employers.

If you don't know a friend, or a friend of a friend who may be willing to give you a referral, there is another way to get them. I consider it quite unethical, but it exists and people use it nonetheless: Rooftop Slushie Referrals.

I received referrals to REA Group, Atlassian, Google, Microsoft and Facebook. As expected, I managed to get past the ATS with all of these companies. Oddly enough, the offer that I accepted wasn't from any of them. Getting a referral is definitely not the be-all and end-all.

Career Fairs

Your university, or a university club, will likely organise career fairs throughout the year that bring in a number of companies. These companies are there to literally advertise their graduate roles and internships to you, so don't forget them! Yeah, the line for bigger tech companies might not get you anywhere as they'll likely tell you to apply on their careers site.

However, if you come across some smaller, local companies that somewhat interest you, strike up a conversation! These companies may have really good graduate/internship programs that you just might've not come across. These conversations can lead to genuinely interesting ones with engineers, and even an email that you can reach out to later!

Reaching Out To Recruiters

If you have no other avenue to get your resume seen, apart from a regular application, reaching out directly to recruiters might just be worthwhile. Your success with this may be low, as it depends on good timing, quality of your email/message, and how impressive you are as a candidate. Having a well-prepared resume is a prerequisite to this, obviously. The two common ways to reach out to recruiters is through LinkedIn and by email.

Finding recruiters on LinkedIn is fairly straight forward, just type in "University Recruiter at Company" into the search bar. Recruiters might not have that specific title, but LinkedIn search should be smart enough to include variants such as "Talent Engagement" and "headhunter" among others.

Finding recruiter emails is rather non-trivial. Asking friends who have had contact with the companies you want to reach out to is probably your best bet. Guessing their email based on their first name, last name, and company name may also work. If all else fails, you might find some success using services such as Clearbit Connect or RocketReach.

The quality of your email will determine how effective it is. There is no perfect formula, but just keep your email short. Here's a message I sent to the Head of Recruitment at a company that lead to an interview:

Hi XXXXX!

I connected with you late last year as I was reading up about the culture at XXXXX and realised that I would be great fit. I'm about to graduate from The University of Melbourne this year, and I just saw two new Graduate roles were just posted on XXXXX's careers page: Graduate Software Engineer (Java Backend) and Graduate Software Engineer (JavaScript Frontend).

I've never seen job descriptions apply to me so well, and I thought I should let you know that I've applied for both of them.

Thanks for your time, 

- Rohyl

Expect to be ignored by many recruiters, it'll hurt less when it inevitably happens.

Coding Tests

There are two main types of coding tests in the recruitment process. The one you'll come across earliest is the online assessment. This is typically conducted on a platform such as HackerRank, but I've seen companies like Google use their own platform. The second coding test is the phone screen. The 'phone' screen is usually a video call with a company employee where they give you a programming problem to solve. You solve the problem on a platform such as HackerRank CodePair. If you manage to get past the online assessment and phone screen, you'll likely be invited for another round of interviews (typically in-person ones) that will be conducted in a similar fashion to the phone screen.

Not every company will follow the exact same structure. Canva's initial phone screen, for example, had me answering questions about Java concurrency and multithreading hypotheticals over an actual phone call.

One thing that is practically universal to all big tech companies is that the questions they ask will test your knowledge of algorithms and data structures (ADS).

Here are some questions to help you gauge your current proficiency:

  • Can you code a depth-first search and breadth-first search from the top of your head?
  • What is a stack?
  • How about a queue?
  • When would you use one over the other?
  • What are the two types of ways to handle bucket collision when implementing a hash table?
  • What is the worst-case time complexity for binary heap insertion?
  • What is backtracking? In what situations would you use it?

If you can't answer most of these questions without having to look it up, you're very likely not prepared for many of the technical interviews you will face. Graduate role interviews are on the easier end of software engineering technical interviews, but it's better to be overprepared than underprepared in this situation.

Don't underestimate the amount of preparation you will need. Even the brightest students that I know have had to set aside many hours to brush up on their ADS skills. In total, I spent over 50 hours between November and February re-learning all relevant data structures and completing ~200 problems on Leetcode. I struggled a lot at the beginning, but it became quite fun towards the end.

Resources:

A lot of the resources linked are primarily targetted at experienced software developers. They go through mostly the same technical interview process that graduates do, with slightly harder questions. As such, technical interviews for graduate roles might be much easier than what you prepare for.

Preparation Books

There are two good books that I'd suggest for anyone practicing for an ADS based technical interview: Cracking The Coding Interview and Elements of Programming Interviews. CTCI is more popular than EPI, but I much prefer EPI as the problems they present are more challenging, and the solutions are much cleaner too.

Leetcode

Leetcode is the most popular platform to practice coding interview questions. It's really all you need to put your study into practice and track your progress. I highly suggested working yourself up to completing most of this list:

There are other platforms you might want to look into such as HackerRank and InterviewBit, though I would suggest sticking with Leetcode if you're new to this.

You should follow some sort of structured plan to upskill yourself. For me, this was spending at least 2 hours a day (on average) reading through Elements of Programming Interviews and solving problem on Leetcode. This leetcode grinding guide really worked well for me, and I would suggest it to anyone just starting out.

Most leetcode problems will have multiple solutions, some more optimal than others. You should be able to determine the time/space complexity for every solution you develop, and also be able to discuss tradeoffs. Your interviewers will definitely want to know these things.

YouTubers

There are a number of YouTubers that I learned a lot from during my preparation.

These can complement your regular leetcode grinding quite well.

The Human Element (Pramp)

Grinding leetcode in silence will get you quite far in passing the online assessment. However, in your phone screens you'll still be communicating with another person, and you should be comfortable with that. Interviewers care about more than your ability to code up a correct solution to their problems. You could code the most optimal solution for a problem, but if you don't communicate your thought process and talk with the recruiter you'll likely get rejected.

Pramp is a free online peer to peer platform designed for praticing technical interviews. You get matched with other engineers based on your availability and you take turns interviewing each other with a problem that is given to you (Pramp has many problem sets). It is a live environment with video chat and a collaborative coding editor. I did two interviews through Pramp, and honestly should've done more, as they are very worthwhile. My actual phone screens were run very similarly to that in Pramp. Not using Pramp is a mistake if you're not fully confident in your ability to articulate your problem solutions.

Behavioural Interviews

Behavioural interviews in tech recruiting aren't much different to your stock standard behavioural interviews. There's not much I can add here that isn't plastered all over the internet, except this relatively unknown guide that I was very fortunate to stumble upon:

Failure

Expect to fail sometimes. Embrace failure, and most importantly, learn from your mistakes. Despite all the preparation I did, I had interviews pulled on me due to COVID-19 slowing down or stopping the hiring processes for many companies, including Google, Microsoft and Facebook. Although my preparation wasn't able to manifest itself in interviews with those bigger companies, it did help tremendously to allow me to secure offers with companies that were still hiring here in Australia.

There is a lot of luck in the interviewing process, but there are also many factors that are in your control. Prepare well, and everything should turn out fine.