case.codes

Pair Programming Fixes Remote Work

I see a lot of commentary on the web about remote work. There’s both a lot of praise and a lot of criticism. I believe this dichotomy stems from different implementations and different personalities. However, what I almost never see as a solution to any of the critiques is a suggestion to try pair programming. Here’s my experience spending the last 5 years working from home.

Bootstrapping

The first year I was working on a startup with a friend who would usually drive over in the morning. This worked ok but the only room in my house big enough for the both of us meant we were working on couches without proper desks, monitors, keyboards etc… It was a bit too cold in the winter and too hot in the summer. And of course, from his perspective it was much more akin to working from a shitty office than from his home. For me though, I loved the extra hour a day I saved by not commuting, I enjoyed the relative silence of my home compared to the open concept offices that are prevalent here, and generally felt more physically and socially comfortable than I ever did in an office.

Remote != Distributed

I then took a contract with an office downtown, and after commuting for a couple of months I negotiated to work from home four days a week. In this period, while I still enjoyed the benefits of working from home including much greater flexibility, I also experienced many of the downsides that people cite. Since I was the only person on the team regularly working from home, I ran head first into the remote vs distributed problems that others find. I knew I had to overcommunicate but I still found my entire day in the office in meetings and catching people up on what I had been working on. We had standups each morning that I would call into but I was often an after thought and the team would forget to join the call or decide to move the time without letting me know. Then, personally, I had my own problems adjusting to the lifestyle. Since I was no longer working directly with someone each day I found that I would often skip lunch, and stayed inside for weeks at a time. As well, while my motivation wavered about as often as it did in an office job, I found it much more difficult to stay on task in those moments.

I believe that difficulty to stay focused stemmed from two things: lack of routine, and lack of external expectations. The lack of routine is fixable, standups helped to start the day, but at home I found it necessary to reproduce many of the routines that are built into office life. Showering and getting dressed before work still helped me feel good throughout the day. I took to walking my dog at noon everyday as a way to enforce a sort of lunch hour, and I made sure to close the laptop for the night when my wife got home from work. I also established a proper office space, where I could shut the door, concentrate, and stop thinking about household chores and other distractions.

The lack of external expectations is something that, tautologically, I’ve always found difficult to solve by myself. Standups and sprints help a bit but I’ve always seen deadlines as challenges, so when the work is insufficiently interesting to me I procrastinate and my velocity plummets. Although I recognize when that’s happening to me and I’m often able to mitigate it by working on something different instead, it still bothers me and I feel guilty and depressed about not doing the best I can. Additionally, in an office, there’s a pressure to at least look productive, to be present in your seat, and not be seen browsing reddit all day and I became acutely aware that this pressure was mssing at home.

Pair by Default

Three years ago I still felt that the benefits of remote work outweighed the negatives and when I found a completely distributed team with a pair program by default philosophy at Outpace I was excited to give it a try. It could not have gone better. Although I had experience doing some intermittent pairing, pairing (almost) every day with shared screens and video chat was even better than pairing in an office. Even though I had suspected the benefits of pair programming were true, over a long period of experience I’ve come to wholeheartily believe in it.

The combination of remote work and pair programming, however, was something that completely surprised me. I found that I was able to hold on to all of the benefits of remote work that I was used to but because of pairing I experienced none of the downsides. Pairing is the best external motivator that I’ve experienced at work, working every day with someone makes me want to accomplish as much as possible. When motivation lagged, my pair was often able to push us through the period and I was able to do the same for them. Instead of using deadlines and sprints as a metric for accomplishment we found ways to improve the code and product that were better because of the immediate feedback which drove pride in our work. And since we both had our own computer, communication and interruptions improved because one of us could code and the other could keep up to date with slack and answer incoming questions without stopping the flow. Finally, the aspect that surprised me most was that the team culture was the best I had ever experienced, I made many friends there in a way that I rarely had in offices. Working from home, sharing video into each other’s homes every day provides a peek into your coworkers lives that is genuine in a way that I never felt at a water cooler or at a bar after work. When my two year old was home sick, and I sat him on my lap for our morning standups it never failed to bring a smile to all of our faces.

Not for Everyone

Now it’s important to understand that this worked for me both because the company set us up for success with distributed tools and processes and because my personality fits well with this model. Not everyone we worked with enjoyed working remotely, while I found I was able to form tight bonds over video chats, others still felt isolated. Not everyone enjoyed pairing either, some felt constrained or flustered while driving or useless and distracted while navigating.

Still, I think if you’re thinking you want to try embracing remote work, starting a team, or struggling to connect to your coworkers in a distributed environment you should give pairing by default a try. I’ve recently joined the small team at Aclaimant who are trying this same approach, but we’re not the only ones and I hope to see more teams pairing pairing and remote work in the future.