Tooling for Remote Work

This post relates to my post on pairing, but digs into some tooling that will help make your life better. Stay tuned for the next post on how to use some of these tools.

learn to use vim/tmux

Until something better comes along, learn to use vim and tmux if you want to pair remotely. There is defnitely a steep learning curve so remember to use good pairing practice and support people who are new to the tools. The difficulty of learning is worth it; this combination is instantaneous. If you have used screensharing software in the past then imagine sharing your screen, but not having it be terrible. Instead of trying to send a video of your 27" monitor, you only need to know which characters to put where on the screen. It's blazing-fast and looks good for everybody. Anybody connected to the tmux session can watch or drive the action as if it was on your own computer. Screenhero might be ok in a pinch, but you'll hate life if you try to use it every day.

slack (or whatever chat app you choose)

This is how you are going to do much of your communication. Here are a few hints on how to use it:

  • Use the right channels for the right tasks (and create new ones if you need to) keep the cat gifs where they belong and the firefighting channel clear for fighting fires.
  • Don't @everyone unless you're telling folks to go home for the week. If you have something that has to go to everyone (as opposed to, say, people currently in the channel) use email.

video chat

It doesn't matter what tool you use, but you should be video chatting frequently. I've had good luck with keeping both google hangouts and Skype on deck in case somebody on the team is having trouble with one source. When remote pairing, I like to have my tmux/vim session on a big monitor and a video chat going somewhere else. It'll often be covered up with a browser or documentation or something, but it is nice to be able to look at your pair when you are talking to them.

email

With all these awesome communication tools, you shouldn't need to email very much! Email can be a great async way to share information that people need to hear. Don't abuse it or emails will just get ignored.

calendar

Keep a calendar of when people are going to be available. You should be able to see this from slack, but it is good to know if somebody is out for lunch for an hour or sipping cocktails on a beach and not checking slack this week.

Git

Figure out procedures for source control, socialize them, and follow them.

  • Does every commit need a PR?
  • Does pairing count as code review?
  • How do you ensure that PRs don't get stale (who is responsible for merging)?
  • How do you deal with conflicts?

project management software

Agree throughout your company how you're going to use this software. Figure out how stories are created, pulled, discussed, and finished. If acceptance criteria belongs with the story (and it does) then make sure each story has it.