Remote Pair Programming Technology
Since moving to Atlanta, GA six months ago I have been remote pair programming full time with fellow Pivotal Labs developers in San Francisco. Here I describe our setup, alternatives, and why we use the technologies we do. I'll follow up this post with another outlining the pros and cons of remote pair programming itself.
TL;DR: I Use 'Screen Sharing.app' + Skype
While this has more moving parts and might require more support than other solutions, using Apple's built in Screen Sharing.app (aka SSA) combined with Skype has proved to be the best remote paring technology combination.
Everyone uses a Mac. Specifically, at the time of this writing, top-of-the-line 27" iMacs. Screen size does matter, but not because more screen real estate is better: if the host screen size is larger than the remote screen, then the remote developer will have to scale their screen in some way, if possible.
Screen Sharing: 'Screen Sharing.app' vs iChat
The two primary options for screen sharing on a Mac are "Screen Sharing.app" (SSA) or iChat. Yes, there are many VNC solutions out there, but these two are the default choices. While iChat's ease of setup and integrated voice chat is compelling, it has fatal flaws.
Stability: SSA has never crashed. Not once. SSA is so stable that it actually stays connected while the host computer reboots.
Speed: With a fast internet connection, SSA's refresh rate and overall "snappiness" beats other VNC apps.
CMD + Tab (⌘⇥): As a programmer, I'm constantly switching applications. When I type ⌘⇥to switch apps, that command runs against the host machine exactly as I expect.
Screen Options: SSA has many view and quality options. You can choose to scale your window to match the screen size of the host machine, or not. If the host machine has multiple monitors, you can choose to see both or only one at a time. Other screen sharing apps do not have this much flexibility.
No Full Screen: Like most screen sharing apps, SSA runs in a window and does not have a true full screen mode. This means that your SSA session will have scrollbars if the host machine's monitor is the same size or larger than yours.
Firewalls: The remote machine will likely need VPN access or some other hole in the destination firewall to connect to a host machine.
iChat: Compelling but Fatally Flawed
For a while I was very excited about iChat because it offers an all-in-one (minus video) solution to remote pairing and the lowest barrier to entry. Despite this advantage, infuriating "buffering", lack of stability, and unexplained incompatibilities proved intolerable.
Easy Setup: Have a Mac? Have a GMail account? You're in business! Add your GMail (or AIM, Mac.com, Jabber) account to iChat, have your remote pair do the same, add them as a Buddy, and right-click to "Share My Screen".
Voice + Screen: While lacking video, iChat does combine voice chat and screen sharing.
What Firewall?: I've used this to punch through many firewalls without a VPN connection.
Full Screen: As the remote computer, the screen sharing takes over your entire screen. If your screen size is the same as the host computer, it's just like you're on that computer (if you ignore the mini version of your own screen in the corner). ⌘⇥works!
Freezing, Buffering: All screen sharing sessions have some amount of lag. iChat has an additional anti-feature of buffering: even though you can move the mouse and the cursor is blinking, your clicks and typing are being buffered (not ignored) and eventually come flowing in. Of course, this happens at the most inopportune time: you're working out an idea, coding away, when suddenly, in the middle of a complex piece of logic, everything stops. Inevitably you keep going, praying that you haven't miss-typed, and wait as the last 30 seconds of invisible work appears. Correct your mistakes (quickly!) and repeat. This interruption of flow makes iChat an unacceptable long term solution.
Stability: Frequent crashes.
Poisonous Combinations: Sometimes two machines simply will not screen share. Those machines screen share with others, but not with each other. In addition, two machines will cease to screen share with each other after a successfully doing so for weeks. Once this happens, you're screwed. Forever. See code crash log below
Window Scaling, Multiple Monitors: iChat wants to make sure that the remote machines can see all of the host machine's monitors. If you are on a 15" MacBook Pro and your host has a 27" iMac with a 19" secondary monitor, iChat will scale your screen sharing session so you see two teeny-tiny screens. Host will likely need to disconnect that other monitor.
No Video Chat: As I said, iChat takes over your screen, obscuring other running applications, such as a video chat.
Note: If iChat crashes with the following error, you're likely doomed.
Video Conference Error Report: 411.336209 @/SourceCache/VideoConference/VideoConference-415.22/SIP/SIP.c:2917 type=4 (900A002D/65) [SIPConnectIPPort failed] []
Other Screen Sharing Solutions
Meh. They work, but not as well. Check out TeamViewer(no firewall issues!), Chicken, and JollyFastVNC. All lack⌘⇥ support.
Voice and Video: Skype vs. iChat, GChat
Voice Quality:better voice quality vs. iChat or GChat. Stability: This is relative, as all video chat clients crash on a somewhat regular basis. Here Skype wins on grounds of crashing not as often and its tolerance of configuration changes: switching sound inputs and outputs while calls are in progress. My pair and host in the office switches inputs often: built-in speakers and mic when I need to talk to the group, headset speakers/mic when pairing.
Stand Alone App: As a stand long application, it's one more moving part to manage vs. iChat's integrated screen sharing and voice.
Version 5: The recent version 5 beta upgrade in incredibly unstable and lacks flexibility: window sizes are too large, video gets out of sync. Hopefully they will fix these issues soon.
They are okay. Voice quality is acceptable but not great. Same with video. Sometimes they handle input/output switching gracefully, sometimes they don't.