Tips for building, managing, and maintaining engineering teams in a remote-first environment
As a result of the current health crisis sweeping the world, we are a society that has gone virtual overnight.
For many companies, engineering teams that were tightly connected in shared workspaces are now suddenly dispersed, adjusting to a new way of working together.
While we’ve previously written about some of the most effective ways we’ve learned to work remotely in general, we also want to share some of the things we’ve learned that are unique to distributed engineering teams.
How do you pair program virtually? What about code review? Even finding the right time for daily standups can turn into a case of calendar acrobatics.
At Thorn, we’ve been able to build a remote-first, fully distributed engineering team working across functions on multiple products with great results. But it didn’t happen overnight. We’ve been remote since the beginning of Thorn 8 years ago, and we’ve been compiling our learnings ever since.
We asked our Head of Engineering, Sarah Walker, how she approaches managing an effective engineering team in a distributed environment. Joining the Thorn team last year with a background in scaling organizations, Sarah brought a wealth of knowledge to help the practices we put in place for 15 people to be able to work at 50, 100, or however many it will take to succeed in our mission to eliminate child sexual abuse material from the internet.
Thorn’s approach allows the engineering teams at Thorn to build and maintain products, like Spotlight and Safer, that are enabling tech companies and law enforcement to address online child sexual abuse with meaningful, scalable solutions. After nearly a decade of these learnings, here’s how Thorn approaches a remote-first, distributed engineering team:
Keep everything in the cloud
Thorn’s engineering team uses 100% cloud-based tools for all of our work. This not only makes collaboration easier but ensures that everything we do is backed up with no single point of failure.
Running code in AWS means we don’t have to manage servers or access to those servers. Using GitHub for tracking and collaboration makes it easy for every team member to see where things are and what everyone is working on.
This goes for documentation too: Using collaboration tools like Google Docs and allowing multiple people to access, comment, and edit provides a single source of truth that can be referenced in perpetuity.
The documentation of our process, and the written communication of our ideas, approaches, and solutions is critical to building a shared context among a distributed team. To problem solve one-off questions quickly, it’s critical for those who are on-call to have access to the thinking that went into the code they’re fixing. Clear, consistent, searchable communications allow us to do just that.
Lean into virtual productivity tools
With Thorn engineers spread across multiple states and a few outside the U.S., finding the right time for a daily standup is impossible. There is no right time, there is just the time you make.
Enter Slack, our messaging tool of choice. Sarah says that they use a Slack channel to manage daily standups instead of a traditional in-person meeting or conference call. This allows engineers to check in every morning, at whatever time “morning” means for them. With a variety of timezones, it’s critical for our engineering team to have insight and transparency into each other’s workloads without having to interrupt them. Using Slack for standups helps to get us there.
Slack also allows the team to look back and see the entire history of every standup in one place. Thorn engineers utilize Geekbot, a Slack plugin, to help manage virtual standups.
Pair programming & code review
But what about pair programming? While it can be difficult, Thorn engineers have managed to find ways to make it work remotely.
In some cases, two engineers will join a Zoom meeting (the video conferencing software Thorn uses) and share their screens while coding or debugging an issue. They also use Slack, Github, or Zoom chat to share code snippets and links to resources. We also use the Live Share feature in Visual Studio Code to pair program directly in our coding environment. While at first it’s a little awkward to work with an open video chat running, it’s something you quickly get accustomed to.
For code review, Sarah recommends leaning on those same cloud-based tools. GitHub can be an excellent resource, and allowing colleagues and managers to leave comments, questions, and suggestions directly within the tool will go a long way in making follow-up conversations more productive.
Come to every meeting prepared, and meet often
Chase, an engineer who has been with Thorn since there were less than 10 people, says engineers at Thorn invest heavily in coming to every meeting prepared and ready to support one another to hit their goals. With the challenges of remote work and timezones, we can’t meet continuously throughout the day, so we’re dedicated to being efficient with the asynchronous communications processes and the time we block-off to collaborate in order to keep our work moving quickly.
Thorn engineers use collaborative tools, like the cloud tools we mentioned above, to comment, brainstorm, track tasks, and make suggestions ahead of meetings so they can maximize time spent in video conferences. We also like to use a single visual during larger team meetings, such as a CodeTree or ZenHub boards, so that everyone can follow along easily, understand every update, and see where everyone in the org is with their work.
For weekly meetings with engineering leads, we have a standard template that’s filled out ahead of time covering releases, outages, production issues—anything that needs visibility. Sarah says that leads also include a quick temperature check for each item using a red, yellow, or green system that makes it easy to quickly gauge which things are running well and which need further discussion.
2020 is presenting new challenges for meeting in person, but historically our approach has been to find 2-6 times per year for the engineering team to come together for sprints, brainstorms, retrospectives, and team bonding—whether as a full team or in smaller groups.
While it’s not possible to ever truly replicate face-to-face time, through intentional practices we can build similar relationships over longer periods of time while we’re distributed. Being in person allows for easier context switching, snappier jokes, quicker insights into how the team is processing information, and discovering if someone’s voice is being left out.
When we have to skip our in-person time, we lean into the tools and methods we’ve developed to build and maintain those human bonds virtually.
Foster a culture of connection
Christina @ wocintechchat.com/Unsplash
Building team bonds across boundaries
Sarah says that building and maintaining strong relationships with every engineer, while also acting as department head, is one of the biggest challenges of managing a distributed engineering team.
In an office setting there are daily opportunities to build camaraderie among teammates naturally: eating lunch around the same table, a casual conversation about weather at the watercooler, a quick hello in the hallway.
To recreate those moments, Sarah is very intentional in spending 1:1 time with every new engineering hire, and carving out 30-minute meetings with small groups (no more than two or three people) to spend time talking about non-work topics. The weather, sports, new movies, what you do for fun on the weekends—it’s a time to just chat and get to know each other, as well as for Sarah and her team to understand different personality types.
Trusting the team
It has become common practice at Thorn for engineering leads to not only check in with team members on the work they’re doing, but often spend the majority of 1-on-1 meetings getting to know each other to create a sense of comfort and transparency that runs throughout the engineering team and larger organization.
Adri, a Manager of Engineering at Thorn, says that there’s a sense of trust and support that allows critical information to be surfaced when and where it’s needed.
With Sarah Walker’s schedule as Head of Engineering, it’s impossible to attend every meeting or keep tabs on every single thing the engineering team is up to. So she focuses on delegation and placing trust in her team to make decisions, engaging more deeply when needed.
Investing in culture
Thorn has spent a lot of time thinking about building a culture that will enable engineers to reach their collective potential, regardless of when, where, or how we’re getting our work done.
And while finding the right tools is very important, it’s the culture that makes it all work. This also deeply informs the interview process, where more time is spent on technical conversations, learning about how a candidate solves problems, and how they communicate their thinking and approach. We specifically look for candidates who will excel at the personal and professional skills needed to thrive in a distributed team.
The new normal
Working in a distributed team is a huge change for millions of people. It’s uncharted territory, and there is a learning curve, but it is possible to thrive while working remotely.
We don’t know what the future holds, but we are certain that building trust and practicing clear communication will be a part of any future we build, regardless of how long the current situation lasts.
Every process will be a learning process, filled with trials and wins along the way. We’d love to hear what you’re trying, what’s working, what is hilariously failing. Tag us, or use #WorkingRemotely to let us know what you’re up to.
While there is no one-size-fits-all approach, we hope that by sharing some of what we’ve learned it provides a few potential shortcuts for those making this adjustment, and we’ll continue sharing our learnings as we all adjust to the new normal.
Keep an eye out for more posts in our series on Working Remotely, and be sure to subscribe to our emails below to learn more about Thorn, the issue, and the technology we build.
Join the Thorn community.
Stay up to date on the issues and all things Thorn. We promise not to crowd your inbox.