Since the beginning of last year, I have been managing Reaction Commerce's global community team from Manila, where I've been living for the last three years. My teammates are located in the Philippines, Germany, India, Japan, and both coasts of the United States. In the past, I've also managed teammates and apprentices from Nigeria and Kenya.
Managing a fully distributed team comes with plenty of benefits, the biggest one being the ability to hire the best people, regardless of where they currently live. It also comes with many unique challenges. Here are a few of the (sometimes hard-won) lessons I have learned, and will continue to learn, as a manager of a fully remote team.
Hire the right people (and trust them!)
This is the key right here. Working remote is not for everyone. It takes a special sort of person to make this work. Self-discipline—and a willingness to take ownership of problems—is essential. This is hard to interview for, so people with at least some experience working independently seem to do well. A junior dev may have good technical skills, but they might also lack the maturity to self-manage.
People who are more adaptable also tend to do well in remote work environments. Working remotely provides you with the flexibility to live your life however way you want to, so it's important to also be flexible when trying to accommodate people from all over the world.
Here at Reaction, the community team schedules meetings with a "least terrible" mindset, knowing that there's really no perfect time that accommodates everyone's normal working hours. Sometimes, that means having a meeting that's in the evening or early in the morning. If people are flexible, we can make this happen and, in turn, have fewer meetings overall.
If your remote working environment isn't functioning correctly, it's usually either because the right people aren't in the right seats. No amount of process is going to make up for that.
Because our timezones are so disparate, it's important that everything we do is accessible 24/7/365. When a teammate isn't available to answer someone's question, the answer can usually be found in the documentation. This requires discipline. It's easy to simply answer an inquiry in Slack with an off-the-cuff message, but that doesn't help when you aren't online.
A corollary to the above rule is this: all discussions should happen in a public forum whenever possible, and all code-related discussions should be logged in GitHub. GitHub isn't always the best place for everything, especially discussions about broader topics, but if it's code-related, it should be in an issue or PR.
Be fanatical about updating status
We've tried various methods for status updates, but nothing has worked better than just everyone keeping their tickets up to date, even when it doesn't seem like there's anything to say. This doesn't take the place of daily syncs. Rather, it allows anyone in the organization, even those who may not have access the sync meetings, to stay updated on our progress, without us being online.
Provide measurable goals
Once you have the right people on your team, it's up to you to make sure they know what they're working toward. Make sure everyone's goals are clear and quantifiable, then let them execute. If someone doesn't meet their goals, discuss what the challenges were. If they consistently can't meet those goals, then look to make a change.
Make it personal
Leverage video calling (and keep your camera on!)
Along with chat, video conference calling via Zoom—both 1-on-1 and as a group—is the most important way we communicate. While there is constant communication via Slack, GitHub, and Gitter, Zoom serves as our daily touchpoint. I personally find that there is a very real difference in how we communicate when everyone can see each other's faces, so during these calls, I ask that my team keeps their camera on. This helps teammates see each other as actual humans beings. It also helps us understand how different people communicate. Being able to hear someone's comments in their own voice also allows me to understand their tone better, which ultimately allows me to get the gist of what they're saying.
Record meetings for later viewing
This is something we just started doing recently, and it's been a big help. Since almost all our meetings occur over Zoom, it's easy to simply record and publish our exchanges. This allows anyone who couldn't make it to the meeting—whether due to time zone differences or otherwise—to catch up with what happened.
Provide an outlet outside of work
We have a number of Slack channels—one for the company and one just for the community engineering team—that are explicitly not work-related. This gives our team a space to blow off steam and joke around in a way that's not really possible within the context of our other engineering channels.
Twice a year, the entire team comes from all over the globe to meet in Santa Monica. This gives everyone the chance to see each other without the use of a computer. Seeing someone in real-life— preferably in a not-directly-work-related setting—allows us to see people as their whole selves, and not simply robots spitting out code. The benefits of this are subtle, but profound.
As we discover the best ways to work, we've also tried things that just haven't worked. It's important to recognize when something isn't working, acknowledge that it's not working, and either adjust it or move on without it. For example, we tried a #statusupdates Slack channel for a while, but found that people had a tough time logging their updates. So, we switched back to good ol' daily standups. Even though our standups aren't always at the beginning of everybody's day, we found that this worked much better.
Managing remote teams can be challenging at times, but that's what allows us to recruit and nurture the best team possible. As our team expands, we're continuing to learn, grow, and figure out how to accomplish the most we can. At the end of the day, however, one thing remains constant: we will always hire the best talent, no matter where they are in the world.
Want to learn more about about our community team projects? Join us every other Wednesday at 7AM PST for our bimonthly community call.