Sep 02 2010Comments
Here at Relevance, we're committed to the idea of working in pairs. But as the company grows beyond its Durham headquarters, we have more and more people working outside of the office. Pairing is hard enough by itself, but pairing remotely is daunting. This post documents some of the software and processes we've tried.
Being a Mac-heavy office, we started with iChat and its screen-sharing feature. This is quick and easy, and works fairly well for brief use. But several Relevancers have gone multiple-monitor in their home offices. iChat screen sharing doesn't play well with multiple monitors — it shrinks both "host" desktops to fit on one "guest" screen. Also, the audio quality isn't that great, and the connection is flaky on residential Internet.
We switched to Skype for audio chat. The sound quality is much better, but its screen-sharing feature is view-only. We tried VNC for screen-sharing — both the VNC server built-in to OSX and third-party alternatives — but it's much too laggy for any serious use. We even tried a few commercial products, of which TeamViewer was the best. It supports multiple monitors (guests can choose which host monitor to view) and has better responsiveness than VNC. But the license is expensive, and it's still not perfect, especially when the members of the pair have different-sized screens.
The fundamental problem with remote pairing by screen sharing is that one half of the pair is at a severe disadvantage. The "host" is working on a local machine, with no lag or display artifacts. The "guest" is looking at a fuzzy screen with several hundred milliseconds of lag. That might not sound like much, but it's hard to be effective when the text on the screen is half a second behind your typing.
So for the past few weeks I've been experimenting with a different mode of pairing that tries to put everyone on the same level playing field. I set up a persistent Amazon EC2 instance running Ubuntu GNU/Linux and all our favorite development tools. Both members of the pair can SSH into the instance and share a terminal session with tmux. There are still lag issues, but at least everyone has to deal with the same lag.
tmux is a great tool, although there are still configuration headaches. You don't realize how complex "dumb" terminals can be until syntax highlighting renders all text in blinking red italics for one user and completely invisible for another. The trick is to get everyone on the same terminal application (usually iTerm) and match up the TERM environment variable at both ends. Then there's the Emacs/Vim debate, but that's not a problem we're going to solve any time this century.
Pairing in text mode is more efficient, bandwidth-wise, than in graphics mode, but you can't share a web browser to debug a web app in your terminal. (Yes, there are text-mode web browsers, but that doesn't help you debug HTML layouts.)
VNC, we know, is slow, but there are newer remote-screen technologies for Linux, such as the open-source NX protocol. NX is much faster than VNC, with better display quality and security. The free client and server packages from NoMachine.com allow two users to share a single X-Windows session. Just one quirk to deal with: unlike VNC, NX renders the mouse pointer locally. Effectively, each user has their own mouse, and cannot see the other's. This is fine most of the time, until you want to literally "point" at something on the screen to draw attention to it.
Another upside to pairing with NX is that the "remote" window only needs to be big enough for a single shared application, such as a web browser. Each member of the pair can keep their own desktop with their own email, chat, and other applications.
This setup works pretty well, in my opinion, although recently we hit another snag: certain jobs require us to interact with servers on VPNs behind corporate firewalls. We haven't figured out how to make an EC2 instance connect to a VPN while also remaining available to the pair that is using it — I'm not sure if that's even possible. (Amazon's "Virtual Private Cloud" seems geared toward large enterprises with many IPs, not a single instance.)
So that's the current recipe: Skype for audio, tmux for text editing, and NX for shared web browsing. It's far from perfect, but we've managed to get work done this way. Do you have techniques or tools you use to help remote employees stay connected? Let us know!