Nice Pair - Pair Programming Archetypes
This post first appeared on the Lonely Planet Engineering Blog
What kind of pair programmer are you?
Pair programming is an excellent method of producing quality software, minimising business risk and making everyone in the team smarter. It can be a fun social activity for those of us of the nerd persuasion. And it can also be frustrating, boring, aggravating and a waste of time. I'm interested in what makes a pair gel, how to maximise the good times and minimise the not-so-good times. I'm not a clinical researcher, just a software developer writing from personal experience and those of my peers.
Pair programming is good for business and good for programmers, that's what repeated studies tell us. There are a lot of resources out there on how to pair program and some resources on how to do it well, most of which focus on the code. Code is simple. Once you write it down it stays written down, has repeatable outcomes and doesn't self-mutate over time (yet). We can write standards and rules and heuristics for writing code in pairs and measure the outcomes and draw conclusions.
People on the other hand are only consistent in their inconsistency, don't always produce the same outputs with the same inputs and often don't have compatible interfaces. Understanding what we bring to the pair can help us moderate our own less helpful characteristics and develop useful ones. Below is a list of pair programming archetypes with Highlights and Lowlights for each plus a Check Yourself section which might be helpful if you find yourself in a category, or pairing with someone in that category.
The Finger-Operated Coder
Thinks best while typing. Expresses himself* in written code on the screen rather than words.
Highlights: Knows all the keyboard shortcuts for everything. Good at generating ideas when the pair is stuck. A very fast typist who will own you at this.
Lowlights: Keyboard hog, tends to get really fidgety when not in the drivers seat. Trouble explaining ideas so can leave his pair as a spectator rather than a participant. Can feel like he's taking the long way round because he makes his mistakes by writing out the code rather than thinking it through first.
- Take your hands off the keyboard when you aren't typing code.
- Talk through your code plan first. If words aren't enough use pen and paper, or a Boogie Board, or a whiteboard.
- In the navigator seat it may take some effort, but keep asking questions and stay involved. No-one benefits from you sitting there watching, or checking your Tweets, while your pair codes away in silence.
Sits in silence and thinks problems through before talking or coding. Generally soft-spoken.
Highlights: Doesn't say much but when she does always says something worth listening to. Will often see big picture problems before they arise.
Lowlights: Can be hard for her pair to tell if she's thinking or catatonic. May look like she's not paying attention. Won't always communicate all the useful things she knows/has thought of.
- Let your pair know you are still thinking about the problem at hand. A grunt is often enough.
- Use paper/diagrams/mime to get all that wonderful knowledge out of your head and into that of your pair.
- To develop your Thinker ability, remember to step away from the detail of the problem and look at the bigger picture.
- In the navigator seat remember to give the Thinker some space to think, but also ask questions to help her put her thought process into words.
Very supportive, engaged pair who thinks almost everything his pair does is awesome. Slow to criticise, quick to praise.
Highlights: Fun and easy to work with. A good sounding board for ideas and trying new things. Confidence building.
Lowlights: Not critical enough. Often focused on the immediate code and not the bigger picture. Too quick to take a navigator role.
- Use ping pong to make sure you spend an equal amount of time in the driver's seat.
- If driving with a cheerleader navigator ask them for critiques, not just encouragement.
Knows she is the smartest person in the room, and by certain measures probably is. An expert on the tools and technologies under development.
Highlights: A fantastic learning resource for coding, architecture, optimisation and design. Able to anticipate issues before they arise.
Lowlights: Often wants to try new things just because they are new and not because they are necessary. If she is not interested in sharing her knowledge, pairing with her can be frustrating. She can also be a keyboard hog.
- Remember that no matter how smart you are, if you make your team smarter through effective pairing it will be a bigger win than you'll ever get by coding alone.
- As a navigator work hard to get educated by your Brainiac, ask questions, probe, bug, prod and poke.
- Limit your pairing time with a Brainiac. Coding is not a spectator sport, you will only learn so much by watching.
A newcomer to the codebase, or coding, or someone who knows less than his pair.
Highlights: Asks 'stupid' questions that can often lead to code improvements or uncovering of bugs. Code in need of refactoring becomes obvious when explained to a n00b. Has fresh eyes. Highlights gaps in his pair's knowledge. Shares his sense of wonder at discovering cool new stuff. By pairing with a n00b and teaching him what you know you are making your team a more powerful force for good coding in the world.
Lowlights: Requires his pair to have patience and the ability to explain things properly. Can slow down development in the short term.
- Ask questions but not incessantly, your pair needs space to think and code.
- Take responsibility for your own learning, your pair can help you learn but you need to come prepared.
- When pairing with a N00b get comfortable with the fact that development will be slower because you are teaching and coding.
- Mix up time spent pairing with N00bs and experts if you find being in teaching mode draining.
Has to show you the latest YouTube/Wiki/HN/Twitter video/article/tweet/pic/site/page, you will totally love it.
Highlights: Great for giving a pair a mental spa break after sustained heavy thinking. Fills in those dull moments waiting for tests to run. A great source of cool new stuff to try out.
Lowlights: One cool link can turn into two, or ten without sufficient self-control. The Internet is a Playground but you need to get off the swings and work.
- Don't share unless your pair asks to see what you're giggling at, when she's in the zone let her stay in the zone.
- Isolate your Internet gold to the company spam channel (every company should have one!).
- Use pomodoro to schedule in surfing downtime.
Has read everything on OOD, BDD, DDD, TDD, FP, XP and all the other acronyms. Writes code that always conforms to the latest and best standards.
Highlights: Ensures her pair write rock solid code which never cuts corners. Strong awareness of the impact of technical debt and great at avoiding it. Excellent learning resource for best code practices.
Lowlights: Spends too much time creating scaffolding for disposable code. Can prioritise academic application of standards over pragmatic progamming. Can become inflexible.
- Don't prematurely optimise.
- As a Rock navigator keep asking what the purpose of the card/task/job is in relation to the code being written. "What are we doing here", "Do we really need that".
Does his best thinking while talking so talks a lot.
Highlights: Excellent at explaining problems and solutions. Inspires new ideas or ways of tackling issues because he is a constant brainstorming session.
Lowlights: Can dominate a pair, more of an ideas hog than a keyboard hog. Can be distracting to coders who prefer to do their thinking in silence.
- Ensure you get your keyboard time, it is harder for most people to talk and type.
- When pairing a Talker ask him to draw his ideas to limit the direction and quantity of input.
Can't keep digitally still. Constantly flicking between windows, highlighting random text or typing nonsense characters when not coding.
Highlights: The screen, after the highlighting.
Lowlights: Drives your pair crazy and makes his eyeballs twitch.
- Take your hands off the keyboard when not typing code. The restlessness will pass and you will learn to focus on the screen and follow your train of thought without the visual stimulus.
- If watching a Twitcher twitch you are allowed to ask them to please stop.
The Constant Corrector
Cannot tolerate a mistake on the screen and corrects you as you type.
Highlights: Human spellchecker!
Lowlights: Can be rather annoying to her pair.
- Keep your powder dry. Only correct when it is obvious your driver hasn't noticed instead of firing a shot at every slip of the keyboard.
Assumes her position at the keyboard and begins to code. Nothing gets in or out, will not talk or surrender control of the machine.
Highlights: Great for those days when you're writing your novel in your head. An excellent challenge for those who like safe cracking.
Lowlights: Not really pair programming.
- Ask yourself why you work in a team.
- Force yourself to engage with your pair even if you don't feel like it. You don't always get to do exactly what you want at work and your team decided to implement pair programming for a reason.
- If you can't crack the Vault and you can't get the keyboard off her, find another pair.
It is 4pm on a Friday, you are going to the beach for the weekend and have remembered you forgot to pack your towel. Also you didn't get much sleep last night and you're hungry. Oh, and you've got the flu and you are hungover. The person sitting next to you is programming, but you are not.
Highlights: We've all been there.
Lowlights: Give up and take yourself off to write some documentation or do some useful but mindless task. Sometimes you've got to recognise when you're not going to be an effective pair and just walk away.
- DO NOT PICK UP YOUR PHONE.
Like all attempts at categorisation you probably won't fit entirely into one of these boxes but are more likely to be a combination of several. Becoming aware of which categories you fall into will help you to lean into the strengths of the archetype and also to minimise those that interfere with effective pairing. This list isn't designed to make you feel superior or inadequate, we've all had our N00b days and our Brainiac days. By no means is this list meant to be exhaustive, add your own to help us all become nicer pairs.
* I'm so over the male/female pronoun issue, so I'll be using he/she randomly throughout, no gender profiling intended.