The ultimate 6-step guide to landing a Software Engineering role in 2022
The difficulty of securing opportunities today cannot be overstated. This concept applies to all sectors except Technology, where there are countless opportunities for us all.
The availability of jobs within the tech sector continues to rise at a rapid pace in spite of the COVID-19 Pandemic and other factors influencing the global stage. According to Business Insider, there is a significant skills shortage within the tech industry. Examples of such skills include engineers who are either: proficient in building user interfaces, possess a natural ability in crafting scalable backend services or can provision infrastructure for large scale applications in an automated manner. If these sound interesting to you, now is the time to take your career to the next level!
After 3 years of both interviewing developers and undergoing the interview process myself, I’ve developed a process that will place you in the ultimate position when applying for jobs.
I’ve supported numerous friends/colleagues from all backgrounds, ranging from self-taught to senior engineers with a CS degree in either securing their dream jobs, negotiate better salaries or empower them to attend their coding interviews with confidence. Now? Those said friends are either working for unicorn start-ups or tech companies.
You are the one who has the valuable skillset that companies need, and you’re the one in control.
To be candid, preparing for interviews take time and effort. The purpose of this guide is to focus your time and effort to enable you to stand out from the crowd during the application process. Not to mention, having the prerequisite knowledge and intuition to be successful in your interviews. I’ll start off with some general tips:
- Consistency is key. You’d want to begin studying as soon as and as frequent as possible. Preparing one hour a day is far superior to studying seven hours on a Sunday.
- Remember that everybody is different and there is no one-size-fits-all approach. So feel free to deviate or pivot from this (or any other) guide.
- Keep grinding, the more you grind, the more you’ll progress closer to your targets.
- Embrace failure, use each failure as a learning opportunity.
PS: I may use the terms dev/developer/engineer/[add buzzword here] interchangeably. Also, I will try my hardest to refrain from framework/library specific tips as this guide serves as a fundamental base which can be used by any engineer e.g. mobile, full-stack, frontend and backend.
PPS: Whilst this article may have a focus on coding interviews, going through this guide will also make you a better developer in general. If you enjoy learning, continue reading!
- This article is aimed at individuals applying for developer roles at tech companies.
- This article is aimed at individuals who want to become more knowledgable in the field of software engineering.
I want you to take a moment to think about why you are reading this article.
Why are you looking for your next role?
Why do you want to become a better engineer?
Now that you’ve got your answer. Never forget your why. Let this be your catalyst and let this answer motivate you to achieve what it is you wish to achieve.
Typically there are two fundamental steps people take when looking for their next roles:
- Applying for jobs
I will share some inside knowledge in what you need to do before you even apply for your next job.
You will need to grind. By grind, I mean study hard.
Before you apply, you will have to be at your A game.
Think about it. When sports professionals have finals or big games coming up. They start preparing months in advance. Some even adjust their lifestyles!
Anthony Joshua is understood to be worth over £300million but still ensures to keep things basic and live off the bare essentials to retain full-focus in the lead up to fights.
Assuming you work full-time I would recommend giving yourself about 4–6 months of self-study before your final game (The Interview).
Companies tend to look for candidates with the strongest coding abilities, and they assess technical skills mostly on conceptual understanding, not memorisation.
Ultimate 6 Step Guide:
If you haven’t done any coding interviews for quite some time, I’d recommend reading through the entire section from start to finish. Below I will outline some of the things you need to do to become a better engineer and in turn stand a better chance in your interviews.
Step 1: Decide on a programming language
Assuming you come from a software engineering background, I’d suggest you stick with a language you are familiar with rather than picking up a new one just for your interviews.
Also, If you are under time constraints, picking up a new language just for interviewing is hardly a good idea. Languages take time to master and if you are already spending most of your time and effort on revising/mastering algorithms, there is barely spare energy left for mastering a new language. If you are familiar with using one of the mainstream languages, there isn’t a strong reason to learn a new language just for interviewing.
Once you have selected your language, watch some refresher language-specific videos on YouTube and/or read the documentation for your chosen language.
Step 2: Study
If you have been out of studies/bootcamp for a while, it is highly advisable to review Computer Science fundamentals such as Distributed Systems and Data Structures/Algorithms. Personally, I prefer to review as I practice, so I scan through my notes and review the various algorithms as I work on algorithm problems from LeetCode.
Step 3: Master Data Structures & Algorithms
At tech companies and high-growth startups, coding and systems design interviews are common — and fairly standard. Systems design interviews are more relevant for mid level and above positions, while coding (data structures and algorithms and problem-solving) will be an interview type you can expect at all levels.
Learn about the different Data Structures (Arrays, LinkedLists, HashMaps, Stacks, Queues, Graphs and Trees) and understand how they actually work under the hood.
- Watch videos on Big O Notation, Time & Space Complexity.
- Watch a few videos on how memory works in computing e.g. when you create a variable, how does this get stored in memory? what actually happens behind the scenes?
- Practice coding algorithms using your chosen language. While books such as “Cracking the Coding Interview” are great for learning, I prefer being able to type code, run it and get instant feedback. There are various online platforms available such as LeetCode, HackerRank and CodeForces for you to practice questions online and get used to the language. From experience, LeetCode questions are the most similar to the kind of questions being asked in interviews whereas HackerRank and CodeForces questions resemble competitive programming questions. If you practice enough LeetCode questions, there is a good chance that you would have seen/done your actual interview question (or some variant) before.
- Plan. Plan. Plan. When working on any coding problem, whether it be for work or interviews, always think about the inputs, outputs and then the processes required to get your output i.e. never dive straight into writing code without a having a plan/idea.
Step 3: Master Systems Design
In a System Design Interview, interviewers typically ask candidates to design a large scale application that could potentially have millions of users/requests. For example, they might ask you to design Monzo, design Netflix, design Trainline, design GoogleDrive or others.
This interview will typically be a free form discussion (almost like a chat with a friend). There is no right or wrong answer. This is simply a chance for you to demonstrate your knowledge.
The best way to think about this stage is to treat it as if the interviewer is your colleague and you’ve both been asked to design a large scale distributed system. You’re simply just fleshing out requirements, understanding the problem, and then working towards providing a solution.
Some engineers have never actually worked on large-scale systems before, so having to explain how to build one may seem daunting. And because system design interview questions can be so open-ended, it is hard to know the right way to prepare.
In order to have a great chance at this, you should learn System Design from systemsexpert.io.
Familiarise yourself with computer science/distributed systems concepts such as the client/server model, networking protocols, storage, latency and throughput, load balancers, caching, replication, fault tolerance, publish/subscribe patterns, message queues, event-driven architectures, polling, streaming, security, API design, peer-to-peer networks and much more.
Step 4: Master the topics below
I’d recommend researching and learning about the following concepts. Try to dive deep into the different topics and get to a point where you can comfortably teach it to a baby:
- Data Structures & Algorithms
- Systems Design
- Functional Programming
- Object Oriented Programming
- SOLID Principles
- Big-O Notation & Complexity Analysis
- APIs: HTTP, REST APIs, GraphQL vs REST, Microservices vs Monolith
- OSI Model: a conceptual framework used to describe the functions of a networking system.
- Agile vs Waterfall
- Cloud Concepts: DevOps, IaC, CI/CD, Pipelines, AWS/GCP/Azure
- Testing: ensure you have the ability to write meaningful tests in your chosen language. Familiarise yourself with the following — different types of testing (unit, integration, system tests, contract tests, api testing, performance testing, regression testing), test development lifecycle, text execution, test case development, test planning
- Deployment Environments: E.g. dev, test, staging, prod
- How do you take features from requirements to production?
I have provided links below in the resources section. These links cover all of the topics I’ve mentioned above.
Step 5: Build your online presence
So many established developers are already getting people’s attention online, so why should you even try to get out there? Well, because you can and because it will help you in so many ways. For example, you will rank better on Google, so when recruiters search your name, they will find your work quickly. Next, you will get noticed! Having a discussion with other professionals can help you learn and find a job opportunity that’s the best for you. That’s why having a blog and online portfolio is essential in IT world.
- Share personal projects on GitHub
- Make meaningful connections on LinkedIn
- Document your learning process on Medium
Step 6: The behavioural interview
Behavioural interviewing is a technique that assesses a candidate’s ability to meet the job requirements based on their previous experience
You can prepare for these questions by applying the STAR format when giving your answers, ensure you demonstrate company values in each answer and provide data/metrics to highlight the impact of the thing you’re describing.
Typical topics/questions that may arise in this phase:
- Tell me a time where you resolved a conflict in your project?
- Tell me about a time when you mentored someone?
- Tell me about a time where you went out of your way to improve something?
- Walk us through a time when you helped a customer through a difficult process and what that looked like?
- Tell me a time you took on something significant outside of your area of responsibility?
- Why do you want to work for X?
- Tell me about a time you failed?
- Tell me a time when you earned trust of a group?
- Tell me about a time you dove deep into a project?
- Tell me a time when you overcome an obstacle and delivered the results?
Once you’ve completed the above, it’s time to implement your newly-acquired knowledge into practice.
Interviews are generally standard and widely documented. There is a plethora of resources available to prepare for the coding interview as well as a growing pile of systems design resources.
It’s easy to get lost in so much information: which is why you should make a plan on how you will get “interview-ready”.
Create a study plan with topics you want to revise for the interview you’re expecting to have. Learn the theory and then supplement it with exercises, where you can create something from scratch e.g. implementing a data structure or building a message broker service.
The tech sector is ubiquitous with individuals complaining about the difficult interview process. That being said, the meritocratic nature of this sector means that an individual with no university degree nor connections, can secure employment with household brands like Google, Uber, Monzo, Trainline, Skyscanner, Amazon and others.
Tech interviews being uniform across the sector makes preparing for such endeavour, a highly-rewarding activity which undoubtedly will be leveraged. Following your preparation, make sure your software engineering resume grabs the attention of the recruiters.
If you are looking for a central place to revise, here are some resources:
- React Projects via abdirahmancodes (recommended- FREE): https://www.instagram.com/p/CNDsDSUHrxB/?utm_medium=share_sheet
- Idea: Build a full-stack app, containerise it using Docker and then deploy it onto EKS, GKE, AKS, Minikube or K3d.
- Cracking the coding interview
- Design of everyday things
- Clean code (recommended)
- The Pragmatic Programmer
Data Structures and Algorithms:
- AlgoExpert (recommended — PAID) https://algoexpert.io — The BEST Data Structures and Algorithms course online. This course goes through Data Structures fundamentals, then proceeds to challenge you with interview-like programming exercises.
- Leetcode exercises (recommended): https://leetcode.com/discuss/general-discussion/460599/blind-75-leetcode-questions. A curated list of the most common programming challenges you will encounter.
- CS Dojo YouTube: https://youtu.be/bum_19loj9A
- geeksforgeeks: https://www.geeksforgeeks.org/data-structures/
- The Algorithms and Data Structures Interview Crash Course (PAID), a course on Educative which is estimated to take 12h to complete
- AlgoMonster, one of the most efficient ways to study and practice for coding interviews
- Master the Coding Interview: Data Structures + Algorithms on Udemy (PAID)
- DSA Revision — Free 100-page PDF with question patterns and example questions
- SystemsExpert (recommended- PAID): https://systemsexpert.io
- Gaurav Sen YouTube: https://youtu.be/xpDnVSmNFX0
- System Design Interview: https://www.youtube.com/watch?v=bUHFg8CZFws
- Microservices: https://microservices.io/patterns/microservices.html
- API / REST API: https://www.redhat.com/en/topics/api/what-is-a-rest-api#whats-an-api
- GraphQL: https://graphql.org/
- HTTP / HTTP Methods / Status Codes: https://developer.mozilla.org/en-US/docs/Web/HTTP
- Basic client/server request: What happens when you type in ‘www.cnn.com’ in your browser?
- Containers: https://www.docker.com/resources/what-container/#:~:text=Containers%20are%20an%20abstraction%20at,isolated%20processes%20in%20user%20space.
- Docker architecture: https://docs.docker.com/get-started/overview/
- AWS DevOps Whitepaper: https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/welcome.html
- WDS SOLID Principles: https://www.youtube.com/watch?v=dJQMqNOC4Pc
- React useState() hook: https://www.youtube.com/watch?v=kkuq0gTGRFQ
- React useEffect() hook: https://www.youtube.com/watch?v=UVhIMwHDS7k
- React custom hooks and useRef() hook: https://www.youtube.com/watch?v=nshyjApIovo
- Webpack: https://webpack.js.org/
- Build your CV: https://resume.io or https://flowcv.io