Remote pair programming is an Extreme Programming (XP) methodology which is a part of the Agile software development model. It takes the principle of pair programming to the remote workplace. Pair programming leads to higher quality code and fewer bugs by making continuous code reviews and synchronous collaboration possible.
In traditional pair programming, two programmers sit side by side in front of the same computer. Remote pair programmers share the same workspace remotely by using real-time collaboration tools.
Different approaches to remote pair programming
Emulating the side-by-side working environment is the biggest challenge remote pair programmers need to solve. A development workflow can only be considered pair programming if the two programmers work at the same time on the same code base. Therefore, asynchronous workflows, such as sharing code snippets on GitHub or using version control to work on the same project, are not pair programming techniques. Pair programmers always work concurrently, within the same workspace.
Here are some common approaches to remote pair programming.
Terminal sharing is the oldest way of remote pair programming. The pair uses a terminal multiplexer such as tmux or wemux to share the same terminal session. They connect to the same server through the secure SSH protocol, while the terminal multiplexer allows them to split the terminal screen and work on the same code base simultaneously.
In traditional pair programming, there’s a driver who writes the code and a navigator who reviews it, line by line. This workflow can be perfectly emulated if remote pair programmers share their desktop with each other. Some screen sharing tools even let them use multiple mouse cursors with which they can edit the same file at the same time.
Collaborative code editing
Collaborative code editing is a more lightweight approach to remote pair programming. Here, the programmers don’t share their entire screen, just their project environment. Collaborative code editing can be performed using either a cloud IDE or a live share code editor plugin. In both cases, pair programmers see each other’s cursor and can edit the same files concurrently.
How can you make remote pair programming easier?
Remote pair programming evolves as fast as real-time collaboration tools make it possible. Finding the best tools and mastering their usage is crucial if you want to be successful in remote pair programming. The developer tools landscape changes incredibly fast. If you are not satisfied with a tool, don’t hesitate to ditch it and give a try to another one, as a more suitable development environment can lead to much better results.
Although instant messaging applications are frequently used by development teams, communication tools that allow voice and video calls fit better with remote pair programming, as they don’t visually distract programmers from their shared workspace.
If you need a simple and well-supported communication tool for your remote pair programming sessions, Skype can be an excellent solution for you. With Skype, you can quickly make voice and video calls all over the world, send instant video, text, and voice messages, and share files. Skype also has basic screen sharing capabilities and a built-in translator that can come in handy if you and your pair programmer don’t share the same native language.
Stride was formerly known as HipChat, until Atlassian, the creator of Jira and Bitbucket, acquired it. Stride has an advanced group chat and direct messaging interface similar to Slack’s. However, it also comes with a built-in voice and video conferencing tool. With Stride, you can also share your screen and send multiple files at the same time with the help of a handy drag-and-drop file uploader.
Screen sharing tools
As these days many communication tools have screen sharing capabilities as well, probably you won’t need a separate screen sharing app. However, if screen sharing is your primary approach to remote pair programming, it’s worth considering a tool that goes beyond the regular screen sharing capabilities. Interactive whiteboarding and multiple mouse cursors are two advanced features that can take screen sharing to the next level.
Zoom is primarily a cloud-based video communication app with which you can host online video conferences. However, it has impressive screen sharing capabilities as well that make it possible to share multiple screens simultaneously. Moreover, you can also take leverage of its whiteboarding feature that allows all participants to annotate on the shared display. With Zoom’s screen annotation tools, both of you can make text notes, create simple drawings, add arrows, and erase previous notes.
TeamViewer is a cross-platform, encrypted screen sharing tool with which you can securely connect devices without using a VPN. It doesn’t need any configuration, and it also works behind firewalls and proxies. Besides screen sharing, TeamViewer allows you to conduct audio and video meetings as well. TeamViewer comes with a built-in interactive whiteboard with which you can take notes and draw diagrams onto the shared screen.
USE Together is a pretty new screen sharing tool, launched in the summer of 2017. It has been created with the aim to provide remote pair programmers with a powerful screen sharing tool. USE Together allows developers to use multiple mouse cursors on the shared screen, which is its most exciting feature. Pair programmers can see each other’s cursors moving around on the screen in real-time. Although the app is still in beta, it’s definitely worth a try, especially if you want to have access to the multiple mouse cursor functionality.
Cloud-based IDEs provide you with hosted development environments which means you have access to a fully functional development platform right inside your browser. Therefore, it’s not surprising that remote pair programmers frequently choose them as their primary development tools. If you use a cloud IDE, you don’t have to bother with setting up, maintaining, and updating your own development environment, which can save you a lot of time and hassle.
Codenvy, recently acquired by Red Hat, is a strong contender for Cloud9. It has a self-hosted option as well, so if privacy is important to you, Codenvy can be the best solution for you. Codenvy is built on top of Eclipse Che which guarantees its high quality. It uses Docker to containerize workspaces; however, you don’t have to install and configure Docker by yourself. Codenvy was created with remote teams in mind. Therefore it has several features remote pair programmers will love, such as workspace permission management, automated workspace creation, and integrated version control.
Live Share Extensions for Code Editors
Although cloud IDEs are great, some programmers still prefer working with their own code editor. Until recently, remote pair programming wasn’t possible within locally hosted source code editors. However, live share extensions for popular editors have begun to appear on the market.
Teletype is an Atom package created by GitHub’s core team. It allows remote pair programmers to work simultaneously in the same workspace. As there’s no centralized server and Teletype encrypts all communication, it’s a very safe solution for running remote pair programming sessions. The programmer who opens the shared workspace becomes the host, while the other member can join as a collaborator and make edits in real-time.
Microsoft released the Live Share extension for Visual Studio Code in November 2017. Right now, you can only sign up for early access. however, Visual Studio Live already seems quite promising. Pair programmers can edit files synchronously, see each other’s cursors, and changes immediately appear in the editor window. Visual Studio Live Share also makes real-time debugging sessions possible by allowing you to set breakpoints and step through the code together, in real time.
Benefits of remote pair programming
As currently there’s a massive talent shortage in the IT sector, more and more companies hire remotely. However, remote pair programming is not just for the corporate sector; it can also be quite successful in open-source projects. Although it takes some research to find the best development environment, the benefits of remote pair programming are numerous.
Two programmers approach the same problem from different angles and most likely have different skill sets and knowledge as well. Giving real-time code reviews to each other and separately discussing each problem can result in higher quality code and fewer errors. Moreover, being in constant contact with a peer can also help programmers avoid distractions and keep focused while working.
As there are already several real-time collaboration tools you can choose from, there’s no reason not for trying this new form of distributed development.
Measuring pair programming
One way you can put metrics to your remote pair programming efforts is how many bugs you create vs. how many get resolved.
You must be capturing all errors from your software so you can discover and fix the problems in your app before your customers do. Error counts and performance are a good measure of software quality, so if you can correlate better software (i.e., fewer bugs) with your pair programming efforts, you can put a value to your efforts.
Areas to measure are:
Development time: Are you spending less on development resources?
Time to resolution: How much time is spent resolving software problems?
Employee satisfaction: Are employees happy?
User satisfaction Are users having a better experience?
Money: There should be an economic value placed on remote pair programming
You can get all these metrics and more from Raygun Crash Reporting and Real User Monitoring. Once you get the data you need, you’ll be able to compare pair programming.
Extra resources on remote pair programming
If you want to learn more about remote pair programming also take a look at the following resources:
A great link collection for pair programming on GitHub.
An in-depth tutorial with superb illustrations on how to perform a remote pair programming session using SSH and tmux.
Additional tips on how you can use pair programming beyond the office.
Collaboration and development tools for remote pair programming.