One of the projects I'm working on is a Rails application. We work on that together with my colleague, Marcin. There's nothing really innovative in this application. I've got enough experience with Rails and IT in general to know that it can be finished in a given time. The interesting bit is, that both me an Marcin live in different cities. Even better, both of us travel a lot and very often we are in different countries.
A distributed team is nothing new in today's IT world. One of the most common approaches to this problem is to divide the system and responsibilities across different people/teams/locations. It can work, I was involved in many such projects. The problem is that it requires a lot of trust, patience and really good skills to know how to split the project. In my opinion, it's a very risky approach, and it's easy to do it wrong. Chad Fowler describes it perfectly in his book: "My job went to India".
Traditional pair programming is a great practice. I know it's still controversial, and I agree that it doesn't have to work for all software developers and all projects, but I've seen it successful often enough to know that there are many benefits of pair programming. The benefits that I find important are:
- Focus on the task
- Sharing knowledge
- Increasing trust
- Fun
- Speed of development
The tools we use are nothing new. We use vim + screen + skype. We both login to a development server as the same user. There is a screen session already open, so we just 'screen -x' to it, and now we see the same things at the same time. It's fun to watch, when Marcin is typing something, explaining it using skype, and I see it immediately in my vim. At any point, I can grab the keyboard and just start typing. Cool! I can't imagine working like that without a skype session, though. Using IM is just too slow.
I'm strongly recommending this kind of cooperation. I'm aware of the limitations here. The application must be possible to build on a Linux/Unix machine, but even if it can't, I can imagine some work-arounds to this problem. Different timezones might be an issue here. I don't think the whole project must be built like that. However, planning some remote pair programming sessions may increase the quality of your software.
I like this way of working so much, that I even consider doing it more often. Would anyone be interested in a Rails coaching session like that? All you need is skype and an SSH client.
The articles I found useful when preparing to remote pair programming:
http://blog.lathi.net/articles/2007/10/09/remote-pair-programming
http://mikeburnscoder.wordpress.com/2007/06/21/my-rails-development-environment-version-1-vim-and-screen/
6 comments:
This is a really great idea, and not one I had considered before! For some things, and for OS X users only, Screen Sharing might work, or the Subethaedit collaborative text editor (as long as your source is synced!).
Thanks for your comment, Peter.
My colleague, Michael Foord, was trying Copilot and was happy with that. It's also a screen sharing tool.
For me, sharing the whole screen sounds too heavy. Screen with vim (or any other editor) seems to be the simplest configuration that works.
I even started to do my local development with screen and vim instead of TextMate!
For windows one an always use VNC http://www.uvnc.com/
We are testing gobby in combination with sobby server for remote pair programming.
You could also use script to record the session for playback later. e.g.
script -t 2> file.time -a file.script
You can then play it back like:
scriptreplay file.time file.script
I normally use this when installing and configuring packages. It could also be useful for recording pair prgramming sessions for training or whatever.
Post a Comment