Pair Programming With a Twist
August 2, 2011
Pair programming has been one of my favorite agile software development techniques for the last couple of years. We built SideBox this way and it’s been some of the most productive programming I have ever done.
I spent the last two weeks on a sprint at Concord trying to help them launch a new web app. We did not do pair programming formally but I did something like pair programming a couple of times.
##The twist
My good friend Josue Aparicio and I would sit together to and review the web application we were building. Sometimes on his laptop, sometimes on a big screen. This wasn’t pair programming because Josue is not a programmer. Josue is a project manager with expert domain knowledge about the client for which we were building the web application.
He would point something out on screen, and I would implement the change. He’d find a bug; I’d fix it. I’d see something that could be improved and would ask him if the client would allow that and he could answer on the spot. We talked about technology, project management, etc. Josue’s sort of an amateur graphic designer so we talked about design too.
##Productive
The thing that stands out about this style of development is that in many ways it is more productive than pair programming, depending on the type of project you are working on. In my opinion, pair programming works well for two people working on their own startup, like Barry and I, where we define all the requirements. Also, when two programmers have been giving marching orders on what to implement (with specs, business rules, documentation, etc), it makes a lot of sense. When there aren’t requirements, or the requirements are vague and you often find roadblocks that require intervention from a project manager, pair programming doesn’t work well.
If you are in a rapid-fire situation where the requirements are being made up as you go, or will change frequently, then including a project manager, or domain expert, as part of your agile development team is a fantastic way to squash roadblocks as they appear and keep the machine racing forward.