An Observation Of Pair Programming vs. Not

I’ve spent the better part of the last month doing remote pair programming with Joey Beninghove, on our current contract. It’s been great – the constant discussion, the driving out of features, one small step at a time, the realizations of when and where we need to refactor and restructure to move forward. I’ve loved it tremendously.

And then Joey was out for the last 2 1/2 days for various reasons and I was on my own. I spent part of that time working on another project. When I was working on this contract, though, I found myself to be less productive and far less apt to be “in the zone”, code and concepts flowing into and out of me like water.

The net result: I find myself far more productive when I am pair programming than when I am solo programming.

It’s a combination of a large number of factors, including

  • Fewer distractions: I don’t feel the need to connect via facebook or twitter when pair programming. partially because it would be rude. partially because i have constant contact with another human, satisfying that need to be connected.
  • Intense focus: I don’t want to let my pairing partner down or leave him hanging, so I am always thinking ahead and thinking around the scenarios we are currently coding. It creates a very intense focus on the work at hand, making it easier to ignore the rest of the world around me
  • Constant communication: even when I’m the one doing the coding, I will constantly talk about what i’m doing. I mumble and mutter and spit out little fragments of where i’m going and why. it keeps me on track, for one, but it also informs my partner. this gives him ideas on where i’m going so that he can help me adjust and prevent mistakes from being made.
  • Cohesion: two minds are better than 1, and the those two minds comes up with better solutions than either one individually. the whole is more than the sum of the parts. etc. it’s true, without a doubt. it’s easier to get questions answered and explore idea. it’s easier to do design work with another perspective available. it’s easier to figure out when the design needs to change and what should be worked on next. it’s all around easier because there are multiple perspectives looking at the same problem
  • Flow: the feeling of being one with the code, being “in the zone”, where the problem at hand is matched with the skill set and the work is engaging. It’s far easier to enter this state when all of the above items are at play. i honestly lose track of time most days – i won’t really have any clue what time it is while we are knee deep in the features, code and refactoring. it’s not until my stomach starts growling at me that i realize it’s lunch or getting close to dinner.

It’s really quite refreshing and amazing at the same time, to see how productive we really can be when pair programming. Sure, I got plenty of stuff done on my own for the few days that Joey was out. But, it’s not quite as well structured. Some of the method names are funny. I wasn’t sure if my ideas were going to work. I found myself distracted more often. I was conscious of the time, all the time. And, what I think is the largest point of all – I made more mistakes that took longer to fix, because I didn’t have a second set of eyes and knowledge looking at what I was doing, constantly. Just having another person watching what I’m coding and thinking about the next step is a huge benefit, in itself. It’s much easier for someone else, who is not currently writing code, to notice a misspelling or out of place comma, or to see that you’re in the wrong file or working with the wrong design.

It’s interesting to observe these things after having spent a month pair programming. It’s almost a revelation of sorts – like the things that I had always done and always been subject to when working on my own, are suddenly showing up as negatives in comparison. The experience of high quality pair programming is reshaping part of my own expectations of productivity, at this point. Now I just need to work on these when I’m not pair programming – cause let’s face it… I’m not always gong to have the luxury.

What do you think? What’s your experience with pair programming? Are you more or less productive, and why?

Web Development Stack In OSX