Remote work has allowed (or rather, forced) technical teams to adopt an increasingly popular technique that helps them address quality issues, improve communication and interpersonal bonds, reduce knowledge silos and promote learning and development. This technique is, as you might have guessed, Pair Programming.
This article isn’t a guide on how to practice Pair Programming: There are plenty of articles and books that explain how to put it in practice way better than I could. For example, consider reading Birgitta Böckeler and Nina Siessegger in On Pair Programming or explore more radical approaches like Ensemble Programming, by Maaret Pyhäjärvi.
Instead, I will share my personal experiences as a manager of a team, highlighting the multiple ways that Pair Programming has helped my team to become more productive, resilient and happier.
I call it the Virtuous Cycle of Pair Programming:
-
Communication Software engineering is a team activity, and (particularly in remote settings), the more team members talk to each other, the more effective the team becomes. While Pair Programming sessions focus on completing a task, the social interaction that occurs is equally important. An environment of communication and trust naturally leads to…
-
Knowledge sharing
Everyone in a team will have a unique combination of skills, personal preferences and internal knowledge about the business and the product. Pair programming is a breeding ground for sharing ideas and knowledge, leading to… -
Learning The most effective learning happens in a highly contextual and interactive environment, which is the case in pair programming sessions. It is proven that this type of learning is superior than more passive methods, such as reading technical books. When colleagues learn from each other, the overall knowledge of the team grows, leading to…
-
Code Quality Having to pair of eyes makes it easier to identify suboptimal design solutions, bugs and errors. Focusing on one single task (as opposed to multi-tasking or being distracted when working alone) often results in fewer mistakes and better code quality, leading to…
-
Speed Pairing reduces the amount of work in progress, which increases the cognitive overload of a team. It also eliminates the need for asynchronous code reviews, as reviews take place synchronously during the pairing session. Reduced lead time has been demonstrated by research like Dora and The State of DevOps reports to correlate with better organizational performance, leading to…
-
Motivation A team who learns, ships fast, produces quality code and maintain strong interpersonal relationships is happier and more motivated. Thus the virtuous cycle begins again!
Addendum: How to incorporate Pair Programming to the team workflow?
If your team isn’t used to pairing, chances are that you’ll find some active or passive resistance among team members based off of fear, shyness or simply an aversion to change.
While this isn’t intended as a comprehensive guide, I’ve personally found it effective to use the daily standup an an opportunity to encourage team members to pair with one another. Initially, it might just be a 5 minute session for a synchronous code review or to help some fix their development environment. Later on, the time and scope of pairing can be extended once people internalize its benefits.
I also try to lead by example and volunteer to be a pairing partner. This is particularly effective when starting a backlog item to make sure that the initial design is on the right track.
Finding allies in other engineering peers and business stakeholders within the organization is essential when Pair Programming isn’t already part of the culture. For example, some people hold the misconception that pairing reduces the team’s throughput (which is far from the truth), so it’s up to you to explain the benefits and get support before approaching the team.