Software Engineering is an incredibly rewarding and satisfying career choice. On a daily basis, you get to flex your creative muscles to solve complex problems across a vast array of industries and domains. You get to work in an incredibly diverse space, with continuous learning opportunities at your fingertips.
Getting a foot in the door, however, can be difficult. The bar is high and there is a lot of competition.
At times, the process can feel overwhelming. You find yourself immersed in recruitment phone calls, screening sessions, multiple final round interviews, and in most cases, working on a take home test in your own time.
Hopefully, at the end of this lengthy process, both you and the company have swiped right, and can live happily ever after, but how can you get to yes?
Having spent many years interviewing engineers at all levels, you begin to identify patterns of success, and antipatterns to avoid. What I would like to do is to give you my own recommendations of how you can maximise your chance of reaching the first rung of the ladder.
We won’t dive too deeply into any particular languages or tools, but instead we will focus on general guidance that should be applicable to most entry level software engineering positions.
I mentioned some stages of a typical hiring funnel in the opening section. Every company will be slightly different, and depending on their scale and size, the funnel might be bigger or smaller, but here’s how it might look.
You will begin with a coding exercise. If successful, you will then speak with somebody in HR to learn more about the company and the role. The next stage might be to speak with the hiring manager - at which point you will learn more about the team and the domain that you might expect to be working on. Moreover, this round is typically assessing culture and team fit. If successful, multiple final round interviews will probe deeper into specific topics such as data structures and algorithms, general technology and knowledge. If all this goes well, then it proceeds to the offer stage.
The end to end process covers a lot of ground.
As Desmond Tutu once said
“there is only one way to eat an elephant, and that is one bite at a time”.
This advice holds true. Take the interview process one bite at a time. Ask the recruiter what to expect in each session, and what success looks like.
Take time to prepare for each. Jot down questions that you would like to ask, or key points that you want to communicate.
A good hiring funnel will not contain any superfluous rounds, and each one is assessing or focusing on different aspects.
Know what to expect with each round, and prepare for each.
Promote Yourself and Your Projects
Most candidates for this role will not have much, if any, professional experience, and typically are coming straight from college or from a conversion course. As a result, you will not be selling your past roles, but instead, this is an opportunity to sell your projects and achievements.
As a hiring manager, I love to see an active presence on Github - highlighting the side-projects and apps that you have built or collaborated on.
A well presented project not only demonstrates technical acumen. A good README showcases your written communication skills.
If there are other participants involved, it shows me that you can collaborate with others.
Shine a spotlight on what you have created. Tell me about the problem that it is solving, the challenges you encountered, and how you overcame them, and the value that the project brings. This hones in on your business acumen and your ability to identify problems and solutions.
Sidenote: If you are not yet contributing to projects on Github, then I would recommend checking out GoodFirstIssue.dev which helps you to make your first open source contribution by curating issues that are suitable for beginners.
Interview the Interviewer
I always tell candidates that interviews are a two way street, and that they are assessing me just as much as I am assessing them. As interviewers, we are representing the company and the team. Ask us questions. Here are some great questions that I often get asked by candidates.
- Why do you enjoy working here?
- What’s the hardest part of your job?
- Tell me about something that you learned recently?
- Why should I work with your team?
For me, this shows enthusiasm, and demonstrates that the candidate is invested in the process. The company and the team need to be a good fit for the candidate, and vice versa.
I want you to come away from the interview wanting to work with us, and to help get you to that mindset, I will be as open and honest as I can be.
Understand the Question
I find this tip to be most needed for the collaborative coding / data structure stage. During this round, the interviewer may ask you to extend your take-home test, or to implement something completely new. It is very important to make sure that you completely understand the question that is being asked. If something seems ambiguous, seek clarification. If it seems straight forward, then repeat aloud what the ask is (this can be an effective pulse-check to be 100% sure before proceeding).
In his book, System Design Interview – An insider’s guide, Alex Xu describes a four step framework for tackling system design exercises, and whilst the examples in the book will exceed the scope of a junior role, the principles are the same, and should be applied to any technical round.
- Understand the problem and establish design scope.
- Propose high level design and get buy-in.
- Deep dive / Implement.
- Wrap up.
Communicate and collaborate with the interviewer at each step.
Think Aloud / Remember Maths Exams
I struggled with Maths during school, and spent many hours getting tutored before exams. One piece of advice that always stuck with me was that
by writing out the steps that led you to the answer, you will get some credit. You might not get 100%, but you can get some of the way there.
The same advice goes for technical interviews. Think aloud and vocalise your thought process. This shows me how you tackle problems, and it also creates an opportunity for collaboration.
As engineers, we work collaboratively with our team to decompose big problems into smaller solutions, and therefore, being able to clearly communicate your analytical thinking is a soft-skill that carries clout.
Feedback (Ask and Give)
This is one that I cannot stress enough. After all of my interviews, I prepare a short feedback section that can be shared with the candidate.
It does not indicate the outcome, but moreso, it provides some recommendations to the candidate on areas where they can further their growth.
It might include topics to explore, books to read, or areas where they demonstrated strength. This is especially important when a candidate will
not be progressing to the next stage.
Having invested a lot of their time in the process, we owe it to them to provide meaningful, actionable feedback.
Similarly, tell the recruiter how you found the process. By giving the company feedback, we can continue to refine and improve things for the next candidate.
I’m not looking for a ninja 🥷. I’m not looking for a rockstar 🤘. I am looking for a genuine person who wants to help my team to build great things,
and will work hard on learning software engineering methodologies and best practices.
In return, I will provide you with a great team environment, the necessary amount of coaching and mentoring, and challenges that will help you to grow as an engineer.