Pivotal Labs

Main menu

Skip to primary content
Skip to secondary content
  • About
  • Case Studies
  • Team
    • Executives
    • Locations
      • San Francisco (HQ)
      • Boston
      • Boulder
      • Denver
      • London
      • Los Angeles
      • New York
  • Community
    • Blogs
    • Tech Talks
    • Events
  • Careers
    • Lifestyle
    • Principles & Practices
    • Benefits
    • FAQ
    • Apply
  • Contact
    • Press Room
    • Press Releases
    • In The News
    • Press Kit
  • All
  • Labs
  • Standup
  • Tracker
Andrew Bruce

Procrastination, considered.

Andrew Bruce
Sunday, May 5, 2013

Last week I blogged about a new project for aiding in the hunt for test pollution, Scrubber. This is a personal side project that I began recently. It’s in the very early stages, like many of my other pet projects. It’s something I’ve worked on entirely alone, though I’d also love to collaborate with others and/or pair on it.

I was going to blog this week about the latest improvements I’d made to the code, and how it was going to improve the end-user’s experience despite being a mere refactor and a minor user interface tweak. I got bored after writing the first few paragraphs, and instead got distracted by the code, refactoring and tweaking it more than was necessary. A couple of hours in, I’d totally gold-plated the code in a way that I might have deemed unacceptable whilst on client time. This made me a little angry with myself: why was I procrastinating from blogging, and was I a bad developer who’d lost the ability to work alone?

Something we’re encouraged to do at Pivotal Labs is reflect on our behavior. Thinking about my boredom and procrastination a little, I realized there was something more interesting going on. The process went a bit like this:

  1. Start blogging about the new features. Paste the visual output of the program into the blog post. Realize that the output didn’t meet the requirement of improving the user experience.
  2. Start to implement the missing parts of the feature. Spend hours enjoying the freedom to refactor, delete and re-implement with no time limit, far more than when pairing on client time.

When we pair, we have a safety net to catch us when we get distracted by neat language features or elegant implementation tricks. Our partner will often remind us that we’ve spent, say, two hours making no discernible feature changes and no improvement to maintainability of the code. When soloing, however, especially on pet projects, we are free to choose a goal for the activity. Sometimes we decide to perform code katas, but other times we don’t consciously choose a goal: the goal could become apparent during the activity itself.

So it seemed that I’d accidentally found validation in what I was doing, and a potentially more interesting blog post at the same time. I’d managed to get some programming exercise in instead of banging out a not-quite-earth-shattering new feature. Specifically, I:

  1. Thought like a user until it became obvious that changes were still needed. Switched to developer mode by accident.
  2. Allowed myself to try out several approaches to the Presenter pattern, applying them to a trivial example that would not need a presenter in ‘real world’ programming.
  3. Used the Introduce Null Object refactor in a situation that didn’t call for it. Yet, it felt good and might even prove useful for the project later.
  4. Practiced several coding techniques that might become useful in the work environment.
  5. Temporarily inverted my work-based insecurities about performance and timeliness, providing stress relief as an unexpected benefit of my brain switching itself off from the task at hand.

Reflection is a useful technique for improving well-being. Your mileage may vary. If you’d have preferred to read about the changes made to Scrubber this week, you can read the commit history!

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Mark Rushakoff

Headphones in a pair programming environment

Mark Rushakoff
Friday, January 18, 2013

We strive to always pair program here at Pivotal, but occasionally there will be an odd number of people on a team and one person will not be pairing.  Sometimes, the solo developer will put on some headphones and listen to music while they code.  I posed a question to my peers recently:

Is there any harm in letting the soloing team member wear headphones and listen to music?


It seems that the main argument in favor of listening to music as a solo developer is that it makes it easier to focus on what you’re working on.  I, too, have found that as a solo developer, it’s very difficult to not pay attention to nearby conversations.

As it turns out, that’s only one part of the larger picture.  We need to consider how this affects the whole team.

When you stop listening to nearby conversations, you are missing out on opportunities to help adjacent pairs.  People seem to have a tendency to notice important words even when they aren’t paying full attention to a conversation — a nearby pair might be debating whether they should be using a FooWidget or a BarWidget, and perhaps you can answer all their questions since you were involved in writing both of the original implementations.  If you can save that pair time by overhearing the conversation and answering their questions, then you are saving the client money and delivering better value to them.

If you’re working on something as a solo developer that requires you to focus so hard that you need to block out audible distractions, then perhaps that story is better suited to a pair than a solo developer, or maybe the scope of that story is too wide.

At Pivotal, we take pride in having an open workspace.  To keep all lines of communication open, we don’t segregate people into cubicles or offices with closed doors.  However, wearing headphones puts up a barrier that says “Don’t bother me.”  The solo developer should be available to support the rest of the team however necessary, and support in a pair programming environment is not best accomplished from a distance.

I think that listening to music as a solo developer in a pair programming environment may offer some short-term psychological benefits to the solo developer, but overall it is detrimental to the team.

(Credit goes to Pivotal’s Adam Milligan for an original explanation of many of the reasons not to wear headphones while soloing.)

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Joe Moore

How We Use tmux for Remote Pair Programming

Joe Moore
Tuesday, July 17, 2012

Update 07/18/2012: We have added tmux-vim autosaving support as a Vim plugin. It’s available here: https://github.com/pivotal/tmux-config

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.

Advantages vs. Desktop Screen Sharing

  • Fast! tmux has the least latency of any collaborative code editing we have used
  • Addictive usage model: tmux’s multiple terminal pane usage model is very handy in general. Some of us now use tmux even when we are not remote pairing
  • No extra heavyweight software: if you have tmux and ssh access you’re good to go

Disadvantages vs. Desktop Screen Sharing

  • Requires ssh access and thus possibly a VPN
  • Extra overhead of learning and using tmux commands
  • Lack of desktop friendly UX, such as mouse support, function keys, ⌘ key
  • Only for terminal based editors, such as Vim and Emacs
  • Might still need desktop screen sharing for GUI-based tools and tasks: shared web browser for web development, etc.

Why We Used It for Remote Pairing

Due to network latency GUI-based desktop screen sharing was intolerably slow for coding. tmux made network latency a non issue. My personal experience was that tmux + Vim was so fast when working remotely that it was usually indistinguishable from coding locally.

Monitor Setup

We use two monitors: the iMac’s main 27″ monitor and a large (usually at least 24″) LCD rotated vertically.

We usually had iTerm running a shared tmux session on the large 27″ display and a desktop screen sharing session on the vertical display. The vertical display usually had the shared web browser visible since we were usually doing web development.

Challenges and How We Addressed Them

Most of our in-office developers only used tmux when remote pairing: the majority of their development was in-person pair programming using MacVim and “normal” tabbed iTerm. The occasional switch to terminal-based Vim within tmux and a bunch of tmux terminal panes was the most challenging aspect of using tmux as part of our development stack. The major difference were:

  • Automatic saving within MacVim was lost
  • No mouse support
  • Scrolling onerous in tmux
  • Copy-paste actions onerous in tmux
  • MacVim keymapping not fully supported in terminal Vim
  • Learning tmux specific commands

Read on to see how (or if) we addressed the above challenges.

Automatic Saving

Once you have automatic saving it’s tough to give it up. Our buffers automatically saved whenever MacVim lost focus. After quite a bit of work we were able to add automatic Vim saving support within tmux. It’s not as good as MacVim’s autosave, but it’s pretty close. Please see this Github pull request for how to set up automatic saving. (Note, I’ll update this post as the pull request progresses.)

Update 07/18/2012: Our tmux-vim automatic saving Vim plugin is available here: https://github.com/pivotal/tmux-config. We’ve also integrated it into our vim-config configuration here: https://github.com/pivotal/vim-config.

Mouse Support

By default tmux has very little mouse support. We enabled significant mouse support within iTerm by customizing our .tmux.conf:

  • Selecting tmux panes
  • Resizing tmux panes
  • Scrolling

See this .tmux.conf template for more, but here’s the interesting section:

 # ~/.tmux.conf
 # Enable mouse support (works in iTerm)
 set-window-option -g mode-mouse on
 set-option -g mouse-select-pane on
 set-option -g mouse-resize-pane on
 set-option -g mouse-select-window on

Note that iTerm supports this configuration. We cannot vouch for Mac’s Terminal application’s level of mouse support.

OS-Level Copy-Paste

Highlighting with the mouse triggers tmux’s text selection, which is not OS X’s highlighting, and thus ⌘+c will not copy the highlighted text. Though we never fully solved this issue there is a workaround: hold down the ⌥ key (ALT/Option) while highlighting to trigger OS X’s selection — ⌘+c will now copy the text.

tmux selection — OS X will not copy this

Holding ⌥ — OS X will copy this!

Unfortunately this technique does not respect tmux’s panes and will select across the entire screen, but it’s better than nothing.

MacVim vs. Terminal Vim Keybindings

Why did MacVim and Vim have different keybindings if both use the ~/.vimrc file? The answer is the ⌘ key. To ease the transition from RubyMine and TextMate to MacVim we mapped many common ⌘-based keybinding which were unavailable in terminal-based Vim. My personal advice is to stay away from the ⌘ key if your team uses both MacVim and terminal Vim, but if that’s not possible at least make an extra <leader> KEY mapping for everything that uses ⌘.

Take a look at our sophisticated ~/.vimrc setup, including the keybindings file, where ⌘ bindings are paired with non- ⌘ keybindings.

Learning tmux-Specific Commands

There’s no way around this one. Though mouse support means one can avoid the tmux-pane selection and scrolling commands I highly recommend learning tmux well if you are using it consistently.

In practice we only use a handful of tmux commands often:

  • CTL+b % – new vertical split
  • CTL+b " – new horizontal split
  • CTL+b o – switch to other pane. Repeat to cycle through.
  • CTL+b c – create new tmux tab/window
  • CTL+b n/p/l – switch to next, previous, or last tmux tab/windows
  • CTL+b [ – Enter scroll/copy mode

Here are a couple of fun ones:

  • CTL+b SPACE – change arrangement of panes. Repeat to cycle through various arrangements.
  • CTL+b w – list tmux tabs/windows
  • CTL+b , – rename tmux tab/window

Once your team gets the hang of it they might even prefer the multiple tmux-pane workflow to a multi-app, multi-tab setup.

It’s a Fast Paced World

With such a plethora of remote pairing software and configurations it’s impossible to keep up. We would love to hear about your own experiences remote pairing with tmux and how you might improve upon our own techniques and configurations. Please post comments and let us know what you think.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Joe Moore

Pair Programming Matrix

Joe Moore
Thursday, July 12, 2012

(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.

Pair Programming Matrix

A blog post titled “Pair Programming Matrix” inspired us to try our own pairing matrix. It’s a grid with a cell intersecting each pair of developers. Here’s a photo from the original article:

We thought we would give it a try, only using a Google Spreadsheet with some fancy conditional formatting instead of a whiteboard

Upshot

Overall the pairing matrix serves it purpose: it helps us have much more balanced pairings. We’ve been using it for several months and will likely continue using it so long as it seems useful.

It strikes me that a pairing matrix would be a good way for team new to pair programming to add a bit of helpful structure. I would hesitate to add this structure if it’s unneeded: “if it ain’t broke, don’t fix it.”

Pros

  • Exposes “holes” and “hot spots” when developers are not pairing together or pairing too often
  • Easy to use, reset
  • Can be a simple way for teams new to pairing to get started

Cons

  • Time off skews the matrix
  • Does not work well when team structure fluctuates often
  • Becomes unwieldily with larger teams

Examples

Here are some screenshots of pairing matrices at different stages. Team structures changed and thus the featured developers were not always the same, but you get the idea.

Early in the process. We already have a hot spot!

Pairings are starting to even out.

Over time we were much more balanced.

Eventually we needed to reset.

Too big!! We abandoned this and made the team smaller.

Make Your Own Matrix

By popular demand, I have made a blank, read-only copy of our pairing matrix, complete with conditional formatting. Feel free to duplicate it and modify the copy. Please post your own modifications and optimizations in the comments.

Link: Pair Programming Matrix Google Doc

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Joe Moore

Integrating Remote Developers into Large Teams

Joe Moore
Thursday, July 12, 2012

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.

Daily Standup Meetings

We set up a team Skype account and paid for Skype group video. Each morning the team would gather for standup in a large conference room and call us from the group video account.

It can be difficult for the remote members to hear everyone in such a large room. We used a Blue Snowball mic to aid with this, and it worked well so long as nobody unplugged it.

We had a team whiteboard where we would list technical tips, tricks, and cries for help. Every day someone would send the group a photo of the board. I’m sure we could have come up with a more technical solution but this has worked well for us, though it does take some extra effort.

If remote team members had items for the standup board they would simply speak up towards the end of the meeting; a scribe was taking notes and emailed them to everyone afterwards.

Dedicated Workstations

We settled on having dedicated remote pairing workstations in the NYC office, one for each remote developer. This is a departure from the norm. At Pivotal we swich pairing stations frequently and nobody (or everybody) “owns” a particular machine. For practical reasons the remote person really needed to own a single station to make remote pairing as efficient as possible.

Minimizing Setup Overhead

Remote pair programming often requires a bit of setup: configuring Screen Sharing, setting up tmux, launching and logging in to Skype, etc. With dedicated remote pairing stations this setup can be done once early in the project and (usually) left alone. Time spent on this overhead is minimized, and pairing could start immediately.

Virtual Presence

At Pivotal Labs, our offices have an open floor plan. To find someone you need only stand up and look around for them. But what about when you need to talk to Joe-in-Atlanta? Who’s he pairing with today?

A dedicated workstation for each remote developer becomes their virtual presence in the office. Everyone on the team knows where to find Joe-in-Atlanta. This is important not only for other developers, but also for product manager, project managers, designers — the entire team. My station was called “Little Atlanta” and we referenced it often in conversations: “Joe, I need to talk to you after standup today. I’ll meet you at Little Atlanta in a few minutes.”

Extreme Remote Pairing!

Occasionally two remote developers would remote pair for the day. What did we do then? We usually chose one of our dedicated NYC office stations and paired through that machine rather than our local (that is, home) machines. Why? Just as if we were physically in the office we wanted other developers to be able to see what we were doing and help us if needed.

We made ourselves available by setting up a group Skype call between ourselves and the workstation “Skype laptop” and letting everyone know where we could be found. This worked very well. Using this video conference we could ask for help and team members could seek us out as well.

Resources

  • Group Video Chat from Skype
  • tmux — terminal sharing for terminal-based pair programming
  • Snowball USB Microphone
  • Training Skype to Automatically Switch Between Audio/Video Inputs
  • Antoher “Skype Laptop” setup
  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Joe Moore

iPad 2 As A Remote Presence Device?

Joe Moore
Saturday, May 7, 2011

Since last summer I have been one of our few “remote Pivots” after I moved from San Francisco, CA to Atlanta, GA. Pivotal and I agreed that I’d try working remotely, remote-pair programming full time with fellow developers in our San Francisco and NYC offices. Overall it’s worked out wonderfully for me, my teams, and clients. I use the same technologies that fellow remote-Pivot Chad Woolley recommended in 2008 — a VPN connection, Mac’s Screen Sharing.app and Skype video chat, but we’re always looking for ways to more seamlessly integrate our remote developers into their teams.

With that in mind I became very excited when the iPad 2 was released, with its front-facing camera and FaceTime app. How perfect! For the last month our team has experimented using an iPad as a “remote presence” device for me.

How did it work out? Keep reading to find out!

The Setup

The goals were as follows:

  • Integrate the remote person more seamlessly with the team.
  • Offload cpu and network intensive video chat off of the pair programming machine.

As for why an iPad 2:

  • Ultra-portable.
  • Super easy to use.
  • Video chat software, FaceTime, is built in.
  • Less expensive than a MacBook Air (we’re an Apple shop.)
  • Less likely than a laptop to be borrowed and used for other tasks.
  • It’s an iPad! I mean, just look at the thing!

The Results

After a month of on-again, off-again iPad-Joe experiments with pair programming, meeting attendance and other tasks the results are in! Drumroll please…

The iPad 2 is a horrible remote presence device.

Overall, it’s a total bust. Oh well.

What Works

The iPad does function well as a remote presence device in a few cases:

  • Fully passive: If all I need to do is watch and listen then it works pretty well.
  • It’s very easy for a team member to pick “me” up and take me to a meeting, where I was a mute participant.

What Doesn’t Work

While the iPad has a ton of potential as a remote presence device, there are many kinks that need to be worked out first.

Skype

There’s no dedicated Skype app for iPad. The iPhone app works, but poorly, though it’s noise-canceling does seem a bit better than FaceTime.

FaceTime

FaceTime is the largest disappointment.

  • FaceTime “mutes” the remote person when the iPad-user is speaking. Also, the microphone is extremely sensitive, picking up all background noise. Thus, in our noisy office, FaceTime mutes me for most of the time. It’s like a walkie-talkie only random, or AT&T service in San Francisco.
  • FaceTime does not route sound through external speakers, such as the iHome iD9 device we tried, forcing all sound out of the extremely quiet internal speakers. Thus, even when FaceTime allowed me to speak, nobody could hear me.
  • FaceTime does not recognize external microphones other than the iPhone earbud mics. Other apps, such as Garageband, supposedly will work with mics like the Snowball (which has excellent noise cancelation) when connected via the camera connection kit.

Finally, hauling an iPad, an iHome, and a Snowball mic around the office totally defeats the purpose of ease-of-use and portability!

Many of these limitations might be solved via software updates. We’ll try again when Skype delivers an iPad app and when other iPad software updates come along.

(Edit: typos.)

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Pivotal Labs

Pairing tete-a-tete

Pivotal Labs
Thursday, December 9, 2010

At Pivotal Labs, we spend most of the day pair programming. The typical setup is an Apple iMac with a keyboard and mouse for each developer. We’ve been using the 24″ iMacs for a while, usually with a second 17″ display off to the side. But all our new machines are 27″ iMacs, and those are so big we don’t usually use the second display. The pair sits side-by-side at a desk facing the screen together. Here’s what it looks like:

side-by-side

We have had great success pairing this way at Pivotal. But while it is a good setup in a lot of ways, it falls short ergonomically. First off, both people have to sit off to the side of the display, which can cause leaning, slouching, and twisting to get into a position to both see and type. And it’s also hard to actually look at your partner without craning your neck around. Even though the desk is wide, keyboards and mice take up room, so there can be a lot of jostling and adjustment on the desktop, and chairs and such can collide as well. Those things aren’t terrible, but they do detract from the experience and my spinal fitness.

For a while I’ve been wanting to try and improve the situation. Earlier this year I sketched out a concept for how to set up a better pairing station. This week I’m pairing with Michael Sofaer, and we finally have the space, equipment and opportunity to try it as an experiment. Here’s how it turned out:

tete-a-tete-1

You’re doing it wrong!
tete-a-tete-2

The breakthrough is having a second display that mirrors the built-in display on the iMac. The second display and both keyboards/mice are all connected to the main iMac, so it’s one Mac system that can be used by two developers in collaboration.

Michael and I are both really loving this setup. It’s a lot more comfortable, we both get a better view of the screen, and it’s great being able to see each other so easily while we are working together. We are seated close enough that it’s easy to hear each other without raising our voices at all. And after a day of working in this arrangement I feel a lot better and my neck doesn’t feel out of whack.

Everyone who sees this setup asks if it’s hard to point at the screen to talk about stuff on it. I was a bit worried about how that would work out, but it turns out that using the cursor works great and it took almost no time to adjust to that. The one thing that feels a bit more difficult is watching for the subtle cues that let you avoid keyboard clashing. Experienced pair programmers will watch their partner’s hands in peripheral vision for hints about when they want to start typing or mousing. That skill takes most people a while to pick up, and I expect it will take more than a day or two for us to adjust to learning how to do that best in the new setup. But I think that being able to see my partner in my front quadrant view will more than compensate, once I learn new cues to watch for.

Equipment notes:

  • 27″ iMac + 27″ Cinema Display (or an iMac in display mode)
  • 6′ display port cable
  • 2 IKEA GALANT desks
  • 2 keyboards and mice
  • 2 gym balls :)

You can see in the photos that the tables are staggered. This is necessary so that the pair is close enough to be able to talk in a normal tone of voice. Sitting all the way across the table would not be intimate enough to work effectively. Our tables are 63″ long and 31.5″ wide. We found that offsetting them by half the width is about perfect.

Here is a sketch I made of a floor arrangement of multiple pairing stations. It’s easier to see the staggering here. You can also see how each pair is sitting closer to each other than they are to people in other pairs. Also notice this layout is biased for right-handed people. Using the opposite symmetry would be pretty crowded for mousing up against the edge of the table.

sketch

There is definitely an increased cost to set up tete-a-tete pairing stations. You need an extra monitor of good enough quality it can be someone’s primary display. You need an extra table per row, since the end spots can’t be used. (For us that’s not a problem since that would leave room for PMs to sit nearby.) The biggest issue for our office is that you need a lot more floor space for this arrangement. It probably uses more than twice the floor space of the old arrangement for an equivalent number of pairs.

I’m glad we had a chance to try this experiment, and I already consider it a success in terms of improved ergonomics and having a better view of your partner. Whether we’ll be able to use this setup long-term is a good question, one that I expect depends a lot on how much activity there is in the office. But I’m hoping…

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Joe Moore

Pivotal Tracker Pro Tip: Parallel Tracks with Labels

Joe Moore
Sunday, July 4, 2010

A frequent feature request for Pivotal Tracker is support for parallel tracks of development for multiple pairs of developers (you are pair programming, right?) It’s true that Tracker does not fully support parallel tracks within the same Project, but you can get most of the way there by doing what we do on many Pivotal Labs projects: use labels to identify multiple tracks of development. With labels, you can easily visualize and manage parallel development tracks while keeping your team’s work in one Pivotal Tracker Project.

A Tale of Two Pairs

It is a common scenario to have two pairs working on two unrelated feature sets. For example, your application will allow users to shop for and purchase products, and also have many administrative/back-end features. The team has identified that there are too many dependencies to have both pairs working on the shopping portion: one pair can’t work on credit card refunds if the other is in the middle of implementing credit card purchases. Thus, the team decided that one pair will focus on the shopping features while other pair works on important admin tools.

Parallel Tracks

“If it’s the most important story, put it at the top of the backlog” has long been one of our go-to suggestions. This is more difficult with parallel-track teams, as you have multiple number-one priorities. Labels to the rescue! Notice that we’ve labeled all of the shopping-related stories with a shopping label, and the administrative stories with an admin label:

Labels

Now click on the shopping label. Notice that we grow a new Search Results column for stories labeled shopping which has several interesting properties:

Search Results

  1. The number of stories labeled shopping.
  2. The number of points estimated for all shopping stories.
  3. Their normal prioritized order.
  4. Just like normal Tracker columns, the stories update if team members edit them.

Pin It!

After clicking the shopping label, pin it by clicking the little push-pin icon in the upper-right corner of the search results column. Now you can perform another search, or click another label, without losing your shopping column!

Pin Icon

Go ahead and click the admin label after pinning the shopping label.

Multiple Search Results Pinned

Now you have easy to visualize tracks of stories, priorities, and estimations, side-by-side.

Limitations

The label trick is a very handy tool for managing parallel tracks of development on your project, but it isn’t perfect. Ideally, if the shopping features are the most important for your project, everyone possible should be working on them. Implications of parallel development tracks in Pivotal Tracker include:

  1. Harder iteration planning: Tracker fills your iterations with the highest priority stories, but with parallel tracks you have multiple high priorities. In our example, Tracker fills the top of your backlog with shopping stories first and admin stories afterwards. The burden is on the team to either interweave the two tracks in each iteration, or group all of the similar stories together and “just know” that your admin stories are not actually weeks away but are indeed being worked on now.

  2. Predictability: Depending on how you use Release markers, some charts, such as the Release burn-down chart, become less useful. For example, some teams might create Release markers for shopping and admin as a way of grouping these stories together, but the burn-downs will be less accurate if teams are working on both sets of stories.

  3. Slightly harder to manage: One thing you’re sure to notice is that you cannot drag-and-drop within the search results panels, which means that you cannot re-prioritized the stories within the shopping and admin columns, though you can drag items from search results into the backlog. Also, if you add or remove labels, or re-prioritize, you will have to perform the search again refresh the column.

  4. Anti-pattern?: Some schools of thought, such as followers of kanban, might consider parallel tracks of development an Anti-pattern. Definitely weight the impact of fracturing your development efforts.

UPDATE: fixed wonky images.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Joe Moore

Pair Programming, Solo Futzing

Joe Moore
Friday, February 13, 2009

Pair programming is the subject of endless discussion and debate. How often should we pair — 25%, 50%, 75%, or even 100% of our development day? Should we pair on remedial tasks as well as feature development? What about infrastructure work or research? Is pair programming valuable at all, or should we kick that hippie kumbaya crap to the curb, put on our headphones, and get some real work done?

Personally, I’m somewhere in the 95%-pairing range. Simple stories and bug fixes have a way of becoming complicated (or implemented sloppily) when soloing. Infrastructure is a notoriously siloed realm and spreading that knowledge around can only help everyone. Investigating production database issues, estimating stories, writing CSS, chopping up images using Fireworks — share the love!

So what is the last 5% for? Futzing.

Futzing Around

I’m “futzing around” when I’m not doing anything important, maybe even wasting time, at least from a pure productivity perspective. Interestingly, while I’m not implementing features or fixing bugs, I’m expanding my mind. I’m learning in a way that is not conducive to pair programming or any interaction at all with other people: I’m exercising my personal way of learning that that is unique to me. Here’s an example:

On my current project, we’re using very advanced, powerful CSS selectors that blow my mind. While I understand what we are implementing and can see the immediate affect upon the application, it is impossible for me to grok the enormity of these techniques even though my pair is a master and great teacher. I’m learning, but not necessarily understanding. Collectively we are not in a teaching mode, we’re in a cranking-out-awesome-stuff mode. Now, I am not suggesting that we are hacking or moving too fast to learn — on the contrary, we are both learning much, and I often ask my pair to slow down and explain what the hell .div:first-child:not(.row) + .row is doing. Our joint mission, though, is to get stuff done, not to explore every CSS pseudo selector. I’ll futz around with that later.

Flipping Switches

When I’m learning something new, especially when it’s complicated, I eventually need to futz with it by myself, with nobody looking over my shoulder. I need to flip all of the switches, break it, fix it, break it again the same way, fix it, throw in a little salt and pepper and try again. I need to try every parameter individually, then try to combine them. I need to hack and not feel bad about it. I need to do stupid stuff that could never possibly work because, even if I’m told such, I need to try it myself. Finally, I need to do this for 30 minutes until the “ah ha!” moment hits me and all of the tumblers fall into place in my mind.

Why don’t I do this with a pair? Because I must be in the driver’s seat the entire time with no consideration for pair programming etiquette: talking things through, taking turns, letting my pair try his ideas — no way. I need those brain cycles to figure this stuff out, to make the mental connections that are shorting out. I don’t know what I don’t know, and I need to find out for myself, in my own dumb way, by futzing around and making mistakes. Finally, I need to more than learn: I need to understand. When I’m done, I will use that new understanding during the other 95% of my development time to help my team build the best products we possibly can, and encourage them to futz around a bit on their own, too.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter

Topics

  • agile (778)
  • rails (113)
  • testing (86)
  • ruby (83)
  • ruby on rails (70)
  • jobs (62)
  • javascript (54)
  • techtalk (44)
  • rspec (38)
  • activerecord (29)
  • productivity (29)
  • gogaruco (29)
  • ironblogger (29)
  • git (28)
  • nyc (27)
  • rubymine (25)
  • mobile (22)
  • bloggerdome (20)
  • cucumber (20)
  • process (19)
  • pivotal tracker (19)
  • jasmine (19)
  • design (18)
  • ios (18)
  • webos (17)
  • objective-c (17)
  • android (16)
  • palm (16)
  • "soft" ware (16)
  • fun (15)
  • tracker ecosystem (15)
  • ci (15)
  • cedar (15)
  • rails3 (14)
  • performance (14)
  • bdd (14)
  • gem (13)
  • selenium (12)
  • css (12)
  • goruco (12)
  • bundler (12)
  • tdd (12)
  • meetup (11)
  • railsconf (11)
  • nyc-standup (11)
  • capybara (10)
  • mac (10)
  • mojo (10)
  • chef (10)
  • rubygems (9)
Subscribe to pair programming Feed
  • About
  • Case Studies
  • Team
  • Community
  • Careers
  • Contact
  • Labs
  • Events

Contact Us

contact@pivotallabs.com
+1 415-77-PIVOT
TwitterLinkedInFacebook

Pivotal Tracker

Tracker is the award-winning agile project management tool that enables real-time collaboration around a shared, prioritized backlog.
Visit pivotaltracker.com >