Relevance, Inc. | Blog

Stuart Sierra
Notes on Remote Pairing

Posted by Stuart Sierra on Sep 02, 2010
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 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!

Justin Gehtland
Come to Relevance and Be Excellent

Posted by Justin Gehtland on Aug 31, 2010
Earlier, we posted that we were seeking some new PMs for the Relevance team. At that time, I mentioned that we were always looking for great technical folk as well. I think that deserves its own post.

Our team is growing pretty fast. Our combination of technology platforms and deep devotion to the people side of software is resonating really well with our customers and we want to encourage and enable that growth. So what are we looking for? I’m glad you asked.

Are you excellent at Ruby and/or Clojure? Can you work sitting next to somebody who is at least as smart as you, pairing on solutions to wicked problems? Do you want to work on open source or community projects 20% of the time? Can you jump back and forth between small apps for early-stage startups and giant systems for Fortune 100 companies? How good are you at ping pong? Can you demonstrate a history of having an impact on the projects you contribute to? Do you practice TDD and have strong opinions about testing frameworks (we have an ongoing war over Cucumber here, and we need more combatants)? Have you read Cryptonomicon, Daemon or The Black Swan? Do you like to speak at conferences or write awesome blog posts about cool technology? Are you comfortable getting direct feedback about your work? How many of the founders of GitHub can you name?

If you found yourself in the questions above, we want to talk with you. We’re looking for full-time or contract technologists. We especially want people who can work in our Durham office, or who live in DC. Come be part of something growing, special and fun.

Drop us a line at

Chris Redinger
The Relevant Bits – 08/30/2010 Edition

Posted by Chris Redinger on Aug 30, 2010
New point releases, new projects, and more info about the first clojure-conj. Here are The Relevant Bits from last week’s “20%” time:

Lots of planning and organization on the (first clojure-conj). This is an event you are not going to want to miss! We will be unveiling the fruits of this labor later this week. Keep a close eye on the website for more information.
David released Incanter 1.2.3.
Jared released Errbit, the open source error catcher that’s Hoptoad API compliant. Read more about it in his recent blog post.
Rob released watch-me-now 1.9.0
Jared can’t let a week go about without an improvement to PDFKit, this week, announcing PDFKit 0.4.5.
Stuart S also contributed his weekly improvements to Lazytest.
Aaron updated labrepl to work with the latest Compojure.
Jared Pace
Introducing Errbit

Posted by Jared Pace on Aug 24, 2010
Here at Relevance, we use Hoptoad for tracking exceptions in our Rails apps. It’s great because it gives us a heads up when something goes wrong but it doesn’t bury us with tons of email. So, when we found out we couldn’t use it on one of our client’s apps due to firewall and data confidentiality requirements, we were naturally upset, but we worked around it.

We ended up using a mix of Chatterbox and CapGun to track exceptions and deployments. While this works great, it requires a bit more configuration and doesn’t have some of the features that we’re used to with Hoptoad. What’s a developer to do?

Needing a new project to work on for my Open Source Fridays, I decided to try to tackle this problem. As a result, I’m excited to announce Errbit, the open source, self-hosted error catcher.

Errbit is API-compatible with Hoptoad. This means you can just configure your Hoptoad notifier to send errors to your Errbit server.

It is a pretty standard Rails 3 app that uses MongoDB+Mongoid for the persistence layer. If you have experience with MongoDB and deploying Rails apps, it shouldn’t be too much of a learning curve to get up and running.

Take it for a spin and let us know what you think. In the spirit of open source, feel free to fork it, contribute features, or white label it for a more personalized look that your clients will recognize.

Big thanks to Michael Parenteau for his awesome design work on the UI and of course to Relevance for giving me Fridays to make cool stuff.

Note: After developing Errbit, we discovered that Hoptoad does offer a “Hoptoad behind your firewall” solution. Definitely check it out if you want a fully supported exception notifier that has to sit behind a firewall.


Apps Index
App Show
Errs Index
Chris Redinger
The Relevant Bits – 08/23/2010 Edition

Posted by Chris Redinger on Aug 23, 2010
What have we been doing with our “20%” time the past couple weeks? Read on to find out. It’s been a busy couple of weeks in the Clojure and Ruby world for us.

The (first clojure-conj) was announced. This event is being organized by Clojure/core and Relevance, Inc. Make sure to sign up if you are interested in attending this fantastic opportunity.
Clojure/core released Clojure 1.2. If you’ve been waiting for the official version to be released, the time is now!
Alan has been organizing several successful Triangle Hackerspace meetups. Come on by on a Tuesday night if you are in the Triangle area!
Rob released a very early version of Nachos, a tool to help you keep all the git repos you care about in sync. Currently it just handles your GitHub watched repos, but feature requests are requested.
Shay organized an awesome DevNation in San Francisco, and even delivered a talk about “Getting to Minimum Viable Product.”
Chris spent a week hanging out at EngineYard hacking on open source software with Carlhuda.
Aaron & Stuart S modularized Clojure contrib. Especially if you are a Clojure lib author, read this message.
Jason, Jess & Michael released the Venture Dojo website.
Stuart S has continued development on Lazytest, his BDD testing framework for Clojure. It is still in an alpha state, but worth checking out to see where he is going with it.
Michael released dribbble_desktop, a project for scraping rss feeds of shots from Dribbble.
Chad updated his Vimlander 2 config. In addition to other tweaks, he has brought the best Vim config up to MacVim 7.3 compatibility.
Aaron, Jon & Stuart H brought labrepl up to Clojure 1.2 goodness. If you are new to Clojure, this is a great way to learn!
Jared released version 0.4.4 of PDFKit. If you need to create PDFs, definitely take a look at this library.
Alan created a new project reconfig for Reloading configuration files in Clojure daemons.
Browse Our Archives »

200 North Mangum Street
Suite 204
Durham, NC 27701

phone 919.442.3030

Follow Relevance on Twitter Fork Relevance Open Source projects on Github Blog Archives

How We Work…

If you want to get technical

For the
Stakeholder For the
Developer For the
If you want to get real technical »
About Relevance
Our Work
© Copyright 2010, All Rights Reserved
Relevance Inc.

200 North Mangum Street
Suite 204
Durham, NC 27701

phone 919.442.3030
Relevance is a B Corporation