Update May 20, 2020: For the past few years, my team has used Zoom
for pair programming. It rocks. While you can't have the dual cursor feature of ScreenHero,
it does offer the ability to control another person's screen. The annotate feature is helpful.
And the performance is simply the best!
I had the opportunity to spend the entire workday remote pair
programming from my office in Maui with a San Francisco client from
Cloud City Development. We used our normal
tools of RubyMine, Chrome, and iTerm2
on a 27" Cinema Display shared via Screenhero.
While remote will probably never be 100% as good as true in-person
pairing, it's getting very close! Here's some tips for effective remote
pair programming. Scroll down to the bottom for the TLDR if you're short
on time. Overall, I would highly recommend remote pairing with RubyMine
on a full 27" Cinema Display, using an iPad with a Google Hangout for
Here's a very detailed video of how to do remote collaboration:
Telepresence Using Video Chat on iPad
Per the recommendation of Tim Connor
of Cloud City Development, I started using
an iPad for telepresence
for only the video, using Google
Hangouts, muting the
microphone on the Hangout, and using the audio on
Screenhero. While one can run Google Hangouts
on the laptop, it can really suck up the CPU. Note, an iPhone or
probably an Android phone or table would work equally as well. In terms
of the audio, the microphone and speakers are better on the computer. If
one is using the laptop for the telepresence video, and using multiple
screens, it's key to use the camera on the screen where one will be
looking at the Hangout, and not at the Screenhero screen. As shown from
the below pictures, it's key that it's obvious when the pairing partners
are looking at each other versus at Screenhero. Incidentally, Screenhero
did not suffer from any degradation when combined with the Google
Hangout, regardless of using the Hangout on the laptop or mobile device.
In the below images, note where our eyes are focused.
Talking to each other, making eye contact
Both looking at screen
Talking to each other, making eye contact
Shaka from Steve and Justin
We both used Screenhero on Macs. I've done
plenty of remote pair programming using Google Hangouts, but typically
only one person sharing the screen drives the code. Screenhero allows
true screen sharing such that both programmers can do the typing and
mousing. With the shared screen being a 27" Cinema display, I set my
Screenhero window to full screen and the resolution was nearly
perfect. Yes, when scrolling and switching apps, there is a slight
delay, but it was extremely manageable to the point that I almost would
forget that I'm working on a computer 3000 miles away. Although there's
a slight slowness in seeing keys that you type, it's minor enough that
it's not a nuisance. The dual cursor support works great. Here's a
video demo of the dual cursor
Both I and my pairing partners were already using
RubyMine, so using RubyMine was a
natural choice over trying to pair with the conventional remote pairing
setup of tmux and Vim. RubyMine combined with Screenhero, the same size
big screens, fast computers, and very good broadband resulted in a
productive pairing setup. One thing I hear about Vim setups is that pair
programmers tend to not customize their Vim keymaps. With RubyMine,
that's not an issue thanks to a feature called "Quick Switch Scheme"
which allows very fast switching of keyboard bindings. I'm a Vim user
(IdeaVim), and I would have been crippled without my favorite RubyMine
Vim bindings. I like the "Quick Switch" feature so much that I made a
short screencast on this
I use a combination of the fastest cable and the fastest DSL I can buy
in Maui, served on a load-balancing ZyXEL ZyWall USG 50
DSL is far slower than the cable service, but I still keep it for the
one day that cable is not working right. As an additional backup, I have
a Verizon LTE tethering plan for my iPhone 5, so the chances that I'm
totally out of Internet are low. Here's a screenshot from
Same Big Monitors
We both used Apple 27" Cinema
Displays. On the receiving side of the
share, I'm using a 2012 loaded Retina MacBook Pro with SSD.
I use a Blue Yeti USB Microphone Silver
mounted on a Heil PL-2T Overhead Broadcast
with a Blue Microphones The Pop Universal Pop
(At the time of writing this article, the pop filter is only $25.22 on
Amazon Prime, regular price $79.00, totally worth it!). This is the
setup I use for podcasting so it's more than adequate for pairing. I use
the audio from the Display Monitor (Cinema Screen), as that's behind the
mic, so as not to cause any echoing. Naturally, this only works in a
private office. In a shared office, it's critical to have a very good
mic/headset combo or a good mic. The Blue Snowball mic does a pretty
good job of filtering out background noise.
Use Google Hangouts
or Facetime on a mobile device to share video of each other. Prefer
that over using Google Hangouts on your computer due to CPU usage of
Google Hangouts. I really like the iPad mini with the Apple folding
cover. It fits right under the Cinema
Use large screen for screen sharing, an tablet for Google Hangouts.
Don't be afraid to try your regular tools, such as
Use fast broadband, fast Macs, same size monitors.
A good audio setup is well worth it.
If the computer sharing the desktop has multiple monitors enabled,
then the remote sharing viewer might not be able to use command-tab
to switch applications. This problem went away when there was only
one monitor on the computer doing the sharing. It might depend upon
whether the cmd-tab is showing on the shared screen.
If using RubyMine, install your pair's keybinding into your RubyMine
preferences. You can copy the keybinding xml file located in
~/Library/Preferences/RubyMine60/keymaps and then restart
Consider putting Screenhero in Full Screen mode to avoid any
compression of the window pixels. This is especially important when
trying to click or drag on the remote machine, such as resizing the
chrome inspector area.
Don't forget to take a break for water, stretch, etc. every so