Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage Articles Top 10 Lessons in Building a Distributed Engineering Team

Top 10 Lessons in Building a Distributed Engineering Team

Key Takeaways

  • Set your hiring practices early-on, and optimize based on feedback
  • Establish a personal connection with your teammates from the first encounter, to maximize collaboration
  • Treat teammates equally, if one person is remote, treat everyone as being remote 
  • Create a casual asynchronous environment to foster communication amongst the team
  • Operate as small delivery teams to foster ownership and high-quality software

A diverse team is a better team. However, building a diverse team is no easy feat. At Doximity, we decided early on to cultivate a culture of inclusion. It was a priority for us to work with people who could bring unique perspectives and help us think differently. We recognized one of the best ways to do this was with a geographically distributed team.

Doximity only has one physical office. Yet talent, unlike office space, isn't bound by location.

Employing a distributed team not only allows us to connect with people who have distinct experiences, it also provides access to a hugely expanded candidate pool. Over the last six years, we’ve grown our engineering team from three to over 65 people, many of whom work remotely. In that time, we’ve also launched nearly a dozen successful internal and external products, all while keeping employee retention above 90 percent.

One poignant question that came up early on was: how do we communicate our core values to people who are not in the office? As it turns out, instilling the company's and teams' principles in remote employees actually is no more difficult than with local ones. We decided to bring people into the office for their first week. Additionally, we get together every quarter with the whole team for working sessions and team building activities. Culture is what you do when nobody's looking; for remote employees, that means a lot of opportunities to exercise the company culture. In our experience, we've found that shared values prevail regardless of physical location.

By now you might be wondering whether a distributed workforce is actually practical, and that's a valid question. How can you guarantee a culture that fosters innovation even though employees aren’t in the same room? In the past, companies often claimed that having everyone under the same roof was the only way to innovate. Nowadays, the story has changed. Innovative businesses like Basecamp, Gitlab, and Automattic have grown to be mature companies and make millions in profit while employing a fully-distributed workforce. Employees of Automattic– the company behind, Longreads, Simplenote, Gravatar, Polldaddy, and other popular tools– work from anywhere, and the company's team of nearly 500 employees is dispersed across 50 countries. This fully-distributed team built and maintains WordPress, a platform that powers 27 percent of the Internet. Companies like these are often outperforming their competition. Moreover, they'll continue to poach employees of companies refusing to adopt a distributed employment model. Here at Doximity, we’ve managed to create the world's largest professional network of U.S. clinicians, now with over one million verified members, something that has never been done before– all while working with a largely distributed team.

You may be intrigued by setting up a remote team of your own, but how do you get started?

  1. Set your recruiting practices: First, take a close look at your hiring practices. Over the years, we’ve chosen a few fundamental ground rules on hiring remote employees. When interviewing someone for a position outside of HQ, we focus on a few essential characteristics. The ability to self-manage is paramount, closely followed by precise and fluid communication, self-respect, and respect for others.

Working remotely does take a bit of time to get used to. Hiring someone with remote work experience goes a long way to smooth out the process. Whenever we speak with a candidate considering a remote position for the first time, we make sure to discuss the process and communicate pitfalls that other remote employees have encountered during the process.

We learned this the hard way. Early on, we hired a software engineer who had never worked remotely before. He underestimated the need for dedicated quiet office space and reliable internet. This seems like common sense, but with our lesson learned, we now reinforce these details during the interview. Several weeks into the job, he decided a remote environment was not for him.

  1. Establish a personal connection with your teammates: Establishing a personal connection as soon as possible is very important. We start this process with video interviews which allow us to meet the candidate early on. Numerous studies show the value of social connections. That’s why we ask new employees to spend at a minimum their first week working in the office. They get to meet the team based in HQ, have lunch together, and, most importantly, form a personal connection with their mentors. We encourage remote employees to visit the office at intervals that make sense for their respective teams. Separately, once a quarter we get together with the team for a few days to retrospect, share lessons learned, and plan for the quarter ahead. These quarterly off-sites allow us time for face-to-face team bonding experiences. From skiing to horseback riding, we've spent high-quality and fun times together that strengthen personal connections amongst teammates.
  1. Treat teammates equally: Over the years, we’ve seen and heard about many failed attempts at a distributed workforce. These can almost exclusively be attributed to failing to realize that, once you have one remote employee, you need to think of everyone as being remote. Ensure you can communicate asynchronously and that you enforce continuity of discussions independent of location. Even after several years we still encounter opportunities to reinforce this thinking. A couple of years ago I received feedback during a one-on-one with an engineer regarding a situation. He felt the collocated team would take the discussion that started online offline and then return with a solution, therefore excluding the remote employee from the process unintentionally. Be mindful land treat everyone equally.
  1. Virtual water cooler: Asynchronous communication allows us to filter distractions. However, it also filters out tonality and spontaneity– which are key components in the way we communicate with and understand others.  We encourage the creation of virtual water coolers around topics people find interesting; most of these are managed by those interested in the subject. Topics range from skiing to gaming to music. Conversations in these channels are typically not business related; providing a casual medium for discussions gives people somewhere to grow their personal connections. These chat rooms facilitate a comfortable place for people to bond, as they would otherwise do near a physical water cooler in the office.
  1. Focus on delivery teams: What about productivity? How do we know an engineer is going to be productive if we can't see them? This is a simple answer. Hire self-managing people, keep the teams small, and form product-focused teams. Each major product gets a dedicated delivery team. The team is composed of complementing skill sets necessary to ship the product to production. These delivery teams are a tight-knit group of 6-10 people who work closely together to build and deliver solutions. Each person on the team owns the overall quality of a small part of the product. This setup allows distributed groups of people to have clarity and ownership around what they’re building, which improves efficiency and lends itself very well to the distributed nature of the team.
  1. Leverage the right technology: Technology has come a long way. Twenty or even 10 years ago, it would have been impractical to employ a distributed staff, given the technology limitations. Today, video conferencing, screen-sharing, and mass adoption of asynchronous communication help us achieve this flexible work environment. Each company will end up adopting what works best for them, and every process takes a bit of experimentation. At Doximity we've tested about half a dozen solutions and finally chose a set of technologies we found to work best.
  1. Video conferencing: Our San Francisco office has 12 conference rooms, each one of them outfitted with a ChromeBox, conferencing system, and a large, wall-mounted TV. ChromeBox integrates directly with Google Calendar and makes joining meetings a breeze. Each invite automatically contains a video conferencing link, zero additional steps required. The ChromeBox enables screen-sharing during meetings, two-way video, and uses an omnidirectional microphone to make two-way voice clear to all callers. For larger conference rooms you can purchase a . We tried other systems before, namely Skype and HighFive, both which required additional software but for us, didn't provide smooth integration with Google Calendar.
  1. Asynchronous chat: Slack is our tool of choice, but there are many equivalent alternatives, such as HipChat and Stride, both of which are made by Atlassian. Even Facebook is trying to take a crack at it with itsWorkplace” tool. We've chosen Slack because it provides the integrations we needed to consolidate work into one platform. These integrations include alerting from our DevOps stack, calendar reminders, and automated auto-responders.

On top of that, the open development platform has allowed us to build custom integrations to facilitate our workflow. A good example of a custom integration is our “Lunch Bot.” Every other Friday the bot will allow employees to opt-in to a company sponsored, randomly assigned, five-person lunch group. This is a fun a way to foster conversation between people who wouldn't normally connect with each other on a regular basis.

  1. Screen-sharing: When it comes to enabling distributed communication, one of the more significant improvements in technology is certainly screen-sharing. Whether we're helping a colleague with a configuration issue, pairing on a difficult piece of code, or just sharing a presentation, the ability to quickly share the screen makes the whole process much more pleasant. Slack has voice calls and screen-sharing built in; it even allows either party to control the screen for one another.
  1. Voice Calls: Asynchronous text chats are efficient, but not always the most effective way to converse. We tested several tools for online voice calls and once again ended up going with Slack, since it was already such an integral part of the workflow. Slack gives us the ability to go from text to call, to screen-sharing, to video quickly and seamlessly. Tooling aside, it’s important to realize early and often when a text conversation would be more effective over voice.

There’s certainly a learning curve for establishing a well-rounded distributed culture, but the outcome is well worth the effort. For an environment to be successful, you must ensure the people you hire will perform well when left unsupervised; this means doing the right thing even when nobody's watching. Distributed employees must be clear communicators and share a similar sense of pride in the quality of their work.

We continuously collect feedback to improve the process. We've found this to be immensely helpful, increasing employee happiness, productivity, and retention. Take some time to fine tune your company's onboarding and mentorship methodology, and, most importantly, facilitate an environment which enables asynchronous communication to foster the diverse, distributed environment you want to create. As a leader, it’s your job to empower efforts where trust, collaboration, and creativity prevail.

About the Author

Bruno Miranda is the VP of Engineering at Doximity, a HIPAA-secure medical social network for healthcare professionals with over 70% of all U.S. doctors a members.  As VP of Engineering, Miranda manages the Software Engineering department. A first generation immigrant from Brazil, Miranda was fortunate enough to dive into computers at the early age of 10. It all started with an IBM XT 286 and he has been hooked since. Since the early 2000’s, he has spent most his time developing software and leading engineering teams. Miranda worked previously at Hoodiny, an partner, working on a personalized online radio. Bruno's Twitter: @brupm

Rate this Article