Throughout my eight years at Source Allies, I have had the opportunity to work on several teams at our various projects. Most of the time our teams work in open collaborative spaces, where pair programming is done side-by-side. However, there are occasions where I have paired with developers remotely.
As someone who has done both, I know remote pairing is challenging. It can come with a host of fears including: communication struggles, being siloed, information lost in translation, technical kinks and lack of understanding. I took it upon myself to try different technologies and practices to be successful at remote pairing. Below are some tips and tricks I have found useful through the years.
I firmly believe that a good headset will change the outlook of remote pairing on a team. Having poor audio-based communication will be both frustrating and detrimental towards your remote goals. I spent a while looking at different headsets and reading many reviews trying to find the right balance. During my trials, I tried over 13 headsets ranging from the high-end Bose noise canceling to some of the nicer ( > $200 ) gaming headsets.
End choice: Jabra Evolve
- Over the ear headset
- Noise cancellation
- Boom mic for great vocal pickup and microphone noise canceling tech
- Works really well with Skype
- Tethered and no battery required for the noise cancellation (internal battery charges through the headset cable)
(Runner up) Turtle Beach 800x
- Excellent noise cancellation
- Good microphone pick up
- Supports bluetooth
- Decent battery life
For me, it came down to comfort and microphone quality. I needed a headset that was comfortable to wear all day long. This meant it couldn’t push on my skull too hard or sit on my ears, rubbing them as I moved around all day (side note, headsets that sit on your ears do very little for noise isolation). The other big deal to me was a really good microphone pick-up on the headset and one that preferably could cancel out other noise in the room. The microphone was one of the biggest separators in all the headsets. Most headsets sounded good and were comfortable, but the microphones on them are where they really showcased their abilities. I found that the microphones on a boom were always better and didn’t cause my pair to ask me to readjust or change settings in order to hear me.
Group Audio (audio for a room of people)
Again, the focus on communication takes precedence. Having the ability to communicate with a group of co-located individuals is essential. In this section, there were not nearly as many choices and it is worth noting that at the time of writing this, I am still looking for a better option. I have tried a few options: computer audio, bluetooth jamboxes, and even conference phones. Internet audio tends to be much higher quality than phones which is why for my choice I ended up sticking with a solution that worked with software like Skype.
End Choice: Jabra Puck
- Uses USB and works pretty well
- Still looking for something even better. Team members can still be hard to hear at times.
Visual Sharing / Pairing
This is probably the biggest concern most will fight with while working remotely — being able to work with others as if you were there in person. To remain part of the team, you need to be able to occasionally get behind the same issue and push it through. For the past 4 years now, I have been pair programming. You can see how this would be a challenge if one of the pairs is remote. We have mitigated this issue by using remote desktop software. I have tried everything that I could get my hands on including Skype, Teamviewer, Google chat, Talky.io, Floobits, Screenhero, Webex and a couple others. In the end, it really comes down to having the fastest service. Lag can be VERY frustrating if the picture is perfect but your mouse movements and keystrokes take more than a blink of the eye to respond. I am an IntelliJ power user and a heavy user of keyboard shortcuts. Some apps like Skype had multiple shared key combos making pairing a frustrating experience.
End Choice: Teamviewer
- Partners can have pointers which overlay on the screen
- Key combos pass through much better
- There is the ability to whiteboard and even annotate the screen
- Ability to quickly file transfer
- Can use multiple monitors with ease
- If using the buddy list in their app, you can quickly request control (start a pair session)
- (con) requires business subscription
Chat clients are not thought of as a high priority while remote pairing, but should not be overlooked. Chat clients these days are very powerful tools and mean even more to a remote-capable team. A good chat client will encourage threaded discussions which allow serval conversations to take place in the same room without having to figure out what message goes with which conversation. A good chat client will also allow a variety of integrations that make keeping everyone in sync much easier (e.g. broken builds, new releases, customer emails, new PRs, health alarms, etc.). Over the years I have tried chat clients such as Skype, Google Chat, Flowdock, Slack, Hipchat, Talky.io, and a few others.
Protip: No matter your choice, consider using plugins (A.K.A. integrations) with your chat client. I would recommend at a minimum to hook up:
- Agile board (Rally, Jira, etc) to get updates from your team on story changes and progress
- Build server (Jenkins, Bamboo, etc) to get updates about new releases or broken builds
- Version Control client (Github, Bitbucket, etc) to get updates on open PRs and other code changes
- 2 of the best chat apps out there that allow threading and do it a good way
- Allow many different and great integrations
- Allow one-to-one conversations
- Slack allows selective group conversation as well
For those that have been using physical boards to track backlog work, work in progress, and completed work, pay attention. Move away from physical team agile boards! Even if you think you can sync the boards each day, stuff will get out of sync and it will become a painful topic. I have been through 3 different teams over the years, each attempting to keep hold of their physical boards. This becomes detrimental to the remote team members very quickly. Not only does this make it hard to see what the team is working on, but it also makes it hard for others to see what you are working on. I have not tried very many options in this category. The big thing is to ensure the team has access to the content and hopefully has a nice graphical team board that feels more like the physical board most are used to.
- Team board
- Ability to assign tasks to stories
- Ability to group stories into features and epics
- Burn down charts
- Support for Kanban
Retrospectives are an important part of the agile process. In order to maintain good team health, teams need a way to vent and talk through issues that are hindering the overall performance of the team. To facilitate these meetings, each person (including those remote) need a way to contribute. The overall ability for each person to contribute to the conversation is first and foremost important, so at a minimum ensure that there is an audio channel of communication set up. Next would be to get a video feed of the room and of the remotees. This helps to establish a way to read the visual cues of those participating. Retrospectives should be a safe time to talk and to ensure the conversations are understood with the correct intent. Lastly, we get to the documentation portion of the retrospective. The best way I have seen this work out is to allow all participants the ability to contribute to a single document where they can write down their own notes about the discussion topic. Again, your choice is not nearly as important as the act of allowing all people to participate, which means thought should be given to ways to make this remote-capable.
End Choice: Google Docs If client site allows - otherwise a tool that lets all users add comments on a topic. Google docs can work nicely due to allowing all users to be in the same doc at the same time and enter thoughts in real time. This not only helps to include the remotees but serves as a great way to document the retros.
(Runner-up) Any wiki or issue tracker that lets users comment on issues/topics. I have seen the usage of tech like Github issues and Confluence wiki pages work where the topics are posted and users add comments to convey their thoughts.
Build Board (or health monitor)
A build board/health monitor is (usually) a machine tied to a physical TV that shows mission-critical information around the health of your job pipeline and your production environments. Most boards I have seen are a script that a team member has written to run on a dedicated computer that is tied to a TV placed in a common location. This is a great start for the team, but in order to be remote friendly something else will be needed. So far I have only seen 2 approaches, but both seem to work well. When building your board, consult with the greater team and ensure the board captures what the team needs in order to supply enough reason to warrant using the board. Make it something fun to contribute to and allow changes to be made by all team members. If everyone enjoys using the board, the board will continue to see improvements that help share knowledge and maintain a greater awareness of the project space.
End Choice: Github pages
- (pro) Quick to get up and running
- (pro) No server needed
- (con) Only static content can be displayed, but calling out to Jenkins and other services for health badges/info could be all that you need to build a decent build board
If your team requires more power to inspect your environment health or track information, you may need to build your own service that can be hosted locally or in the cloud. Keep in mind that if you are hosting this locally, your remote teammates will need to be on the VPN or have security rules set in your firewall to see the board. If this is hosted in the cloud you will likely have other challenges that will need to be faced as well.
I have recently dove into ways to brainstorm visually and remotely at the same time. Until recently this area has been lacking. With a recent Black Friday purchase of a 6th Gen iPad, I have been exploring ways to tackle this area. These days there are many affordable devices such as tablets and touchscreen computers that support interactive hand-drawn experiences. Looking through apps for these devices, I have found a couple that has support for remote syncing, sharing, and presenting capabilities.
- Consider using multiple Microsoft Surfaces or iPads that support Apple’s Pencil for remote whiteboarding.
End Choice: Scribble
- Paid service
- Very responsive and fast
- Multiple people can draw at the same time
- Participants can use a “laser pointer” to highlight in realtime on the board
- Drawings are saved for later viewing
- Cross-platform capable (and it works really well on a touchscreen computer through the browser)
- Viewable through the browser, which means you can display this on a large screen if desired
- Pressure sensitive pens
(Runner-up) and my favorite note-taking app - Microsoft OneNote
- Shareable notebooks
- Ability to paste in any kind of media (PDFs, images, web snippets, audio clips, etc)
- Lasso to select and reposition text and content
- Pressure sensitive pens
- Use multiple monitors with a screen dedicated to email, and chat client so that you can respond quickly and stay in the know about what is going on.
- Encourage people co-located to replay or move their conversations to the chat client. This makes the conversation available to a wider audience and also serves as documentation of the conversation.
- Pair and rotate as often as possible. The more time not pairing, the more distant you will end up feeling from the team.
- Keep your headsets plugged into your machine. It sounds funny, but the quicker that you can hop on a call and the less of a chore it is to do so will yield a higher degree of success in keeping up with remote workers.
- Attempt to get some face time with the team. Although you might speak to the remote people daily, sometimes it can feel harder to “speak your mind” or “chat about the weekend” <– water cooler talk. The face-to-face / in-person trips can help build those relationships to make it easier to read someone’s vocal emotions which help you work through complex problems more efficiently.
- Continue to bring up the remote aspects during retro to make sure nothing is being left out.
- Convince the whole team to take a day a week and work from home. This will allow others to see what it is like and also help overcome some of the hurdles quicker.