Earlier this year, Betsy and I sat down and wrote down a few dozen types of dysfunctional behaviors we’ve experienced while pair programming, then sorted them into categories:
- Taking up too little space (ex: lost but not speaking up)
- Taking up too much space (ex: keyboard hog)
- Pair has left you behind (ex: they’re on their phone and you don’t know why)
- You’ve left your pair behind (ex: you’re tunnel visioned and typing without talking)
- Out of sync with pair (ex: over-correcting the other person’s typos)
Descriptions sorted into categories.... these looked a lot like programming smells! this was familiar territory! Programming smells are solved with recipes, and this was a pattern we could follow. We set out to create a recipe index, but quickly found that even a single recipe creation was impossible.
Here’s the thing. Programming smells and recipes work because they are scenarios that can be addressed without understanding the why. It doesn’t really matter why some code ended up with a primitive obsession, you shove that obsession into a new class and everything works out great. Like programming smells, dysfunctional pairing behaviors are an early warning system that indicate a change is warranted. But that’s where the similarity ends. People are much more complex than programs, and why a pairing problem is manifesting changes how to address it. If your pair seems unengaged, treating them as a problem to be solved will make them feel worse.
Instead of looking at unengagement and other pairing dysfunctions as smells, we should look at them as symptoms. Smells lead us to clean up an area. When you have a smelly house, you can clean it up room by room. Symptoms show a system not operating as expected. When you have a system that’s not working as expected, you have to understand the problem before you can start to address it.
Let’s take a deeper look at one of the pairing symptoms we identified: your pair seems unengaged. Here are just a few reasons why your pair might seem unengaged:
- Doesn’t understand what you’re doing in this moment
- Doesn’t understand the problem
- Doesn’t know how to contribute
- Doesn’t want to take up too much space
These are all really different reasons that could be behind the same symptom! Addressing pairing symptoms is kind of similar to addressing health symptoms: you’re more likely to be effective if you know what you’re treating. A few weeks ago I had a bad headache, and painkillers weren’t effective. It turned out my allergies were being really bad, and I needed allergy meds, not headache meds, to address my symptom and make the headache go away. In order to help your pair become engaged, you need to pick the right approach based on why they might not seem engaged.
If you have a good working relationship with your pair, you can probably stop and ask. Hey, you doing ok? you’re more distracted than usual. But if you don’t already have a lot of pre-existing trust in your relationship, it’s not that simple. Your pair might not trust you enough to talk with you about it.
How about picking a neutral-seeming action? Maybe you could suggest they drive? Even that might not go over so well. If you don’t know why your pair seems unengaged, asking them to drive might not address the symptom. What if the cause was that they weren’t sure what you were doing and were scared to ask? And if your pair’s scared to ask, that’s an additional symptom as well..
It might seem silly for your pair to be scared. But your pair has had different life and education and career experiences leading up to your current pairing, and that may give them good reason to be scared:
- Poor past experience with speaking up
- Poor past experience with displaying ignorance
- Inexperience with pair programming
- Discomfort with the expected learning style (maybe your team does a code tour, but they feel more comfortable with sitting and reading on their own)
Betsy and I set out to find solutions to common pairing dysfunctions that we could share in a new workshop. What we learned is that there is no one-size-fits-all answer for any of it. How you and your pair have been encouraged and discouraged throughout your life and career have an enormous impact on how you will behave and respond while pairing. You don’t need to know anyone’s past to be a better pair for them in the present. You do need to know not everyone has had the same positive or negative past experiences you’ve had. When you carry that awareness with you into your interactions is when you can be a better pair.
If you liked this article, Cohere publishes a monthly Engineering Leadership newsletter and we would be delighted if you signed up!