How often have we been through a pairing experience that we felt was really productive and rewarding, from a professional and a personal point of view? We can also think of many other times we were left wondering why that specific pairing situation wasn't as pleasant and effective as it could be. The benefits of pair programming for software project teams, may them be agile or not, are already well known; however, the success of its practice requires practitioners to believe in its strength and, above all, engage in the activity.
But how can we make it work? Merely finishing the task the pair is responsible for is not enough to call it a success. Pairing is much more than just getting together to complete a task: it's an opportunity to strengthen relations with your teammate; a chance to teach and learn, not only technically, but also culturally; to understand what your partner craves, what motivates and what discourages her/him.
Infrastructure - the common hardware and software setup used by the team when pairing;
Fatigue - the energy spent by a teammate to keep the focus during the pairing activity; and
Ego - the challenge of staying humble and avoiding arguments.
Truth is, there's no recipe or formula to make the practice of pairing more enjoyable. But I'll try here to expose and discuss some actions we can take to improve the pairing experience and to help overcoming some of the challenges raised by Marcos.
#1 - Do not centralize driving
The team member who feels more comfortable with the development environment tends naturally to centralize the driving, in part because the other one usually thinks that things will slow down if she/he takes control of the keyboard. The downside is that the partner that is less used to the environment will stay the same at the end of the experience. Setting a time interval to change who's taking control may help balance driving.
For several reasons, one teammate may be more focused than the other at certain times. If this becomes a problem, the more focused teammate should call to responsibility, expose the situation, and discuss a solution. It may be very complicated to wait for your partner to recover focus by her/himself, and losing your own focus won't help either. Techniques such as Pomodoro can help solving lack of focus, but the pair should walk together towards the best solution.
#3 - Avoid working alone
Sometimes your partner may need to be absent for a while. When this happens, try to wait for her/him to come back. Try to do something else to help the project or the company, or use the chance to take care of personal stuff. Of course, factors such as sense of urgency should be taken into account; if the activity can't be stopped for any reason you may carry on, but be sure to pass context of what was done when your partner comes back.
#4 - Alternate moments of concentration and relaxation
Focus is important, but too much focus is harmful. People are not robots who can work for 8 hours or more with no interruptions. Do periodic intervals and put the work entirely aside during them. Try to do stuff together, like having a conversation about subjects in common, playing video games, or going out for coffee.
At the end of one step, or of the whole pairing activity itself, it may be quite rewarding to take a few steps back and contemplate what was built or achieved. Celebrate! It may also be a good time to share the results with the rest of the team.
#6 - Synchronize with your partner
It is natural that one teammate would have more context on the activity to be completed than the other, and this may cause a difference in rhyhtm that could spoil the experience. If you have more context, be sensible enough to realize it and adjust your pace to your teammate. Stop and explain as necessary. On the other way, if you have less context, make it clear. Ask your partner to slow down and explain what she/he is doing and why. Communication is essential.
#7 - Give context appropriately
When giving context, it's important to make sure that both pairs are using a common and known vocabulary. It's horrible to try to understand what a sentence means without knowing the meaning of some of the words that compose it. Try to explain in a simple and direct way, and draw diagrams if needed. If it helps, consider bringing in someone else from the team who could explain the concepts in a better way.
#8 - Learn to deal with disagreements
Disagreements happen all the time when pairing, and it is very important for each pair to hear the other completely and express their opinions in a calm and respectful way. No room for arrogance. Trying to see the problem from your partner's point of view may help you to realize something you were not considering. Put competition aside; you don't need to always be right. If the pair comes to a solution conflict in a given moment, calling a third person to vote on one of the given solutions may help.
#10 - Give and receive feedback when you're done
When the pairing activity is finished, give feedback to each other while your perceptions are still fresh in your memory. It doesn't need to be anything too formal; a 15-30 minutes conversation should be enough to expose to your partner how it felt to pair with her/him, what she/he should keep doing, what can be improved, etc. If you don't have the chance right when pairing is over, write down notes somewhere and give feedback in the next appropriate time.
It's important to mention that this list of actions here was compiled based on feedback I gave and/or received during my time as a ThoughtWorker, and it is not intended in any way to be absolute; it should be seen as advice only. Do you have any feedback on these actions? Is there anything else to add? Expose your ideas in the comments section :)