There have been quite a few posts lately offering advice on popular interview practices. All of them offer excellent insight, however what has thus far been left unspoken is the importance of hiring the right people for your company. I'd like to share with you how Braintree looks at the hiring process, and how we leverage a variety of techniques to help us find people that were right for us.
Who are you? Who do you want to be?
Every company has an identity, a set of values that ultimately affect how the company is perceived. Is your company reliable? Innovative? Are you the premium solution in your space, or do you aim to provide the lowest cost for your customers? Are you focused on financial growth or industry admiration? What matters to you? Collectively, your people form the identity of your company, and each new person changes the company's identity, even if only slightly. It's important to be mindful of this change when you're growing your team.
There are two aspects that should be considered when evaluating a candidate in regards to your company. The first is how their values align with your values. Do your developers favor speed of delivery over code quality, or vice versa? What's your approach to testing? How important is communication and collaboration. If the candidate doesn't feel as strongly about the things that your team values, and if you hire them, over time those values will diminish. You have to decide if that's okay.
The second aspect is the team dynamic. How would the new person interact with the team? Will they gel with your developers and lead to a large productivity increase? Or will they add tension and possible conflict, reducing morale and productivity? Maybe you need a bit of fresh conflict, to challenge the existing values of the team.
While it's unlikely that any interview process, no matter how long, will provide the kind of confidence in a candidate that you'd like, there are a variety of ways to assess interviewees towards your goals. It's very important to note that every company is a snowflake, and while there are many qualities that would make a developer a strong fit for almost any company, it's your unique combination of values and work styles that determine what interview practices will be most effective.
Braintree's Identity
As a company, we set our bar very high when it comes to providing service and supporting our customers. When we have a chance to work with them, we want them to come away feeling like it was the best customer service experience ever. Sometimes this interaction is via phone or email, and other times it's through our documentation, gateway, and API. We have a low tolerance for poor experience, and we want every new person we hire to help maintain the high expectations we've led our customers to expect from us. So to that end, we seek people who are never satisfied that "good enough" is good enough, and who will work diligently to continually improve our offering. All of our other values are important because they support this one.
Communication is naturally very important to us, even for our developers. We make it easy for our customers to get help directly from our devs, and we expect every one of them to be able to handle support tickets efficiently, courteously, and with enthusiasm. Effective internal communication is more frequently needed, talking to other developers as well as non-development team members.
Collaboration is crucial to the success of larger efforts. The more effectively people are able to work together, the more effectively they're able to get things done. We value collaboration very highly, and continually work towards removing barriers. Nearly the entire company works from a large, open room. We hate cubicles and we share desks. We love to pair program. We have folks who work remotely; sometimes that's the only option and we make the best of it, but we know we're much more effective face to face.
We also believe that morale is extremely important. Happy developers write great code. It's important that our people have what they need to be successful, and that includes peers that they can count on to get things done with the same level of quality they'd expect from themselves. Our devs want to work with other exceptional devs. That's not surprising of course, but the impact of having even one or two developers unable to carry their fair share of the load can cause a remarkable impact to morale.
Of course talent is very important and can't be overlooked. At Braintree, we believe building great teams is more important than individual rock stars. I guess you could say we're essentially trying to build a rock orchestra here. While we do have very high expectations for developers from a talent stand point, talent alone will never exempt a candidate from the other values.
Our Interview Process
Pretty much all interview processes involve some form of initial screening, and we're no different. Once an applicant contacts us, we schedule a phone call to share a bit more about ourselves, ask a few additional questions, and generally gauge if the candidate is a culture fit. Would they be happy here? Are they looking for the type of work that we'd ask them to do? Do their values align with ours?
Code Review
Developers that pass the initial screen are provided a coding problem. Sometimes candidates self-select out of the process at this point, which we feel generally works in our favor. Developers who believe in the values we express in our job postings won't allow a few hours of development time to be a barrier to an opportunity to work here. Our coding problem is straightforward and we accept solutions in any language. While we always look at code candidates have published on sites like Github, solutions to our own coding problem help us to compare candidates who are solving the same problem.
Even though the problem is simple, every solution is slightly different, and gives us a fair bit of early insight into their approach to software development. Do they write tests? Test first? How did they tackle the problem? With patterns? Strong OO? Something original and clever? Did they leverage the features of the language to produce something elegant? Does their code communicate its intent to the reader? While the evaluation can be somewhat subjective, it remains a valuable tool in learning more about the candidate, and helping us decide if it's worth pursuing them. Ultimately we want to know if they value quality the way we do, are excellent at communicating via code, and have the kind of talent we like.
Phone Interview
Following the code review, we interview candidates over the phone. We try to keep the call to between a half hour to an hour, and cover as wide of a variety of topics as we can. To help keep us moving through the call, and to provide some consistency, we work through a list of questions we've prepared in advanced and reuse for each candidate. The questions are technical and we try to keep the conversation informal. This is our first real opportunity to evaluate the candidate's communication style. We probe much beyond what a resume can say and try to determine what the person's technical strengths and weaknesses are. If we feel they communicate effectively and have the skill levels that we're looking for, we invite them to a full-day, on-site interview.
Technical Interview
The first stage of our on site interview is basically an extension of the phone interview. While the phone interview focuses on a breadth of subjects, the discussion during the technical interview looks for more depth. We'll ask questions based on responses from the phone interview. We probe a candidates strengths and weaknesses further. Communication is always a factor, but we're primarily assessing technical competency. The candidates we like tend to have some decent depth in a few areas, and have strong opinions and ideas about software practices and technologies.
Lunch
Applicants join us for lunch when they interview, and it's a great opportunity for casual discussion. We love to hear what sort of side projects they have, what they do for fun. We ask a few friendly technical questions too. We're still evaluating communication, but more how they gel with the team. We want to know how we'll enjoy having them working with us everyday. It's important that new hires fit with us culturally, as it affects morale.
Logic
After lunch, we like to spend some time working on logic problems. The logic problems are non-trivial, but there are no tricks. They're chosen because solutions can be arrived at through reasoning and deduction. While they're artificial in nature, they remain a good representation of the complex problems that we're challenged with in daily work. Real businesses have complex problems that need to be solved, and we have to be good at tackling them collaboratively.
While we want to know that the candidate understands the solution when we get there, finding the solution is not nearly important as how they attack the problem itself. In fact, every candidate always gets to the solution. We coach them along when they seem to get stuck, half-collaboratively solving the problem with them. We ask them to talk through the problem solving and offer them a whiteboard. We're assessing ability for abstract reasoning along with how they communicate and collaborate.
Pairing
The final portion of the on site interview is a pairing session, where we work with them to enhance the code they submitted at the beginning of the process. This is our best opportunity to evaluate their collaboration style, and get a sense for how they'd be to work with on a day to day basis. We try to keep it as informal as possible. We've had plenty of opportunity prior to the pairing to hear them talk about software development, and this gives us a chance to see them in action.
And...
As you can see, we've constructed our interview process around our values. Our process has evolved over time, and continues to be refined and adjusted when things don't seem to be working as well as we'd like. Our approach to designing our interview process has worked very well for us. Your results may vary.
If you're interested in experiencing our interview process first-hand, we're always looking for exceptional developers of all experience levels to join our team. Check us out at joinbraintree.com. We'd love to hear from you!