It's getting real. If you're not convinced that COVID-19 is a big deal, this FAQ is a useful resource. You should care; as the close relative of someone with a suppressed immune system, anyone who isn't taking the outbreak seriously is a risk to me - and particularly, to my mother.
Not everyone can work from home, but if you can, it's one of the best ways to avoid infection for yourself and others. For a lot of companies, working from home has upturned existing policies. Microsoft has shown the way here: as well as telling its team to work from home, it's continuing to pay its hourly workers the same wage. While some economic fallout is inevitable, this has lessened the financial impact on the most vulnerable members of its community.
I'm the Head of Engineering for a Series B startup. Almost all of my team has been working remotely for the past week. During this time, a frequently-used cafe around the corner was closed because an employee was positively tested for coronavirus. At our team meeting yesterday, I was asked how long this situation was likely to last; of course, I have no idea. We need to proceed as if we'll be working remotely indefinitely.
I've spent over a decade of my career working remotely, including leading technology teams. In some ways, I'm more productive from home. In particular, because meetings are just that little bit harder to organize and run, there are fewer of them. That's good for everyone. And I get access to my own kitchen and food, which is good for me.
Here are some best practices and tool recommendations, based on experience across three startups.
Building a routine
Particularly for people who aren't used to working from home, building a solid routine is really important. It's shockingly easy to get distracted by your home environment, and to drift off into relaxation mode. It's similarly easy to let work take over everything and never quite end. Both are bad.
I always leave the house in the morning and at the end of the workday; I always shower and exercise as if I was going for work. I never, ever work from the bedroom. And when I'm at work, I shut out outside distractions as much as possible. I've become a heavy user of Brain.fm: it makes some dubious claims about its underlying brain science, but I've found that it really does help me focus. (The sleep mode is the best way I've found to fall asleep on planes, too, although I'm not planning to fly any time soon.)
We use Range to check in every day. It asks us what we got done, and what we plan to do; it also checks in on how we're doing. I love it as a central rallying point for the day. We've also added a daily standup over Google Hangouts. I've found that people will often bring up issues there that they haven't listed on Range, and it's a good way to hear everyone's voice. For a remote engineer with no other meetings, it might be the only time they hear their team that day.
Finally, I have regular 1:1 meetings with each member of my team. While I prefer in person, remote is fine.
Communicating effectively (and securely)
All crucial information should be easily accessible without asking, and that the barrier to sharing information needs to be as low as possible. And honestly, I want to know how my team is feeling; my job is to create the conditions for them to do their best work, and that's as much an empathetic role as it is one about engineering progress.
Slack has become a necessity. Not only is it the best way to host non-interruptive realtime communication across the team, but it's a useful way to surface important notifications. Every production system that can output notifications to a Slack channel does; I've also written Lambda functions to output a few more via CloudWatch.
We use Jira and Confluence to manage issues and documents across teams. I've used a range of tools in the past, but as much as I hate to admit it, Jira's worked the best. Again, I have updates piped into Slack channels, and some production systems automatically turn major issues into Jira tickets. We use Pull Reminders to alert members of the team when they've been marked as a reviewer on a Pull Request. The result is that I - and everyone - can use Slack as my monitoring station, and keep on top of what needs to be dealt with urgently.
Every piece of work must be represented in Jira. Every major decision must be represented in Confluence (alongside meeting notes, technical specs, post-mortems, etc). Anything out of the ordinary - blockers, out of band deploys, etc - must be discussed in Slack. And I ask everyone to err on the side of chattiness on Slack. Particularly when people aren't in earshot of each other, it helps ensure that everyone knows what's going on.
When we do have meetings, it's been Hangouts. Zoom is probably the best videoconferencing software, but requires a download; GoToMeeting was designed in enterprise hell. I've also tried decentralized, WebRTC-based solutions in the past, but they tend to break down if someone's internet connection isn't strong. Hangouts has the benefit of just being a link, and working reasonably well across browsers.
It should go without saying that we require use of pasword managers, and we don't allow sensitive information to be transmitted via any of the above tools. If sensitive information must be shared, it's done over an encrypted channel, and destroyed when work is complete.
Finally, I send a message across the entire company every Friday that breaks down what we shipped that week, and what we plan to work on next. It's written at a fairly high level, for a non technical audience. The idea is to keep us accountable as an engineering team, and make sure everyone in the company has the product information they need.
Mine isn't the perfect setup, but it's worked reasonably well for me. I'd really love to hear about other experiences and recommendations. What's worked for you? Or maybe you're trying remote for the very first time and struggling? I'd love to hear from you.