Remote Pair Programming

An example setup for remote pair programming. Source: Adapted from Sedano 2016.
An example setup for remote pair programming. Source: Adapted from Sedano 2016.

Pair programming is a practice in which developers work in pairs. When the pair is not sitting next to each other, we call it Remote Pair Programming (RPP). Remote pair programming has the same benefits as pair programming: higher quality software, fewer defects, knowledge sharing, team cohesion, faster delivery, and more.

The nature of remote working demands the use of suitable tools. Selecting the right set of tools can enable teams get the best out of pairing. There are plenty of tools in the market today (Sep 2021) for RPP.

Since the coming of COVID-19 in 2020 and an increased adoption of work-from-home culture, RPP has become all the more essential.

RPP is also called Distributed Pair Programming (DPP), a term that appears to be popular among researchers.

Discussion

  • How is remote pair programming different from pair programming?

    In pair programming, the pair can point to code with their fingers. In RPP, this is done using the keyboard cursor or the mouse pointer. In some tools, both developers may be able to move their own cursors or mouse pointers. In other tools, there's only one cursor and mouse pointer. The person controlling it becomes the driver.

    In pair programming, both developers are looking at the same monitor. RPP allows more flexibility. The navigator could be checking out other parts of the code while the driver is typing.

    In pair programming, it's possible to share physical artefacts such as printed documents or a whiteboard. In RPP, everything must happen online. It's therefore essential to have tools to perform these activities online.

    RPP can be used for diverse use cases beyond coding: mentoring, hiring, live tutorials, etc. These are use cases where participants are likely to be at remote locations.

    We should clarify that sharing code for reviews, making pull requests or using version control isn't RPP. These are asynchronous workflows. RPP happens only when both developers are participating concurrently within the same workspace.

  • What should I look for when selecting a tool for RPP?
    Floobits plugs into different editors/IDEs. Source: Floobits 2021a.
    Floobits plugs into different editors/IDEs. Source: Floobits 2021a.

    Here are some factors to consider:

    • Installation: Often called Cloud IDEs, these are tools hosted in the cloud. No local installation is required other than a web browser. Other tools require local installation. Better still are plugins that extend popular editors/IDEs with collaborative editing capability.
    • Cross-Platform: Some tools may run on Windows but not on Mac or Linux. Plugins are better in this regard. They extend familiar software already available for various platforms.
    • Editing: Simultaneous editing by both developers. Copy/paste between systems. One developer can navigate to other parts of codebase or other applications while the other is editing. Editor/IDE agnostic.
    • Multimodal: Bidirectional live audio/video streaming. Chat window. Integrated with editor/IDE.
    • Usability: Uncluttered layouts. Awareness about what's shared and the current editing context. Automatic turn-off of notifications, thus providing a distraction-free environment.
    • Performance: Minimal lag. Supports high video resolutions. Fall back to lower resolutions on low-bandwidth connections. Visibility into performance metrics.
    • Integration: Connect to code repositories (GitHub, GitLab, Bitbucket) and other tools (Jira, Trello).
    • Others: Security, cost and customer support are also important. Open source may be important for some teams.
  • What tools are available for RPP?

    There are dozens of tools out there. One way to classify tools is as follows:

    • Screen Show: Only screensharing. Before switching roles, we need to push code changes to a shared repository. Videoconferencing tools such as Skype, Google Hangouts, Google Meet and Slack Calls are examples.
    • Screen Control/Share: Temporary remote control of your partner's system. Interactions can lag. Zoom, VNC, Join.me, CoScreen, Tuple, TeamViewer and tmux are examples.
    • Application Share: True collaborative editing and hence most preferred. Each environment can be personalized. Developers can use different editors or IDEs. A developer can navigate within the codebase without interrupting the partner. Developers can even edit different parts of the code in parallel. Live Share (with Visual Studio and VS Code), CodeTogether, GitLive, Floobits, Drovio, Atom Teletype, and AWS Cloud9 are examples.

    Among the Cloud IDEs are AWS Cloud9, Codenvy, and Replit. For privacy, Codenvy has a self-hosted option.

    Among the plugins are Live Share, Remote Collab, Atom Teletype, CodeTogether, GitLive and Floobits. CodeTogether supports VS Code, IntelliJ and Eclipse. Guests can join from IDE or browser. GitLive supports VS Code, IntelliJ and Android Studio. Floobits supports Emacs, Sublime Text, Neovim, IntelliJ and Atom.

  • How do I select the right tool for RPP?
    Both developers can edit in parallel with Visual Studio Live Share. Source: Falconer 2020.
    Both developers can edit in parallel with Visual Studio Live Share. Source: Falconer 2020.

    Teletype for Atom suits pair programming's driver-navigator style. Live Share allows more open-ended collaboration, which perhaps is not what you want. However, Live Share might suit ping-pong style of pairing. In strong-style pairing, we want the navigator to guide the driver step by step. This is best done with only screensharing.

    In Linux, tmux and tmate are popular. These work even on low-bandwidth connections. However, this may not be the best choice for beginners who find it hard to learn the commands.

    Cloud IDEs may not be optimal for all-day coding. It's also too dependent on net connection. Plugins such as CodeTogether track changes within IDEs and are therefore not demanding on bandwidth (unlike screensharing). CodeTogether team also found that allowing multiple developers to edit code is hard to follow. Their design enforces a master controller who can give/take temporary control to others.

  • Could you share some tips for RPP?
    Overview of CodeTogether, with justifications of its design choices. Source: Genuitec 2020.

    RPP is easiest if the developers have met before in person. If not, have icebreakers at the start of the project. Informal chats or online games can also help in building rapport. Allow for frequent breaks since remote pairs get tired more easily. When remote pairing across time zones, select a time convenient for both.

    Start every session with a clear agenda. Tackle one task at a time. Some companies such as GitLab have an internal app to help developers pair up.

    Before pairing for long hours, get the basics right. Use a good headset that mitigates external noise and echo. Use a large monitor or even two monitors. Use comfortable desk and chair.

    Make use of non-verbal cues. Lean forward when you wish to speak. Gesture to draw attention.

    Frequently check with your partner about audio/video quality and quickly take corrective action. An audio splitter with two connected headsets allows another colleague to easily join in on any conversation. Always have the audio and video on, even during breaks. This gives the feeling of being connected to the "office vibe".

Milestones

1998

Extreme Programming (XP) as practiced at Chrysler is talked about. Pair programming is one of the core practices within XP.

2001

In the Agile Manifesto, Beck et al. point out that face-to-face interactions are most effective. In this light, remote pairing is guaranteed to fail. This motivates research into adapting XP for distributed teams. Schümmer and Schümmer present TUKAN as a "synchronous distributed team programming environment". TUKAN includes chat, audio, multi-user code editing and integration with version management. They use the term distributed pair programming.

2004
Use of modified VNC for remote pair programming. Source: Hanks 2004, fig. 1.
Use of modified VNC for remote pair programming. Source: Hanks 2004, fig. 1.

Hanks publishes results of an empirical study on RPP. He uses a screensharing application called Virtual Network Computing (VNC). He modifies VNC to support a second cursor that the navigator can use as a pointer. Unlike in earlier tools, the second cursor appears only when required.

Jul
2015
A selection of tools for RPP in 2015. Source: Adapted from da Silva Estácio and Prikladnicki 2015, table 5.
A selection of tools for RPP in 2015. Source: Adapted from da Silva Estácio and Prikladnicki 2015, table 5.

In a literature survey, da Silva Estácio and Prikladnicki find that most studies have been from a teaching perspective. Only a few studies talk about RPP in a real-world software development setting. They also survey RPP tools. They make recommendations about tool features: shared code repository, support for specific pairing roles, role switching, gesturing, etc.

Oct
2015
A collaborative learning environment for students within Eclipse IDE. Source: Tsompanoudi et al. 2015, fig. 2.
A collaborative learning environment for students within Eclipse IDE. Source: Tsompanoudi et al. 2015, fig. 2.

Tsompanoudi et al. modify a previously available Eclipse plugin and use it in an educational setting to help students learn programming collaboratively. Tasks are streamlined using collaboration scripts that were studied by other researchers as early as 2007.

Jan
2019
Tuple exposes performance graphs to the user. Source: Orenstein 2019, 1:39.
Tuple exposes performance graphs to the user. Source: Orenstein 2019, 1:39.

Tuple launches alpha release. It claims to be the "best pair programming tool on macOS". The focus of Tuple is performance: low CPU usage, low latency, high resolution video and no distracting UI components (sometimes called UI chrome). It also exposes performance graphs to the user so that they can take corrective action.

2020

The COVID-19 pandemic forces teams to work remotely. Teams used to pair programming are now required to do the same remotely. The situation forces teams to better understand the dynamics of pairing remotely. It's also expected that the arrival of 5G will make RPP more reliable and sophisticated.

Mar
2021

Packt Publishing Limited publishes Bolboacă's book titled Practical Remote Pair Programming.

References

  1. Aboyi, Pius. 2021. "A List of the Top 8 Remote Pair Programming Tools." Blog, CoScreen, May 14. Accessed 2021-09-16.
  2. Agile Alliance. 2015. "Pair Programming." Glossary, Agile Alliance, December 17. Updated 2021-03-04. Accessed 2021-09-15.
  3. Andrea, Daria. 2021. "14 Best Tools for Remote Pair Programming in 2021." Blog, Make it in Ukraine, January 3. Accessed 2021-09-13.
  4. Bolboacă, Adrian. 2021a. "Practical Remote Pair Programming." Packt Publishing Limited. Accessed 2021-09-16.
  5. Bolboacă, Adrian. 2021b. "Easy Guide to Remote Pair Programming." InfoQ, July 5. Accessed 2021-09-16.
  6. CodeTogether. 2021. "Homepage." CodeTogether. Accessed 2021-09-16.
  7. Craine, Kevin. 2017. "A Guide to Remote Pair Programming Tools." Coding Zeal, on Medium, December 12. Accessed 2021-09-16.
  8. Cummins, Holly, Tobias Wetzel, and Joshua Vines. 2021. "Remote pair programming." IBM Garage Methodology, IBM Cloud Architecture Center, IBM Corporation. Accessed 2021-09-13.
  9. da Silva Estácio, Bernardo José, and Rafael Prikladnicki. 2015. "Distributed Pair Programming: A Systematic Literature Review." Information and Software Technology, Elsevier, vol. 63, pp. 1-10, July. doi: 10.1016/j.infsof.2015.02.011. Accessed 2021-09-16.
  10. Dodd, Rebecca. 2021. "4 tips for agile remote pair programming." Blog, GitLab, February 4. Accessed 2021-09-16.
  11. Falconer, Joel. 2020. "Remote Pair Programming: 7 Collaborative Coding Tools." SitePoint, May 7. Accessed 2021-09-13.
  12. Floobits. 2021a. "Homepage." Floobits. Accessed 2021-09-16.
  13. Floobits. 2021b. "Help: Editors." Floobits. Accessed 2021-09-16.
  14. Genuitec. 2020. "Remote Pair Programming Software." CodeTogether, Genuitec, on YouTube, March 26. Accessed 2021-09-16.
  15. GitLive. 2021. "Homepage." GitLive. Accessed 2021-09-16.
  16. Hanks, Brian F. 2004. "Distributed pair programming: An empirical study." Extreme Programming and Agile Methods - XP/Agile Universe 2004, Proceedings, vol. 3134, pp. 81-91. Accessed 2021-09-16.
  17. Hughes, Todd. 2021. "Getting The Most From Remote Pair Programming." Blog, RIIS, January 14. Updated 2021-01-15. Accessed 2021-09-16.
  18. Monus, Anna. 2020. "Remote pair programming: Tips, tools, and how to measure." Blog, Raygun, April 9. Accessed 2021-09-13.
  19. Northover, Steve. 2016. "Pair Programming in the Cloud." Eclipse Newsletter, Eclipse Foundation, December. Accessed 2021-09-13.
  20. Nugroho, Safira. 2020. "(Remote) Pairing 101." Blog, ThoughtWorks, October 13. Accessed 2021-09-16.
  21. Orenstein, Ben. 2018. "I'm pumped to announce that we're launching the @PairWithTuple alpha on January 7th." On Twitter, November 27. Accessed 2021-09-16.
  22. Orenstein, Ben. 2019. "Tuple is for developers." Accessed 2021-09-16.
  23. Prakapchuk, Ruslan. 2020. "Remote pair programming? Oh yes, you can." Blog, Atlassian, July 2. Accessed 2021-09-16.
  24. Schümmer, Till, and Stephan Lukosch. 2009. "Understanding Tools and Practices for Distributed Pair Programming." J. of Universal Computer Science, vol. 15, no. 16, pp. 3101-3125. Accessed 2021-09-16.
  25. Schümmer, Till, and Jan Schümmer. 2001. "Support for Distributed Teams in eXtreme Programming." In: Extreme Programming Examined, pp. 355-377, May. Accessed 2021-09-16.
  26. Sedano, Todd. 2016. "Remote Pair Programming." Blog, November 7. Accessed 2021-09-16.
  27. Tsompanoudi, Despina, Maya Satratzemi, and Stelios Xinogalos. 2015. "Distributed Pair Programming Using Collaboration Scripts: An Educational System and Initial Results." Informatics in Education, Vilnius University, vol. 14, no. 2, pp. 291–314, October. doi: 10.15388/infedu.2015.17. Accessed 2021-09-16.
  28. Tuple. 2021. "Homepage." Tuple. Accessed 2021-09-16.
  29. Wintermeyer, Stefan. 2018. "Keyboard Buddies." Linux Magazine, Issue #216, November. Accessed 2021-09-16.

Further Reading

  1. Cummins, Holly, Tobias Wetzel, and Joshua Vines. 2021. "Remote pair programming." IBM Garage Methodology, IBM Cloud Architecture Center, IBM Corporation. Accessed 2021-09-13.
  2. Nugroho, Safira. 2020. "(Remote) Pairing 101." Blog, ThoughtWorks, October 13. Accessed 2021-09-16.
  3. Andrea, Daria. 2021. "14 Best Tools for Remote Pair Programming in 2021." Blog, Make it in Ukraine, January 3. Accessed 2021-09-13.
  4. Bolboacă, Adrian. 2021a. "Practical Remote Pair Programming." Packt Publishing Limited. Accessed 2021-09-16.

Article Stats

Author-wise Stats for Article Edits

Author
No. of Edits
No. of Chats
DevCoins
3
0
1056
1503
Words
0
Likes
8
Hits

Cite As

Devopedia. 2021. "Remote Pair Programming." Version 3, September 17. Accessed 2021-09-17. https://devopedia.org/remote-pair-programming
Contributed by
1 author


Last updated on
2021-09-17 14:19:39
  • Pair Programming
  • Mob Programming
  • Extreme Programming
  • Agile Methodology
  • Software Engineering
  • Code Review