Adventures in Pair Programming – 2 Devs, 3 Computers


For the last several months I’ve been pair programming every day, working with another developer on a Windows application. Both of us usually use Macs, so we’ve adopted a company Windows laptop to do the work, and as we’ve experimented with our pairing tools, we’ve learned a bit about how tools affect getting the job done.

Alternating Mac & Windows, Dvorak & Qwerty

When we started on the project, my pairing partner and I sat with our Macs in front of us and the Windows laptop in between, pushing the PC back and forth depending on who was driving. The keyboard and trackpad were unfamiliar, and despite weeks of using them, we still only tolerated them, frequently sighing at clicks we didn’t mean to make and keys we didn’t mean to hit.

By far the biggest annoyance of working on a common Windows laptop was switching keyboard layouts. I’ve written before about using Dvorak instead of Qwerty, but my pairing partner hasn’t converted yet. While Macs have great support for switching keyboard layouts, Windows is a different story. For some reason, Windows configures the keyboard layout for each application rather than setting it for the entire system. This means that if you’ve been switching layouts and you open an application, it may be configured to a different keyboard configuration, whichever one was last used with it. Switching layouts on the taskbar was irritating enough, but having to switch each application nearly drove us crazy.

Controlling a PC with a Mac Using Synergy

Tired of the unpleasant keyboard and trackpad, I dredged up an old piece of software I’d been introduced to in college: Synergy. Synergy allows one computer to be controlled by another over the network. This is handy when you have two or more machines at a desk but don’t want to be crowded by mice and keyboards. In this case, I wanted Synergy’s cross-platform capability, which would enable me to use my own Mac keyboard and trackpad instead of the built-in ones on the Windows laptop.

Synergy worked as planned, and it surprised me with two benefits I didn’t expect. The first surprise was that it sent two-finger scrolling on my Mac as a scroll command to the Windows laptop, including the inverted scrolling that Apple introduced to mimic scrolling in iOS. The second surprise was that Synergy sent keystrokes as my Mac system understood them, meaning that as long as my computer was set to the Dvorak keyboard layout, it didn’t matter what the Windows machine was set to, it would get what I typed. We could leave the Windows laptop set to Qwerty and never have to suffer through switching back and forth under Windows.

Using my own keyboard and trackpad made my life a lot easier, so much so that my pairing partner quickly became jealous. I didn’t immediately have a solution for him, since the Synergy homepage clearly says that only one computer can serve its inputs to the client computers. The Synergy configuration page supports this claim, only having one field to name the computer where inputs should come from. It wasn’t until we ran into a little hitch that we discovered a solution.

Simultaneous Sharing

In the course of our work, we had to run our IDE in administrator mode. To my chagrin, Windows does not allow a program running in administrator mode to receive inputs from a program that is not running as an administrator. This makes perfect sense, but it ruined my ability to control the IDE using Synergy. I tried running Synergy in administrator mode, which was necessary but not sufficient. In addition, I also needed to change one of Synergy’s settings, changing the “Process mode” option from “Service” to “Desktop (legacy)”. Changing this setting allowed Synergy to control the IDE even when it was run as an administrator, and it gave me an idea for helping out my partner.

On a whim, I tried running a second instance of Synergy on the Windows machine and configuring it to point at my partner’s Mac. With two instances of Synergy running side-by-side, both of us were able to control the Windows laptop from our own computers. Making sure to take turns at the controls, we’ve been using this setup for several weeks, and it’s worked out nicely.

Since Macs lack some of the text navigation keys that PCs have (such as Home and End), we’ve learned to use the equivalent key combinations on our Macs. Holding the function key while pressing the left or right arrow keys jumps to the beginning or end of the line respectively, thus providing Home and End key functionality. Function and the up and down arrows mimic Page Up and Page Down. The adjustments have been easy to make, even easier since we don’t have teach our fingers where new keys are.

Familiarity => Efficiency

Working with the keyboards and trackpads we have used day in and day out for years has made a big difference. It’s easy to think that small differences in keyboards and trackpads are truly minor, but we learned that those differences can have a disproportionate effect. Trying to retrain on unfamiliar hardware kept us thinking about the tools rather than the problems we were trying to work on. Eliminating the foreign keyboard and trackpad allowed us to get back to what we were really trying to figure out, and it taught us that tools that don’t get in your way beat tools that do the same job but makes you think about using them.

Hopefully these tips are helpful. If you have other pairing suggestions, or thoughts about tools, I’d love to hear them!