The key to acing your next interview, regardless of the position, is to be prepared: study the company, understand the tech stack, have concrete examples of your experiences and accomplishments, and most importantly, be yourself! Written by a Tech Recruiter and a Senior Developer, this article will provide a mental roadmap to help you prepare for software engineering interviews, from both a technical and cultural fit perspective. While our article is based on interview practices and expectations at SSENSE, we believe that our approach can be applied to help you land your job, wherever that might be.
Hard Skills and Technical Knowledge
No two interviews are the same; every interviewer has their individual preferences, style, and favorite topics. Some could be more practical, others more conceptual. Here is our guide to preparing for software engineering interviews. Keep in mind that we have focused on the skills we look for at SSENSE, which deals primarily in high-level, object-oriented software. Depending on the niche and position that you’re interested in, other topics may take precedence.
While various programming paradigms have waxed and waned in popularity over the decades, Object-Oriented Programming (OOP) has steadily improved its position as the dominant paradigm in enterprise grade software engineering. Concepts like Abstraction, Inheritance, Encapsulation, and Polymorphism are the pillars of this paradigm, and it’s imperative that you have a clear understanding of why they exist, how they work, and how you should leverage them to build software.
We should mention that, for some positions, Functional Programming (FP) knowledge might be more pertinent. Even though OOP and FP are two different programming paradigms, they are usually not mutually exclusive, and are complementary in many ways.
Recognizing problems that can be solved with previously designed solutions is very important in software development. Why reinvent the wheel when there’s already a proven, robust solution available? We believe it’s important to prepare a repertoire of specific patterns as well as examples of situations when you applied them. Also be prepared to elaborate on why you considered your patterns of choice to be fitting in your specific cases.
We recommend focusing on S.O.L.I.D principles as they offer several benefits in terms of maintainability and extensibility in software. Understanding and applying them has almost become the norm when building scalable and timeless object-oriented software. Being able to describe each one of the principles and having some real-life examples to support them might come in handy. Keep in mind that a well-reasoned and clearly explained description would be considered just as acceptable as, for example, the textual definition of the Liskov Substitution Principle.
Data Structures and Algorithms
An SSENSE Data Engineer once wrote:
“Mastering the interface of a programming language with no theoretical knowledge of algorithms and data structures is a bit like being very good at English and having nothing to say.”
A thorough understanding of both data structures and algorithms is fundamental for every programmer. Consider them tools used to solve problems with software, regardless of the platform, language, and framework you’re developing on. While white-boarding, you will also have to solve algorithmic problems and use data structures in your solutions, so bring your A-game.
A Software Developer’s role is not only to write code, but also to ensure its quality. This can be achieved in multiple, mutually non-exclusive, and automated ways. There are many language and platform-specific tools and frameworks to build automated software tests, but in the end, it boils down to two main types: White Box tests versus Black Box tests, each one having its own responsibilities and goals. Knowing how to write successful tests is an important stepping stone to building quality software.
Interviewers and hiring managers look for engineers with analytical thinking and problem solving skills. White-boarding sessions and algorithm quizzes are the best ways to assess these competencies. Demonstrate your drawing skills, but not just for doodling! Use the white-boarding session to showcase your thought process and ideas visually. After all, a developer should be able to not only code, but also to share their knowledge.
Key takeaway: The white-board is your best friend so use it as often as possible throughout the interview.
Soft Skills and Culture Fit
When interviewing someone, aside from evaluating technical capabilities, the real question that we, as interviewers, are asking ourselves is “do we see ourselves working well with this person?”. We love to ask questions about previous experiences and interactions to understand how you tend to react to certain situations. Your past experiences and behaviours tend to be a good measure of how you will react in the future.
Mark Murphy wrote a book which propagated “Hiring For Attitude” and training for skills. Skills are something that everyone can learn given the right environment and the right teacher. Conversely, it is very difficult to alter someone’s attitude. Therefore, your drive for self-improvement, openness, and curiosity for learning can set you apart from other candidates. Competencies such as collaboration, adaptability, initiative, and problem solving are all qualities that make you stand out in a pool of equally talented candidates.
Soft Skills, Step By Step
Considering the understandable initial interview jitters, this can sometimes be especially difficult for some. Keep in mind that you and your potential future employer are essentially looking for the same thing: a mutual fit. There is no point in portraying someone else during the interview, only to land in a role that does not match your values, skills or overall passions.
Key takeaway: stay cool — you’re not performing open-heart surgery and even if you were, you still need to stay cool.
First impressions are lasting ones. Think of your first interview as a first date. You want to put your best foot forward and to feel at ease, confident, and prepared. Showing a sincere interest in the company and the role can take different shapes and forms. A good way to do this is to be prepared with some post-interview questions for the interviewer or hiring manager. As Matthew Corcoran, an SSENSE HR Manager once said:
“going in blind to an interview is like the ‘Bird box Challenge’ — highly inadvisable and outright irresponsible!”
Offer real-life examples.
All recruiters and hiring managers will appreciate candidates who back up statements with previous real-life examples of projects, key metrics, and explanations of the successes and failures they encountered. Sometimes, being able to identify the reasons for your failures is just as important as succeeding on the first try.
I once met with a junior developer who, despite not having all the required years of experience for the role, demonstrated how determined she was by being thoroughly prepared for the interview. It started at the phone screen stage; I could hear her passion radiating through the phone. During our face-to-face interview, the candidate took out her laptop to show me a demo of a project she collaborated on and explained her role in great detail. I was able to instantly gauge the candidate’s strengths and weaknesses, and recognize her accomplishments in the work she was showcasing.
Key takeaway: The job description can give you specific insights concerning the work you will be doing, but more importantly, it also outlines the soft skills the company is looking for.
Demonstrate passion for your work!
Passion is a quality that all employers search for in talent. This is a trait so rare that when found, employers tend to go to great lengths to retain these employees, because they usually become the high performers of the company.
To gauge a candidate’s level of passion for their work, we like to ask questions like: “What motivates you to get out of bed in the morning?”, “What environment do you thrive in the most?”, and “What drives your passion?”. Asking these questions allows us to understand a candidate’s overall professional enthusiasm from different perspectives. This helps us understand what motivates them at their core.
After all, isn’t the ultimate goal for developers to love what they do and where they do it?