How To Get a Software Engineering Job: A Step-by-Step Guide
Getting a software engineering job is nerve-racking. There’s something about coding interviews, or technical interviews, that is particularly challenging and heart-pounding.
Even with a Bachelor’s degree in Computer Engineering and a graduate degree in Computer Science, I shudder at the thought of the tech company interview process.
It doesn’t help that the stakes are very high: the coding interview is the one thing that stands between you and a six-figure salary…
…and you could be asked about anything from algorithms to design patterns to data structures to all of the above.
Your nerves will likely get the best of you.
Even the brightest candidates will show signs of anxiety.
You’ll find that preparation is key to reducing your nerves and keeping you calm.
In this post, I’ll explain to you, step by step, how I went about preparing for these interviews with the hope that you’ll come out more relaxed and confident in your abilities.
As a disclaimer, I won’t have space in this particular article to go very in-depth in each topic, but I hope you can use this as an organizing tool to know what you should research on your own.
Before anything, we’ll start at the beginning: how can you get that first interview?
1. How Do I Get an Interview?
I’ve found that there are generally 3 ways people get their first interview with a company.
- The Most Common Way: You can reach out and apply online through the company website or a job board (Indeed, LinkedIn, Glassdoor, Monster, etc). The deciding factor for an interview would be your resume.
- The Easiest Way: Many software engineers get interviews through referrals, where recruiters reach out based on a recommendation from someone that works at the company already. The deciding factor is your friend’s status in the company.
- The Online Way: Recruiters can also find you, reach out to you, and ask to schedule an interview. This usually happens when they read something impressive about you online. The deciding factor here is your professional online presence (LinkedIn).
Let’s start with the most common method of securing interviews: your resume.
Perfecting Your Resume
On average, a recruiter will look at your resume for 7 seconds before deciding whether or not to move forward with it.
In those 7 seconds, the recruiter needs to know the most important details about you to determine how well you’ll fit at this company.
Sections of your resume:
Every resume that I’ve seen has the following categories
- Personal Information:
- University Name
- Graduation Year (i.e. May 2016)
- Degree (i.e. B.S. in Computer Science)
- Relevant Courses (i.e. Operating Systems, Databases, etc.)
- Work Experience:
- Company Name
- Your Title (i.e. Software Engineering Intern)
- Start/End Date of Employment
- Work Description
- Describe what you accomplished rather than what you learned (use numbers if possible)
- Every experience should have 2-3 sub-bullets
- All text should reach the end of the line (if it overflows to the next line, it should reach the end of the second line as well)
- Projects (separate from company projects):
- Same as Work Experience above
- Honors and Awards (academic awards, publications, conferences, etc.):
- Title of Award
- Date Received
As applicants, we are expected to fit all of this (our entire professional career) onto a traditional 8.5 x 11" PDF with 11-12pt font.
We’re usually in one of two categories:
- There’s too much content and not enough space
- There’s too little content, and it doesn’t matter how much space there is
I have too much experience!
If there’s too much content due to a large number of internships or career changes, you will need to evaluate what experiences pertain most to this job and will seem most impressive for this job.
It is often more impressive to go in-depth on one work experience than to write general statements about two experiences. However, you may have to factor company prestige into the equation.
Recruiters are swayed heavily by company status. That’s why the terms “ex-Google tech lead” or “ex-Facebook product engineer” even exist.
I don’t have enough experience!
If there’s too little content, then it usually means that you don’t have enough official work experience, which is completely fine.
Everybody started here at some point.
But remember, there is a Projects section of the resume. This section is where most applicants who are just starting to enter the workforce shine.
There are 3 routes I took when I was just starting:
1. Take Project-Oriented Courses
As a college student, it definitely helps to take project-oriented courses. These would be classes that require you to focus on a single application for a good chunk of the semester.
When you leave, you will have something to show for your work, and it can go on your resume! Just be sure to document your process along the way so you don’t forget anything important.
2. Work on Interesting Side Projects
I want to emphasize that the word “interesting” is very important here.
It is very difficult to stay motivated with your side projects if you’re not genuinely interested in them.
I personally love to combine my love for software engineering with a hobby of mine. This is the easiest way for me to stay disciplined.
That is the beauty of this field.
Computer Science can mold itself in any form.
At my university, there was a CS+X program, where you major in Computer Science with a focus on its application in another field. Some examples were CS+Math, CS+Statistics, CS+Chemistry, CS+Anthropology, etc.
This goes to show that there is always a way to apply your love for software to your love for something else.
It could be an app that helps you write music, a fitness tracker, an investment calculator, etc.
It doesn’t necessarily need to be original at first, but be sure to continue building on the idea to make it something you’re proud to put on your resume.
3. Apply Everywhere… but Strategically
Yes, you do want to apply to a lot of companies.
But you want to apply for positions that suit you as a student or entry-level engineer.
For freshmen in college, there are many companies that have internship programs tailored specifically to underclassmen.
For fresh grads, there are Junior Developer and Entry-Level roles that are designed specifically for you.
Just know that your first job is always the hardest to get.
From there, it gets exponentially easier. That first internship or first job will open up doors to bigger and better opportunities in the future.
These are all tips I’ve used myself to perfect my resume. That being said, a resume alone may not be enough.
A great way to supplement your resume is with your professional network.
Perfecting Your Network
Professional networking is all about building relationships with people who are in the same profession as you. This could be other software engineers and maybe even managers at tech companies.
This is especially helpful since these people can give you referrals.
This is the fastest and easiest way for you to land an interview. The credibility that this employee has is transferred to you when they refer you.
In college, this network is formed through classes and internships.
Be sure to be friendly and as helpful as you can to those around you. You never know when you can help them or they can help you in your career.
All it takes is a friendly message on Facebook or an email explaining your situation and asking for a referral to a company they work at.
More often than not, they’ll be flattered that you asked them, so don’t hesitate to try!
Another way to perfect your networking is by perfecting your online presence.
Perfecting Your Online Presence
Online presence usually refers to professional online presence.
It is a form of online networking.
LinkedIn has made this process easier than ever.
You can build connections on LinkedIn, ask for advice from other engineers, and learn about the experiences of those with more experience.
LinkedIn also acts as an online resume with more functionality. You can link to demos of your projects, receive endorsements for relevant skills, and even provide more in-depth descriptions of yourself and your goals as a software engineer.
You receive a certain level of credibility when you have a complete LinkedIn profile.
This is especially useful since many recruiters search LinkedIn for the perfect candidate. Their job is to find the right software engineer for the job.
I personally have not gotten an offer through LinkedIn, but I know of many that have. Be sure to read testimonials on how this happens!
Perfect that resume, build those relationships, complete that LinkedIn profile, and you’ll land that interview in no time.
Once you’ve done all you can to get the interview, all you can do is wait and prepare for the coding interview.
2. How Do I Prepare for the Coding Interview?
There are generally two types of interviews that you’ll come across: behavioral and technical interviews.
A behavioral interview is not necessarily guaranteed for a software engineering position; however, I do know that some companies love them, such as Amazon, so be sure to briefly go over them.
A technical coding interview, however, is guaranteed for most tech companies.
I would recommend spending 90% of your prep time perfecting your coding interview skills.
It’s stressful to figure out what to study for coding interviews because there’s a lot, but I’m here to simplify all that for you!
Here are questions you can expect for your interviews:
Questions: Data Structures and Algorithms
These are definitely the most common questions in technical coding interviews.
If you’re in a Computer Science program, you’ll learn about these in your first two years of your Bachelor’s.
It is by no means easy, but it is considered the baseline for all technical coding interviews.
You will likely be tested on some of the following:
- Dynamic Programming
- Linked Lists
A solid understanding of these data structures and their applications will most definitely help you write efficient algorithms during your interviews.
Many interviewers will only ask data structure and algorithms questions and stop there.
But the System Design questions are starting to become more and more popular nowadays, so we’ll discuss those next.
Questions: System Design
The system design interview helps evaluate your ability to design large scale systems.
These types of questions are quite diverse.
Depending on the position you’re applying for, your system design question may relate to topics such as distributed systems, networking, or operating systems.
Common questions may ask about virtual memory, caching, etc.
Those are the two kinds of interview questions that applicants spend most of their time.
While not typically considered part of the technical interview, resume questions do help recruiters evaluate your technical understanding of projects listed on your resume.
Before every interview, I like to refresh myself on my side projects and course projects from years ago.
It’s never a good excuse to say, “I don’t remember because I worked on this project a long time ago.”
In order to circumvent this, I like to keep notes on every technical aspect of the projects on my resume in my Google Drive.
One of the most popular resources for coding interview prep is Leetcode.
They provide a plethora of coding interview questions labeled by both topic (Algorithms, Database, Shell, Concurrency, etc.) and difficulty (Easy, Medium, Hard).
Once you select a problem, you’ll be greeted with the problem description (to the left) and your text editor (to the right).
When you submit, Leetcode will run your code against multiple test inputs, which will determine whether or not you pass.
In order to help you, Leetcode provides a forum for each question where users can discuss solutions and their efficiency.
You’ll never be left in the dust.
This is all available for free by Leetcode.
There is also a premium subscription for $35/mo that allows you to do things such as study problems from specific companies.
I don’t personally use the premium option for Leetcode, but the free version is very helpful for sharpening my coding skills.
Resources: Cracking the Coding Interview
Cracking the Coding Interview is a classic when it comes to data structure and algorithm questions.
It is written from the perspective of Gayle Laakmann McDowell, an ex-Google, Microsoft, and Apple engineer.
She provides almost 200 interview questions as well as solutions for each problem.
It has taken me weeks to get through and understand every single problem in that book, which are all in Java.
It is definitely worth the time and effort, though.
Resources: Grokking the System Design Interview
The last resource I have for you is Grokking the System Design Interview, which is helpful for, you guessed it, the system design interview.
It provides a high-level introduction to each topic in the basics of large scale distributed system design problems and is a great tool to understand what you should research for the interview.
If you don’t want to spend any money, this GitHub repository is a great alternative to improve your system design knowledge.
3. What Kind of Technical Interviews Are There?
The technical interview can come in many forms, namely, the phone, live coding, and on-site interview.
Since the phone interview is usually the first step in the process, we’ll start there.
Your recruiter will contact you by email to schedule a time to call.
During this time, make sure you’re in a quiet area and that you have headphones. It can be a pain sometimes to hear what the recruiter is saying over the phone.
A phone interview can include behavioral questions, technical questions (no coding), or coding questions.
They may ask you about yourself and your goals as a student. This could be considered behavioral.
They might ask you about Computer Science fundamentals (i.e. the advantages of object oriented programming). This would be considered a technical question without coding.
Or it could be a traditional live coding interview, which we’ll talk about next.
Live Coding Interview
These live coding interviews can happen over the phone or over some video calling platform such as Zoom, WebEx, or Skype (rarely).
In these interviews, the interviewer will give you a question that you need to solve by writing code.
Be sure to talk through your thought process and ask questions to clarify the problem statement.
State your assumptions about the problem so that the interviewer knows the reasoning behind every decision you make.
If all goes well, then you will be invited to the final stage: the on-site interview.
The final round. Congratulations on getting this far!
This is still a technical coding interview, just like most phone interviews and live coding interviews.
This time, you are interviewed face-to-face. It’s more personal and can be more engaging than over the phone or video chat.
It makes communicating much easier and coherent.
Generally, with on-site interviews, you’ll meet with 3-6 engineers that vary in experience levels.
Some interviewers will grill you on your resume. Others may ask difficult programming problems. It’s pretty different from company to company.
You may get 10-15 minutes between interviews to take breaks, but overall, it’s a non-stop 4-5 hour rollercoaster ride.
In order to prepare, you want everything to be as perfect for you as possible so that you don’t have any distractions. Think about doing the following:
- Prepare everything the night before (backpack, phone, clothes)
- Be well-rested (a full night’s sleep)
- Arrive at the office early (no chance of tardiness means more anxiety)
- Smile :)
Throughout this entire process, they’re evaluating your attitude towards others and your behavior.
They want to know two things:
- Can this applicant complete the job competently?
- Is this applicant someone I would want to work with?
So don’t forget to smile when you greet them.
During the actual coding interview, be sure to follow the same notes as in the Live Coding Interview section.
When this day is over, there is nothing more to do except to thank the recruiter and your interviewers.
Time to relax!
When your results come back, try to evaluate your performance, especially if it comes with feedback from your interviewers.
Try not to be discouraged by rejections.
Every interview makes the next one easier, so one day, you’ll be amazing at interviewing, which will mean you’re amazing at getting job offers.
Keep studying and practicing!
Work hard, and everything will turn out okay in the end.
Good luck :)