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!
