There are tons of blog posts about software engineers working remote.

It’s been the source of drama from failing companies rejecting it. It’s been the subject of successful companies embracing it.

My experience has been mixed. It can be really good and productive, but it makes communication harder.

On my team, we have a few full-time remote workers and a few team members that are remote roughly once per week. Myself, I work in the office full-time and remote in only on occasion, say if I have a mid-day appointment that would make the extra driving a waste.

The purpose of this post isn’t to discuss whether or not it should be a thing or if its right for your team, but just to reflect on different strategies for supporting it.

Chat

We use Atlassian Hipchat for our team’s day-to-day chat needs. It works great for us but is by no means the end-all-be-all of teamchat applications. Slack also seems really popular recently, with a lot of open source projects using it (you can find me on the Polymer slack channel most days). Another option is good ol’ IRC or XMPP. I don’t think it matters what you use, just use something.

Being able to talk to the entire team or to an individual or sub-set of individuals is great for discussing stuff as the day goes. Using emojis, animated gifs, and funny chatbots brings some of the fun and playfulness to the remote experience you would otherwise get in the office.

One challenge with having some team members in an office together and some remote is that if a conversation happens face-to-face in the office, remote team members may not be aware that the conversation happened at all. Someone has to actively remember to inform remote team members that any decisions or information gained during that conversation. That could happen via chat or email or a call. Note though, that this problem also happens if someone is out to lunch or is heads-down or whatever. It’s not really just a remote worker problem that teamchat solves.

I like to try and steer the team towards talking in chat, even if people are sitting next to each other. This might feel weird to be talking via chat to the person sitting right next to you, but you do get used to it, especially if one of your remote teammates jumps in with some input. Then it feels natural because you’re talking to someone distant like you normally would. Making sure everyone can be a part of every conversation that happens goes a long way to preventing remote teammates from feeling like a ‘second class citizen’. You also get the added benefit of the conversation being recorded with no extra effort. On top of all that, you get the benefit of a quieter office, so a programmer in ‘the zone’ is less likely to get distracted.

Video Chat

It seems like Google Hangouts has become the best tool available for video chats. We set up a Google Hangout chat for our in-office team members to join. This allows us to let people ‘jump in’ to the conversation as they please, and makes it easier to set up meetings.

Office Cameras from Multiple Angles

One of the biggest wins we’ve had was setting up a user on our Google Hangout that wasn’t a particular person on the team, but rather just a computer logged in with a camera pointed at the whole office. With our open office layout, this camera can see who is presently in the office, who isn’t, who is talking to who, and who is currently elbows-deep in some code. I was even able to set up my own webcam as an opposite angle to this officecam, so everyone have a better look into the day-to-day.

Face-to-face Calls

The other part of Hangouts that is nice is that we can be looking at each other on Google Hangouts while on the phone, having a face-to-face conversation. There’s lots of research that suggests a lot of communication happens non-verbally, so being able to see each other’s face is great for communicating more effectively.

Screen sharing while face-to-face

One disadvantage of the video chat applications I’ve worked with is that you can only show your webcam, or your computer screen, but not both simultaneously. So if I want to call a remote team member and discuss some code together, we can’t see each other face-to-face. One of our full-time remote team members, the super awesome @nickhoward, came up with what now seems like an obvious solution. We use our Google Hangout to see face-to-face and separate communication software (in our case, Lync) to share screens. The best of both worlds. This also works great for meetings when someone wants to present something on the computer but the remote team members still should be able to see everyone’s faces in the meeting room.

‘Pointing’ at Things Can be Kind of a Problem

Consider the following scenario: Three people want to talk about something on the computer. Two people are in the office, and one person is remote. We set up the Google Hangout for video, share the screen via Lync, and start talking about whatever it is we’re talking about. But then someone in the office points to something on the screen. The remote person doesn’t know what they pointed at. This can cause a jarring break in communication. The only solution so far is to use the mouse to point at the thing of interest. But that has the disadvantage that refresh-rates when remotely sharing a computer screen can be really slow and disorienting. It’s also hard to express something the same way with a mouse as you can with hand-waving. Just need to mouse better, I guess.

All in all, its pretty great and only getting better

The technology and willingness for tech companies to work remotely has been increasing constantly. Companies still need to evaluate its merits on a case-by-case basis and there’s tons more you could write about it, but in my experience, we’re able to be very effective and its only getting better as time goes.

(note how it always peaks in the winter months!)