What's the difference between a good software developer interview and a great one?
I am an ex-software developer, turned coach and entrepreneur. For the past 4 years, a substantial part of my role in the companies that I helped consisted of finding and hiring quality software developers to create great teams.
I know how hard it goes through an interview, especially for those who struggle with performance anxiety, such as myself. But taking part in more than one hundred of them and seeing both sides of the barricade helped me change my approach. And I hope that by sharing my framework and mindset, I can empower you to succeed in overcoming this as well. Let's walk together through the process and take your interview from good to great!
The interview is a two-way street. It is your first contact with a new workplace. In a way, you can think of it as a first date. And like on any first date you can fall into the dynamic of trying to make a good impression. You forget about what is important to you and strive for validation. You start to judge yourself based on the reactions of a total stranger. What are they thinking of you? Did I say the wrong thing just now? Why is he looking down? Do I have something in my teeth?
Don't go down the rabbit hole...
I believe the dynamic that you establish during the interview, and being aware of it, is key in lowering performance anxiety and getting the best out of yourself in a challenging situation. So how do you make sure that this interaction is a healthy one? How do you get the most out of the interview, and make an informed decision if that job is the best fit for you and your lifestyle? This brings us to the first tip, and that is:
1. Get to Know Your Environment
The best way to get out of your own head is to focus on your interlocutors. The interview is a social interaction above all else. It's important to understand if you are going to be working with the people interviewing you side by side for the next year. If not, who are they and how are they going to be related to you? Imagine that you are already a few months into the job, so you have to become aware of your surroundings and your interactions. You have to know your stakeholders, how they like to interact with others, what drives them and how that relates to what you want for yourself. Questions to think about are:
"How does the day to day job look like?",
"What would you expect from me personally to bring/deliver to the team?",
"How do you see an effective work relationship? Accurately fulfilling tasks, managerial style, self-ownership of tasks?",
"How does the team unwind?",
"Does the team have after work activities? Practice sports?".
I believe you can never underestimate what it means to spend 8 hours a day with the same group of people. You are immersing yourself into a culture, and that culture will rub off on you, so it's important to know if you have things in common, because this will affect your life. It will either take energy out of you or it will replenish your energy and make you enthusiastic and better at what you do.
Now that the first impressions have been made it is time for the technical assessment. This is usually done in front of a whiteboard or in an IDE. At this point, the dynamic will change again. Your interviewer becomes your client who has a problem he needs you to solve for him. At the same time, he will also play the part of your experienced team leader who knows what needs to be done, in case you get stuck.
Here are three things you should do that your interviewer will appreciate.
2. Scope The Solution
The first one is often overlooked and yet crucial when it comes to showcasing your experience: the ability to establish requirements. Let me clarify what I mean by that. The interview is timeboxed, so if you are asked to start by modeling a system, you don't have a lot of time to get things perfect. You have to find out what the client's priorities are regarding said system, a.k.a. the requirements. So, after the interviewer lays out the problem he would like you to solve, start asking questions. It's important to establish both the required functionality of the system, as well as the context. Because every design decision you make will have to be backed up by its technical advantage over other alternatives. This advantage comes from requirements such as: "What are the number of requests per minute?","How many read operations can we expect?", "How important is consistency?", etc.
3. Think Out Loud
The second aspect that is equally important, and equally overlooked, is your ability to communicate. Nothing speaks more about your experience than your ability to express what you are thinking. The more you communicate what you are thinking the better your interviewer can assess you and the more it becomes a conversation. It is very likely you might get stuck, or not have the optimal solution. That's ok! Acknowledging that you don't have an answer is a sign of strength, not weakness! If you come with argumentation on a possible solution or a point of view, it can open a discussion in which you will receive a helping hand! Be careful to only do this a maximum of 2 times. Any more will cause the interviewer to question your technical skills. Which brings us to our third subject.
4. Know Your Stuff
The backbone of the interview is your skillset, this is also the part we all focus on the most as developers. My advice: be prepared!
Just like an athlete, you have to put in the work at the gym - coding dojo - to be able to perform at your full potential on the court. Ask beforehand what you should prepare for the interview and practice online once a day at least an hour. This is especially important if you are aiming for exigent employers such as Google, LinkedIn, Facebook, Amazon. Timebox your work. If you can't figure it out in a set timeframe, check the solution, understand it and move on. Don't judge yourself, the small gains you make by understanding a new solution will really add up. Not only to your experience but also to your confidence!
And now we arrive at the last part of the interview: the checkout. A moment to reflect on what happened and how all of you experienced it. This is a golden moment for you to:
5. Ask for feedback
Going back to small gains, it's important to get that vital constructive criticism that you can use to improve. I know that getting feedback is tough. Especially if it wasn't your best day, it will probably sting, you will clench your fists and sweat a little. But don't forget that this is the golden nugget! The chance to get an outsider's opinion on how you approached the challenges. Some things to ask would be:
"What could I have done more?",
"I struggled here, how would you approach this in the future?",
"What did you appreciate from what I did?",
"What could I have done better?",
"What would you suggest that I work on more? Why?".
Honesty and transparency will go a long way in showing what type of person you are and how valuable you could be as a member of the team!