As a Senior Software Engineer and manager of the Backend Crew, Jonathan Cone leads the team responsible for FlightAware’s primary customer-facing APIs and individual feed processors.
Some of the most important decisions we make at FlightAware are deciding who will become part of our company, team, and culture. Our company was founded by aviation geeks and big data nerds, organically bringing in people from diverse backgrounds who have a passion for aviation, software, and the services we provide. FlightAware’s success has been driven by its employees and their commitment to the quality, reliability, and innovation of its products. We strive to provide an interview experience that will identify talented candidates and sell them on the benefits of working here. It’s a continuous process to fine-tune and improve the hiring process, and we have a team of people dedicated to that endeavor. In this post, I’ll introduce the overall interview process with an emphasis on the technical interview.
The Interview Process
Most candidates submit their resumes to FlightAware following the directions on our individual job postings. This acts as the first hurdle for applicants as we ask them to submit their resumes by POST request to a URL with their information in a JSON payload. While not all candidates will be working on the web frontend, knowing how to submit a POST request to an HTTP server is considered a minimum bar for entry.
Once a resume is received, we start tracking the candidate’s progress and pass their information onto that group’s hiring manager. The hiring manager reviews the resume to gauge interest and applicability of skills for the role in question. They may also refer the candidate to another team if the skillset doesn’t match that team’s needs. Following the resume review, the hiring manager will decide if we should initiate the interview process.
The first step in the interview process is a screening by the HR department. During this typically 30-minute phone call, the candidate will be questioned to determine if they fully understand the role and have researched the company. This is our first opportunity to gauge culture fit, genuine interest in the role, and to rule out any non-technical disqualifiers. Candidates who have spent some time researching the company, and the role they are applying for, typically do well here.
Once past the initial HR screening, we set up a technical phone or Zoom screen with the candidate. You can see an overview of that process here. The questions we ask during this screening are selected and curated by a group of engineers at FlightAware. We spend a non-trivial amount of time reviewing the process and the questions, proposing new and refining existing questions to ensure that we can identify the strongest candidates. There is a mix of small algorithmic and real-world problems. Our intent is not to trip anyone up by providing trick questions or problems that only the most nimble and versed their language's nuances can solve. We want candidates to demonstrate how they approach solving problems, reason through questions, weigh the benefits and drawbacks of possible solutions, and verify the correctness of their response. The code developed during the interview is not compiled, but rather reviewed and discussed.
I’ve quoted the “on-site” portion of the interview here because we’re not currently holding interviews on-site, but rather conducting them all remotely.
The “on-site” process begins with another technical interview challenge which lasts up to 90 minutes. This time the candidate will be asked to solve a programming problem similar to something we might deal with at FlightAware using a programming language of their choice. In the remote setting, we use Amazon’s Cloud9 IDE in AWS to facilitate the exercise as we’ve found it to be largely reliable, configurable, and it supports a wide variety of languages. We expect that the candidate’s code will compile and produce a correct result.
Again, while we expect that the candidate will produce quality code that solves the problem, a broader focus is on how the candidate approaches the problem. It behooves a candidate to talk through their solution, approach, and articulate any issues they are struggling with so that we can better make that determination. In the absence of that insight, we might pass on a candidate who just made a simple mistake but never expressed their thought process, leading us to believe they were weaker than they may really be as a developer. Depending on the candidate’s experience and position for which they are applying, there may be some follow-up questions to to probe their breadth of experience and knowledge further. This interview serves as a go/no-go decision point for the candidate. If the candidate performs well here, they will continue with the process, and if they fall short, we will stop the process.
The remaining portions of the interview consist of meeting with managers, peers, and leadership at FlightAware as we continue to evaluate cultural fit, behavioral characteristics, overall interest in FlightAware, and sell the candidate on the position. The interviews’ ordering may vary, but generally the first meeting will be with the hiring manager (and potentially team manager). This interview typically focuses on behavioral questions and assesses the candidate's motivation and interest in the position and company. Here you can expect questions about successes and failures in past employment, exposure to agile development practices, and experiences working in a team environment. There may be some high-level technical questions during this stage to further suss out a candidate’s level of experience with some technology.
The candidate will generally next meet with one or two peer members from the development team. The peer interviewers will show the candidate some of the projects they are working on and products they are responsible for. The idea is to show a candidate, as much as possible, what it’s like to actually work at FlightAware. This is a good opportunity for a candidate to engage and ask questions about our development process to better understand the role and what the day-to-day work looks like. At this point, we’re both trying to sell the applicant on the role and continuing to evaluate interest and exposure to development practices. There should be many opportunities for a candidate to talk about past work and how it is applicable or not to something being undertaken at FlightAware. When the interview process was happening in person, the candidate would have lunch with a group of developers during this phase of the interview (however we haven’t opted to do a virtual lunch with candidates as that would probably be overly awkward).
The final stage of the interview is a meeting with the leadership of FlightAware. Historically this has consisted of a meeting with the VP of Engineering followed by a meeting with the CTO. They most likely have communicated with those involved in the interview earlier to gauge performance and will be striving to make the last sales pitch to quality candidates and the final evaluation stage. These interviews are typically about 45 minutes each. The interviews typically pose some additional behavioral questions and high-level discussion about what environments in past positions have worked well for them versus those that have not. This also serves as an opportunity for a candidate to ask questions and get to know the company from a broad perspective from those responsible for the larger direction of FlightAware.
At that point, the interview is completed, and the interview team will meet to discuss the candidate’s performance and hopefully decide to make an offer!
The Best Candidates
Here is a list of common traits among the candidates who have done well and been extended offers.
You might think this to be an obvious task that everyone undertakes before attending an interview, but we find it to not always be the case. Even those who prepare diligently for the interview's technical portions may not have spent time understanding what the company does or what the role may entail. This is frequently exposed in the questions, or lack of questions, asked by a candidate. Spending some time exploring the website before attending the interview will ensure that you have at least a high-level grasp of what FlightAware is and what we do, which hopefully leads to some interesting questions about how we manage flight tracking.
For the technical interview, there are a myriad of resources available online to help job applicants prepare for technical interviews. Spending some time on those sites is likely to increase the odds that you perform well. The questions asked during interviews may seem artificial because they are unlikely to have a 1:1 relationship with the work you do on a daily basis or in school. Our questions are limited in scope and designed to give us insights into your thought process. We could give take-home problems with larger scope, but that would not address this key interview requirement. So, spending a little time familiarizing yourself with the types of questions asked in interviews is likely to put your mind more at ease and help you feel comfortable during this high-stress period so you perform at your best.
Finally, candidates who have spent time thinking about the types of behavioral questions that arise in interviews are, not surprisingly, better prepared to answer those questions. It can be challenging when in the heat of the moment to come up with examples of times you failed or disagreed with your boss that showcase your ability to work through a difficult environment or relationship. That’s not the sort of thing you want to wing because you may find on reflection that your response didn’t cast you in a favorable light (e.g., I just bashed my former boss in front of my new prospective boss. We don’t know you or your former boss well enough to establish who was in the right or wrong, so it’s unlikely that is going to score you any points). The task of preparing for an interview is critical and requires the same dedication you bring to your work as a developer. Those interviewing you have not known you for years, so while preparing can feel like a job unto itself, failure to do so will be perceived as a lack of seriousness on your part.
Deliver Effective Communication
The best engineers at FlightAware are also excellent communicators. Candidates that demonstrate this ability are more likely to succeed at the company. The types of problems we are solving require the collaboration of multiple individuals and teams. For those efforts to succeed, all individuals involved need to be able to effectively communicate with one another. Therefore, as a candidate, we need to see that you possess that ability as well. Ensure that your responses to questions are reasoned and concise, addressing the full topic without becoming a filibuster. Convey your past contributions to significant projects espousing your technical understanding of the problem and its solution.
Some are aviation enthusiasts, while some are just passionate about software. During the interview, let the enthusiasm you possess for software engineering and our industry shine through.
Go apply for a job with us! You may be thinking, “The interview process at FlightAware seems a bit daunting.” You’d be right. We’re serious about interviewing because a bad hire is not good for anyone involved. With that, however, we’re not looking for nor expect perfection in candidates. If you’re genuinely interested in a career here, spending the appropriate time to prepare for the interview is critical. We’re also constantly working to improve our interview process to ensure that each and every candidate has a positive interview experience. We’re always looking for the next addition to our team.