Tilde’s Pairing Setup
by Tom Dale
Yehuda Katz and I spend the majority of our time pair programming on client projects and on our open source projects like Ember.js. As in any profession, it’s important to be “foaming at the mouth crazy” about your tools.
Since Tilde moved into our new offices, we’ve finally put together what I think is our dream setup that I wanted to share.
Hardware
The crown jewel of the setup is a brand new 3.4GHz 27″ iMac with a 256GB SSD and 1TB hard drive. This thing absolutely screams, and is a joy to use. On our last pairing setup (a Mac mini with a 5400rpm hard drive), we would cringe when we had to bootup VMware to test Internet Explorer. On this thing, you can’t even tell that you’re running Windows virtualized. It’s insanely responsive.
We prefer being able to face each other, and modeled our setup after Josh Susser’s post about his pairing setup at Pivotal. Sitting side-by-side has always felt awkward to me; and the ability to easily have a face-to-face conversation is critical. This also allows us to more easily deliver high-fives after slaying a particularly hard bug.
We orient our desks at a right angle, and plug an external 27″ Thunderbolt Display into the iMac with mirroring turned on. This allows us both to see the same content at the same resolution. We both get a Bluetooth keyboard, and Yehuda uses a Magic Trackpad while I prefer the Magic Mouse. The ability to have your own space to keep drinks and other personal belongings is a big win. I can also customize the keyboard to my liking, since I prefer mapping Caps Lock to the Control key and Yehuda hates it. When we’re not pairing, we can use either the Thunderbolt Display or the iMac as external monitors for our laptops. The display also serves as a nice USB hub for charging iPhones or other devices.
Perhaps most critically, we hung the biggest whiteboard we could find on the wall next to our station. There are few problems a good whiteboard diagram can’t fix.
Software
Yehuda and I both use MacVIM with Janus as our editor. One major point of contention was file navigation: I prefer NERDtree and Yehuda prefers alloy’s fork of MacVim with a native file browser. (The native file browser drives me absolutely fucking crazy because I can’t navigate using just the keyboard; I have to pick up the mouse.)
We almost came to blows over this, but now that we have a 27″ display, we agreed to just use both.
We use zsh with oh-my-zsh. Our shell displays both the current git branch (if applicable), as well as the current Ruby version. Both of these have saved us countless hours of hair-pulling. We manage Ruby versions with Wayne Seguin’s indispensable rvm, the Ruby version manager.
For communcation, we use Propane to hang out in various Campfire rooms and iChat to log on to AIM, where we have separate pair accounts so that there is no feeling of invaded privacy. We use Dropbox and Lion’s AirDrop feature to shuttle files back and forth, and use the surprisingly powerful speakers in the Thunderbolt Display to do our standups via Skype.
I couldn’t be happier with our setup. If you haven’t tried pairing, I recommend it; while it sometimes feels slower, you avoid many of the obvious mistakes that one can make when spending hours in isolation. I also think that the software you write tends to be better if it’s constantly being sanity-checked by someone else.
If you have your own pairing setup, what improvements would you make to ours?
Edit: I forgot the most important component of a successful pairing setup:
Edit 2: Updated to clarify that the second display is mirrored.




oh-my-zsh it’s oh my god very slow and overloaded with an unnecessary distracting crap. I’ve spent a few hour to read the zsh tutorial and write my own ZDOTDIR with necessary stuff. And it’s very fast and I proud that I was able to understand the guts of zsh
@Dmitry
That’s cool, mind linking it to us, I’d love to ditch oh-my-zsh for something lighter, and to read and learn from it!
I really like those desks, what kind are they? Also, do you have an opinion on chairs, or why you picked the ones you use?
A good zshrc doesn’t take a lot of effort. The most time I spent on anything was my prompt.
Here is my zshrc if you want to have a look: https://github.com/samsonjs/config/blob/master/zsh/zshrc
I tried oh-my-zsh and it looks like a nice way to get started, but if you already have a zshrc you’re probably better of just continuing with it. My shell config doesn’t need to be a framework.
Thank you for the write up! Would you mind posting your PS1? Does the “*” imply there are uncommitted changes on the branch?
What would be very interesting is how you cope with a 27′” screen. What I mean is how do you organize the applications on the screen while coding. When I code with a large screen and the macbook screen at the side, I usually open the text editor and the terminal at the large screen, and open the browser at the macbook’s screen – for testing web applications at the localhost.
Interesting setup. With regards to file navigation, I hardly use NerdTree with Vim. I mostly use Command-T and when I use the NerdTree, I’ll often close it right after I’m done with it… I wouldn’t imagine it would be source of so much confusion and I agree that having to use the mouse for opening files in Vim would drive me crazy too…
I’d also suggest the magic of Command-T or CTRL-P. They are like Quicksilver for your files.
I’d like to point out that Yehuda is wrong (I feel like that isn’t often). Though I’d be curious to hear his reasoning on why mapping Caps Lock to the Control key isn’t a good move.