Glad You're Ready. Let's Get Started!

Let us know how we can contact you.

Thank you!

We'll respond shortly.

Joe Moore

Posts By

Simple BDD Android Testing with Robolectric

At Pivotal Labs, we’re all about TDD and BDD. Android testing is no exception. On a recent Android project we relied on the trusty combination of JUnit and Robolectric for fine-grained unit tests. We were excited to try the Espresso BDD framework for Android, as we were attracted to its syntax and ability to drive the emulator.

Read more »

Persistent Google Hangouts for Distributed Teams

(Note: this is a companion piece to Simon Holroyd’s post: Do the Google Hangout Hop)

Our teams have had success of using an iPad for remote presence help remote team members be as “present” as possible. We’ve used this setup when remote developers were joining co-located teams.

Read more »

An iPad Remote Presence Device

For years I’ve been searching for a simple, high quality remote presence device for remote team members. No, not a robot! Not even a Double Robotics “iPad on a Segway”. Robots aren’t simple.

At Pivotal Labs, most of our projects reside in one of our offices, and all team members work from there, but sometimes remote team members join the project.

Read more »

How We Use tmux for Remote Pair Programming

Update 07/18/2012: We have added tmux-vim autosaving support as a Vim plugin. It's available here:

Update 07/20/2012: There is a lively discussion on Hacker News about this post in addition to the comments below.

tmux is the cool kid on the block for remote pair programming, as long as you are using a terminal based editor such as Vim or Emacs.

There is no shortage of tutorials and guides regarding how to use tmux, thus my only introduction to tmux will be this: tmux is a terminal multiplexer and supports shared terminal usage.

Our large software project used tmux regularly for remote pair programming and settled on a configuration that has worked well for our team. Read on to learn about tmux's advantages and disadvantages vs. desktop screen sharing, why and how we used it, and how we addressed the many challenges of remote pairing using tmux.

Integrating Remote Developers: Intuitive, Flexible Video Conferencing

I recently blogged about about integrating remote developers with large development teams. An important but finicky part of bridging the gap between remote developers and the rest of the team is video conferencing.

How hard can this be? It's Skype, right? While most techies know how to use Skype to make video calls, the difficulty is managing headsets, external microphones, external speakers, and switching between all of these frequently throughout the day. Despite what Apple might tell you, it does not "just work", especially Skype, which has a particularly baffling user interface.

Early in our large project's history the following scene played out frequently:

  1. Office developer sits down at a workstation and Skype's a remote developer.
  2. They can't hear each other!
  3. Office developer finds headset is unplugged, plugs it in to Skype laptop.
  4. Still can't hear!
  5. Office dev opens the Mac sound preferences, clicks around a bit.
  6. Still can't hear!
  7. Office dev dives into Skype sound preferences… Ah-ha! Select headset.
  8. Still can't hear!
  9. Remote developer starts messing with his own preferences, settings, cords…
  10. Bingo! Finally, they can hear each other, but suddenly…
  11. Someone in the office needs to talk to both developers.
  12. Office dev starts changing audio settings again, plugging/unplugging stuff…
  13. After several minutes a group conversation can be held.
  14. Group conversation is over. Go to Step 1.

The Need: Intuitive, Flexible Video Conferencing

Actually, it's mostly about the audio: the video usually works fine. We needed a means to easily switch between pairing-mode and group-conversation-mode -- that is, between headphones + mic and external speakers + external mic. Above all else we wanted to avoid constantly changing software preferences. We needed something as easy as pressing a button or plugging/unplugging a single jack.

So far we have found two solutions that work well:

  • Solution 1: External Speakers with Headphone Input: An external microphone, external speakers with a headphone jack, and regular "music" headphones.
  • Solution 2: Seamless USB Audio Input Switching for Skype: An external microphone, external speakers, a USB headset, and a bit of special Mac and Skype configuration.

Read on for more details.

Pair Programming Matrix

(Update 07/17/2012: Added link to Pair Programming Matrix Google Doc)

At Pivotal Labs we consider ourselves to be expert pair programmers, but sometimes even we need help. We identified (thanks to a retrospective) that we were being very unbalanced in our pairings: some developers seemed to pair with each other often while rarely paring with others. We wanted a lightweight means of enforcing balanced pairing. That's when someone remembered the pairing matrix.

Integrating Remote Developers into Large Teams

I'm obsessed with remote pair programming and remote collaboration. I've even given tech talks about remote pair programming. Most teams with which I've worked remotely are small -- usually around four to six team members total -- but for the past 10 months I have remote paired on a project of up to 30 developers. While the majority of the team was co-located in our NYC office, five of us were remote. Over that time we have tried many different remote collaboration and pairing setups and feel we've settled on a configuration that supports daily pair rotation with minimum overhead.

Introducing Android IntelliJ Starter and Android CI

We have been doing quite a bit of Android development over the last year and a half at Pivotal Labs. Over time we have compiled a set of go-to tools, and libraries, and configuration settings that help make our development process as productive as possible. We are excited to publish two open source projects, each with the goal of helping new Android development projects hit the ground running: Android IntelliJ Starter and Android CI.

Fast Android Debugging with IntelliJ

Sure, you can launch your Android app in IntelliJ's debugger, but that's slow. IntelliJ allows you to dynamically attach the debugger to a running device using the "Attach debugger to Android process" button. That's fast!

Android Tidbits 6/23/2011: Tabs and Colors

Pivotal Android Tabs

We have published a simple Android project that illustrates how to use tabs in an Android app: TabActivity, TabHost, TabWidget, and android:divider. Thank you Pivot Ryan, the original author, for taking the time to write and open source this. Check it out, fork it, and enjoy --

Tabs 1

Tabs 2

See Hex'd Colors

IntelliJ trick: in a colors.xml file, place your cursor on a hex value and hold down Shift. You'll see a large preview of the color.

Hex colors in IntelliJ

Colors and States

(Repost from the 6/22/2011 Standup blog): You can use a selector drawable to set Android text color for the various states (focused, selected, etc.) using a drawable xml file. IntelliJ will complain and say this is invalid syntax but the application will use the file as you would expect. This only seems to work for the android:textColor attribute in TextViews.