If you’re stuck working from home for a few weeks due to coronavirus, welcome to remote work life! Here are some things that I’ve seen make remote life successful.

You are always remote, especially when you work from the office

When in the office, it’s super easy to fall out of remote work habits. If you have a part of the team often working from a shared office, this can create two de-facto teams.

One remote with remote habits, one co-located with co-located habits. Instead, use remote communication as the default, no matter where you are working from.

For instance, when joining meetings from the office, each person joins individually from their machines, rather than all office-lurkers joining from one big meeting room. Otherwise you risk having a co-located team in the meeting room using co-located practices like analog whiteboards, with a silent audience of remote joiners, squinting to see the writing.

Default to async communication

When you are remote, making quick decisions is not as easy as turning around in your chair and asking your desk mate. Distributed teams live and die by their webcams, but conference calls are like sudo; only use it if you really have to.

In a remote team, you have a broad range of asynchronous communication tools available. Which one you choose becomes part of what you are communicating: A well-formatted proposal in a google doc means something different than a suggestion on Slack.

Tools of the trade include:

Slack

My daily driver - anything you’d normally ask over the shoulder goes in Slack. Leverage Slack channels to let people tune out topics they don’t care about, use threads to avoid polluting common spaces with lots of chatter. Turning Slack off is the remote workers equivalent to noise-cancelling headphones. Put on your Slack-cancelling headphones often.

Google Docs

Google docs has mostly replaced email for me. Collaboratively building a doc, plus comment threads on specific sections, is much more conducive to shared understanding and compromise, in my experience.

Pull requests

Code is communication. Good pull requests become extra critical in remote teams. I cover more of this in “Ship small increments” further down.

Email

In the past email was used for long-form discussions around features and technical topics. Today that job is almost exclusively transferred to collaborative docs.

YMMV though, email might be the right tool for the kind of communication your team does.

Video calls

Not async, so use with care.

High bandwidth. First choice for sensitive or emotional topics, and whenever you’re talking past one another in async communication. For human social bonding and happiness, try to be on a regularly scheduled call at least a few minutes a day. It helps to see other human faces, and it helps catch someone not doing well and keeping up with each others lives.

We use Google Meet, Slack Calls and Zoom. Because meetings are always in video calls, they can always be recorded and made available for someone that missed it.

Strive for distributed decision making

In remote teams, there is a higher cost to coordination than in co-located teams. This can be a good thing, because it encourages pushing decision-making to the front-lines.

When the US Marine Corps issue orders, they don’t just say “Take hill X and report back what you see”. Orders include a section called “Commanders Intent”, that describes why you should take that hill. “The point of taking the hill is to get up above the tree line so we can see what the terrain ahead looks like”. With that context, the soldiers can opt to take another hill instead if hill X turns out to be heavily fortified. They know the over-arching goal and are empowered to change the plan if situation demands it without calling home and asking permission.

The solution here is not just “hire smart people and trust them to make the right call”. There is almost never “a right call”, everything depends on the broader context. What’s the product direction and audience you’re aiming for? What’s the architectural direction for the code?

What you want is smart people, empathetic to each others differences, well aware of both the technical “commanders intent”.

Ship small increments

In a co-located team, you may get away with keeping that branch going for two weeks, because you chat about it at lunch every day. If you’re going down some bad direction, you’ll hear from your peers early.

In a remote team, people that care about your change may not see it until you open a PR. If you’ve worked on something for two weeks, and someone looks at it and realizes you’ve made some really bad assumption, suddenly a lot is on the line. Had you sent a small incremental PR the day you started going down that path, the problem would’ve been caught immediately.

In the Neo4j Aura team, there are components that allow feature toggling throughout the code base. The backend services have feature toggle systems, as do the frontend services. This means that you can check code in long before it’s ready to be used by end-users. Your peers see what you’re up to early, and stop you if you’re about to go down the wrong rabbit hole.

Create space for ad-hoc conversation

Our team has a twice-daily optional 15-minute “coffee time” blocked off in the team calendar. If you’re not in the middle of something, you grab a cup of your favorite warm brew and join an always-on Google Meet.

It creates a space for banter, venting and community. It also creates a high-cadence meeting you can join if you want to get quick feedback on some code or a UI demo, removing the need to schedule dedicated meetings.

Accountability

When you are remote, nobody knows you are on Reddit all day long. Things I find help me stay focused:

  • Domain blockers; I disable Reddit, Facebook, Twitter and HN during work hours
  • Personal TODO lists, I use (Void)[https://github.com/void-rs/void] to organize the day into small achievable tasks

Social accountability helps as well:

  • Co-ownership of cards/tasks; either by pairing on a card or by collaborating closely with a peer, you each are responsible towards one another
  • Daily standup; reporting what you did the day before creates social pressure to not spend your days playing WoW

Self-care

Humans are social beings. Having people around to contextualize stress, to help you feel like you’re part of a tribe, to be your friends, is a fundamental need.

If you are not careful as a remote worker, you will wake up one morning and realize you haven’t been outside for several days.

You must intentionally combat this. Schedule on-site get-togethers with the team. Find things in your local community to do. Friendships are made when you see the same people day after day, so find things to do outside of work where you will meet the same people often.

Excercise. Cook good food.

Maintain a separate space for work, even if it’s just a dedicated desk. As much as you can, get up from that desk a the same time each day and leave your work-brain there.


See also