I love writing code. When there is an issue to resolve and we are trying to figure it out, it doesn’t matter who comes up with the ultimate solution. We like to model Beacon’s culture on this approach, encouraging curiosity, transparency, and problem solving that scales and adapts as the company grows. Our focus is to find and nurture people who enjoy working this way, building our company with lots of interaction, collaboration, and a desire to get to the best possible results.
Growth and Granularity
When Beacon started, it was possible for people to be involved with and comprehend the entire software stack. As we grew, we eventually passed the point where that was no longer feasible and had to adapt to a more modular approach. There are now many parts to our platform, including infrastructure, networking, encryption, schedulers, containers, databases, and a growing set of front-office applications. We are also geographically distributed, with major offices in London and Tokyo as well as here in New York. So our emphasis, for code and for people, is to be super clear about interfaces and responsibilities without getting into micromanaging the details or creating too many restrictions. We hire well and trust our teams to do the right things. Of course, we also verify expectations and functionality during testing cycles. The goal is to encourage collaboration and make it easy for people on the other side of the interface to use what you have built. This way we build a broad team of subject matter experts who actively contribute their knowledge and expertise so that we all succeed.
Consciously building our culture requires acting with intent throughout the hiring process. One method that we use with potential engineering candidates is collaborative problem solving between the candidate and interviewer. We start with an open-ended scenario, such as a process that is running slowly, or competing enhancement requests. Then the candidate and interviewer work together and the interviewer observes how the candidate approaches the issue, their reactions to different inputs, and how they deal with a dynamically changing situation. The objectives are not to trap the candidate with “gotchas” or have them try to prove that they are smarter than the interviewer, but to evaluate their process and interactions. We have found that this creates an engaging interview process and is the closest we have come to simulating the day-to-day work environment within the constraints of an interview.
Elegance and Effectiveness
In a growing company there is plenty of opportunity to solve interesting problems, and there are many possible solutions. As a company where our code is directly connected to revenue, we typically find that the best solutions are also the simplest and most elegant. So we discuss, agree on, and promote an aesthetic sense for our code (and company-wide problem solving) that helps everything and everyone work better together. Like a symphony, there is a theme, variations on that theme, and it all fits together beautifully.
Top Down and Bottom Up
We like the fact that our culture is less about hierarchy and more about getting the best results. The people who are successful at Beacon see something that is causing trouble or that bugs them and take the initiative to research it and figure out possible solutions. When I want to talk to someone I will often read some of their code first to better understand how they typically approach a problem. Then I can have a more meaningful conversation with them. We also ask lots of questions about code and designs, encouraging full transparency up and down the organization. If you cannot clearly explain how or why you have implemented something, you probably don’t understand it well enough. This is not meant to embarrass people but to challenge them to communicate clearly and recognize their own areas for growth and improvement. And to ultimately produce the best product that we can.