Pair programming is one of the well known technical practices from eXtreme Programming, and more generally from the agile software development community. It is a technique where two developers work together on the same workstation, sharing the same screen and keyboard, to deliver a meaningful chunk of functionality.
Some of the expected benefits of pair programming are:
- Increased discipline: When working with a partner, you cannot take shortcuts and get lazy, and your brain is constantly stimulated. This practice is very intellectually demanding.
- High code quality: Pairing means that the code is constantly being reviewed as it is written and therefore less likely to contain mistakes and bugs. The design is also improved.
- Better skill acquisition: When a recently hired developer pairs up with a more experienced one, they will share a lot of knowledge very quickly, on a technical level as much as on the business level.
- Collective code ownership: Working as a pair by definition means that no one owns the code that is produced and that everyone is responsible for it.
- Cohesion: It is easier to share the team's coding standards when pair programming, and therefore ensure higher code cohesion. It is also a good way to guarantee better cohesion between the team members.
Remote pairing is a variation of pair programming where the two programmers work on the same code from separate physical location. For that, the pair will need some kind of screen sharing software, as well as video and audio communication tool. Ideally, the two partners will be able to edit the code in real time, switching role from driver to navigator as easily as if they were physically sharing a screen.
Some of the most famous code editors propose extensions to make this kind of remote pairing easier:
In the best case, these extensions allow the pair to edit the code at the same time, but also to debug the code remotely. This means that, while the code is being executed on the first developer's machine, the other developer share the exact same debugging context, which means local variables, breakpoints and so on. The collaboration becomes almost seamless.
GitPod has an interesting approach where you can launch a pod from any Git repository on GitHub or GitLab and run the code. It actually runs a container for you behind the scene, and clone the repository with all the dependencies and SDKs you need in your development environment, depending on the type of source code the source Git repo contains. It also features sharing & snapshotting.
Some of these tools include an audio feed and a chat for communication, but you can use your favorite communication tool if you like. Just imagine that using Visual Studio Live Share, a developer could be remote pairing from his windows laptop using Visual Studio while his partner is on his Mac using VS Code, without additional setup. How awesome is that!