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
(Runner up) Turtle Beach 800x
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.
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
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
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:
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.
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.
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
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.
End Choice: Scribble
(Runner-up) and my favorite note-taking app - Microsoft OneNote