Recently we replaced Harvest’s billing system. It was a long project. It was a difficult project. It was the most enjoyable project I have worked on in my five years at Harvest. The success of the project hinged on our first real attempt at pair programming. As is common at Harvest, we took on this challenge remotely (i.e., pantslessly).
Doug and I began working on the billing replacement project this past fall. Early on we realized it was a project to be conquered, but not divided. Doug arrived with deep knowledge of our existing billing system, which had grown cantankerous with age. I arrived with zero knowledge of our existing billing system, nor any desire to gain knowledge of the existing billing system. It turns out these disparate perspectives led to a solid program design.
Nearly every day during the project Doug and I would hop on video chat and get to work. In the beginning the work was understanding the requirements of the Harvest billing system. We considered existing screens and flows, the manner in which we accept payment from our customers, and some of the things we’d like to do in the future.
We built a simple document in Google Docs that allowed each of us to watch as the other person edited. As the energy on one end of the line waned, the person on the other end could pick up the document and go to it. This spec document was our bible throughout the project.
We vacillated between Google Hangouts and Skype during the project. The driver would tuck Photo Booth into the corner of his screen to allow for two-way video during the screen share. When one application started to become unbearably laggy, we would switch to the other. This setup was by no means perfect.
iChat appeared to have a more solid screen sharing option, but we didn’t like how easy it was for the observer to take control of the driver’s machine. We have no doubt that there is better software for screen sharing. We knew a couple “good enough” tools, however, and decided to just get to work.
While we weren’t capital ‘P’ pair programming, we did try to work together almost every day of the project. This meant we each got to know the other’s schedule pretty intimately. Luckily the Harvest team allowed us to play on our code island for an extended period of time. We were beholden to almost no one but each other.
Doug lives in Montana. I live in Minnesota. We had plenty of family commitments during the project. Naturally our schedules aligned. Sometimes we would choose to wrap work early for the day, rendezvousing back later after our children were asleep. On a couple occasions we decided to push a little harder and put in some time on the weekend to get past a project milestone sooner rather than later.
Pairing is not just a rote coding concept. Deploying three months of work with all kinds of migrations and data transformations is best done with a friend. Together we built a launch checklist with nearly 100 items to complete and confirm. The checklist included descriptions, timing and assignments. During launch our team of two became three as Warwick, our sysops maestro, joined us for launch activities.
Thinking through and following this checklist was absolutely essential to a successful launch. Checking each other's work at every step gave us confidence in our strategy. Having a brother-in-arms there for the launch made the eight hours feel like a lot less. For such a big deployment, it is also useful to have a wide array of space shuttle launching audio clips at our disposal.
We were excited to wind down such a rare multi-month Harvest project. For as much fun as we had working together building a killer design, it was time to move on. We launched billing over the winter, but continued to meet weekly for a couple months to address any bugs or deficiencies in the code. You bet we paired up again on these occasions, depending on each other to keep things in line.
Pants or no pants.