The Remote Pair Programming Tour


This page is largely outdated, but the Remote Pairing is still on

Schedule a session with me! Contact me on twitter: @alexboly!

Pair programming is the most fulfilling experience I’ve tried and want to try again. It helped me in many ways: learning from my pair, fixing potential issues with the code quickly, making programming a fun social endeavour.

Inspired by Corey Haines‘ pair programming tour, I’ve decided to start a remote pair programming tour since I cannot travel as much as Corey did. If you want to pair with me for 2-3 hours in an evening during the week, just drop me a message.

And now, for some details:

The main purpose of the session will be practicing and learning. We can practice TDD on a training problem (e.g. from here), refactor some of your code, write tests on some of your code or anything else you might think you want to learn.

My main language is C#, but I’ve programmed for customers or with other people in C, C++, Java, JavaScript, PHP, Python and recently tried Ruby. I’d love to see some Haskell, Erlang or Scala, but didn’t get there until now. The language doesn’t matter – actually we will learn much more from one another if we use different languages day by day.

The best setup is with the following tools:

  • TeamViewer for remote screen sharing
  • The development environment set up for both of us
  • Skype for voice (and video) communication
  • A github repository

From my experience, writing code on a remote screen is annoying because there’s always a delay. So, ideally, the person writing code should be always using his own computer. This means every time the driver switches, the code needs to be committed (or pushed) on the repository, the new driver pulls the code and he becomes the presenter. It sounds more complicated than it is, and it only takes a few seconds, but avoids many annoyances.

What happened until now

(Thanks to Yves Hanoulle for suggesting this section)

I’ve done a lot more sessions than I managed to document. I plan to come back with more details.

A few past sessions:

FlaviusStef, on Thursday, July 8th – talked about NHibernate, automapping between database and entities, automapping between DAOs and DTOs, Inversion of Control, MVVM for WPF. Did some TDD on the Sql string generator problem. Learned that String.Join(strings, “,”) can be used for concatenating strings from an array separated by comma. Tried the dynamic keyword from C# 4 and managed to greatly simplify tests.

Eric (France), on Tuesday, July 20th – worked on some Java code, with tests in place and added a new feature. The first remark is that it’s extremely easy to start being productive in a project if it has tests and if you do pair programming. It took me 15 minutes to understand what we were trying to do and to start developing. After about 2.5 hours, we had the new functionality done, tested and refactored so that the code was very clean. (Of course, there are always more things to do, but we time boxed the effort).

In terms of tools, we used LogMeIn for creating a VPN and VNC for remote connection. Hamachi was very easy to use in Linux (works from command line) even if it’s in beta (a stable version is available for Windows). The only problem is that I had to work remotely, which is annoying because of the delay introduced by the network. I feel that this slows me down a lot and couldn’t use it for a full day’s work. Other than that, it’s an excellent way for sharing the desktop with someone else, regardless of the motive. And it’s free for personal use.

In the end, I see there’s no perfect solution for pair programming. Ideally, we should have a full IDE, comparable with Eclipse, built for remote pair programming. And forget features like chat or voice – there’s Skype for that. We need the programming tool, not to reinvent the wheel.

To close, another excellent session; we’ve learned a lot and that’s all that matters.

More sessions done (from what I can remember):

2-3 sessions with Thomas Sundberg, 2 sessions with SH, one session with Stephen Brown, a few sessions with Adrian Bolboaca, one session with Tomasz SzymaƄski

1 comment Reflections on design, craft and software

A new home for merging ideas about design

It is my strong belief that software design can learn a lot from other design disciplines. I wrote blog posts, a book and did talks on this topic, and it was time to group them all together. These ideas have now a new home: My plan is to add more blog posts there, and to involve other people doing work in this area.