I really enjoy pair programming. It seems a natural process to me and I often wonder why it is that I like it so when others may not. Clearly, we have differing tastes and styles. I am sure that contributes to the joy (or lack thereof).
I've been watching others pair lately. And there is something I've noticed; pairing done well is conversation.
What makes a conversation?
A conversation is communication between two or more people. For a successful conversation, the participants need to achieve a workable balance of contribution on a mutually agreeable topic. Conversation is indispensable for the successful accomplishment of almost all activities between people, especially the coordination of work and for learning.
Pairing can involve all four elements of human communication; Non-Verbal, Visual, Oral, and Written.
Human communication is comprised of four elements; Non-Verbal, Visual, Oral, and Written. In order for there to be a conversation, we require more than one participant and at least one form of communication. Communication is achieved when the receiver of the information understands the sender.
What makes a good conversation?
A good conversation involves participants who are genuinely interested in the topic, are informed in various ways, and are respectful of one another. Characteristics of a good conversationalist include being genuinely interested in the topic, listening to the other participants, giving the other participants time to think and respond, and considering the input of others before responding.
What makes a pairing session?
A pairing session takes place between two or more people. For a successful pairing session, the participants need to achieve a workable balance of contribution on the story or feature being delivered.
Pairing can involve all four elements of human communication; Non-Verbal, Visual, Oral, and Written. At a minimum, written is required in the form of code. Code is written in languages. It is a means of communicating intent to both the programmers and the computer. Our pair provides non-verbal cues through their body language, visual cues by writing, drawing, or pointing to the screen, and oral cues by telling us what they are thinking and doing or responding to what it is we are thinking and doing.
What makes a good pairing session?
A good pairing session involves participants who are genuinely interested in the story, are informed in various ways, and are respectful of one another. Characteristics of a good pair include being genuinely interested in the work, listening to the other participants, giving other participants time to think and respond, and considering the input of others before responding.
Participating in the Conversation
I've been involved in numerous pairing sessions throughout my career; some excellent, some terrible. Just as conversations, you need to know when it is working and when it is not. Just as with conversations, you need to participate if you want to get anything out of it.
For me, an ideal pairing session is absorbing. My pair and I start with a discussion, perhaps it is one of us getting the other up to speed. Maybe it is a brief review of the problem and what our next test should be. It might be how to approach a large refactoring.
I'm not going to say you're doing it wrong, but I am going to say I think you're missing out on a fantastic experience.
At some point, one of us starts typing. Who is typing doesn't matter. Often, who was typing is completely unclear. The exchange continues, both of us talking, both of us typing, the solution evolving before us as we go.
When we are done, neither of us can really recall who was typing when or which one of us came up with more of the solution. And it doesn't matter. We just had a great conversation.
Try it for yourself
If you're pairing and there is little verbal communication happening, I'm not going to say you're doing it wrong, but I am going to say I think you're missing out on a fantastic experience.
And how do we get to the place where we don't know which of us is typing? Easy - two keyboards and two mice for each computer. There is no need to hand a keyboard back and forth. The exchange of the token kills the flow. If we agree that two people on a single machine is optimal, why wouldn't we have two sets of input devices?
The next time you pair, start with a keyboard and mouse for each of you, then begin talking about what you want to do. See where it goes from there.
I know for me, the best pairing sessions are simply good conversations.