Friday, March 28, 2008

Mac OS X 10.5 iChat Screen Sharing for Pair Programming and CRC Cards

James and I have recently done some work together on a software project. We've done most of the work individually, but wanted to see the same stuff at the same time. We're about 500 miles apart.

Long Distance CRC Cards

One project was planning the software. We used CRC cards to sketch out the names, responsibilities and tasks. Ordinarily, you'd want to do these with physical 4"x6" cards around a table. I started out this way with index cards, and considered pointing a camera at the table, then doing a video-chat. But that seemed klunky; it's also hard with my external Apple iSight camera to have it focus on text well enough for a distant person to read. Plus, James couldn't manipulate the cards. Part of the idea of CRC cards is that their finite size limits how much work (responsibilities) you pack into one class. (Incidentally, this is a practice I'm skeptical about. But, after all, Object Oriented modeling is less about modeling reality and more about helping the humans cope with mapping some part of reality into the computer.)

So instead we used Screen Sharing, part of Mac OS X 10.5, with OmniGraffle. I drew a rectangle, and told OmniGraffle it was 4" by 6". Then I used 10 point type -- roughly the size of handwriting when somebody's writing carefully. In the screen sharing session, we were easily able to see the cards; both of us could write on the cards, and move them around. And when we wanted to try a new design, I just started a new canvas, and copied over the cards that we still liked. That seemed to work pretty well.

We used regular telephones and wireless headsets for the audio.

Long Distance Pair Programming

We also used Apple XCode via the same Screen Sharing feature to do some debugging, a code walk through, and some refactoring. We traded control back and forth pretty readily. This seemed to work as well.

Do pair programming effects apply? Only to an extent. In "colocated" pair programming, the remote party can tell if you're goofing off. You feel responsible to them to keep working. So pair programming in person can be a very demanding experience. But when I was on the phone with James, it was pretty easy for me to wander off and make a sandwich while he was working.

Note 1: Multiple Displays with Screen Sharing

A note: I usually have two displays running side-by-side. This actually works with screen sharing, but the remote party has one wide window, which is vary short. It's like a wide rectangle on their screen. The result is that the work is all very small. We had better results when I disabled one of my displays, and only used the remaining one.

Note 2: Network Performance

My network link is 14 Mbps download and 2 Mbps upload. James' link is...err...two DS3's, but they're using BGP and only one of them is working at a time for a given route -- so basically 45 MBps in each direction. When he was operating my computer, he sometimes had to wait on his screen to refresh. I.e., it took a few seconds to re-paint the screen from my computer to his, over the 2 Mbps link. My display in use was 1920x1200 pixels. On the other hand, when I was operating his computer, I noticed extremely little real delay. But in both cases, the link was useable.

No comments: