Remote Pair Programming Tips using RubyMine and Screenhero (Zoom)
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 eye contact!
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
Screenhero
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 support.
RubyMine IDE
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 feature, displayed below.
Fast Broadband
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 Router. 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 http://www.speedtest.net
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.
Audio Setup
I use a Blue Yeti USB Microphone Silver Edition mounted on a Heil PL-2T Overhead Broadcast Boom with a Blue Microphones The Pop Universal Pop Filter. (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.
I did a quick search on Amazon to see what's available for headsets. If budget allows (and if you're spending a fair bit of time pairing), I'd consider the V-MODA Crossfade LP Over-Ear Noise-Isolating Metal Headphone (Gunmetal Black) plus the V-MODA BoomPro Gaming, VoIP Headset Headphone with Mic, Black as both have a very high number of 4+ reviews. It's suspect that with the right audio setup, the avoidance of distractions for an in-office/remote pair combo might be superior to that of the in-office pair combo. Please post into the comments if you have advice on the best headset for pairing.
TLDR Miscellaneous Tips
- Use Screenhero for screen sharing.
- 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 RubyMine.
- 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 RubyMine. - 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 often!
Finally, click here for OMG, LOL, on an alternative reality of working from home.