Simple 4 step guide to land any software engineering role in 2023
Do you want to start applying for software engineering jobs? Are you currently unsure where to start when it comes to interview prep?
After 3 years of both interviewing developers and undergoing the interview process myself, I’ve gained insights in what needs to be done to make yourself a strong candidate when applying for jobs. I’ve received offers from Amazon, Booking.com, Starling Bank, Trainline, IBM and several other tech companies.
I understand that interviews can be daunting, and that people are often unsure about expectations. In this article, I’ll point out things you can do to make yourself a very strong applicant in your next interview.
Step 1 - Prepare
Before even applying for your next job, you will need to spend some time preparing. And by preparing, I mean you must study really hard.
Before you apply, you will have to be at your A game.
First step to landing your next job, is to plan for it. Whether it be a promotion or an external move, you must plan for it. Identify what skills you need to demonstrate/possess in order to succeed in the role you're interested in.
A good friend of mine, who is currently a CTO and was previously a senior engineering manager at Twitter, Amazon and eBay, advised me to build a skills map. Identify what skills and experiences a job spec requires and build those skills.
Step 2 - Learn Data Structures and 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 - Learn 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 - Build practical experiences and be able to demonstrate impact through behavioural questions
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.
Common questions may include:
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?
Conclusion
Hopefully, this guide has given you some direction with regards topics to cover during your interview prep. One final thing, I’ll add is that you should always learn and be curious. Deep dive into topics you’re unsure about, always insist on the highest standards when doing coding exercises!
Good luck!