An informal survey conducted earlier at Pivotal Labs asked “how often do you rotate pairs on your project?” The answer for the Best Buy Remix team is usually every two days, but three days is the hard stop. It was about the same when I worked on the Palm Pre apps. But back on Mavenlink, we rotated ever single day.

Instantly I wondered why there was a difference. I really liked rotating every day on Mavenlink, and my gut feeling has always been that rotating that much on Best Buy wouldn’t fly at all. I think the difference is tied to story size.

At Mavenlink, a one point story is 10-15 minutes of work, like “Change the text to read…”. Two points is half a dayish of work, and four was a whole day plus a little kind of task. In comparison, on Best Buy we don’t really have many 10-15 minute tasks. Really the smallest story we see with regularity is about half a day’s worth of work – some of that is due to our client being off site and in a different time zone – so those get one point. Then two points for 1-2 days worth of work, and four points for something that might take nearly all week.

So looking at it that way, in both situations, we rotate after 2 to 3 points of work have been completed. That seems about right. Two points may equate to one day, it may equate to one week depending on your project, but I think if you use the Pivotal Tracker scale, two points is about the time you ought to think about rotating. Any more and a pair starts to “get married” and knowledge doesn’t get shared through the group. Any less and the pair can’t get enough knowledge around a problem to be able to solve it.

Despite our different rotation patterns and point values, there seems to be an underlying rule for rotation. In the middle of the scale, from trivial to monolithic, is a sweet spot where pairs can get things done, feel accomplished, and move on to a different task.

Working for Pivotal Labs is different than any other software shop I know. A big part of this is that it is easy to feel good about the product you’re delivering to your client. Another reason is that we constantly challenge our own practices, ensuring that we continue to do the right things for the right reasons.

Let’s assume Pivotal Labs emphasizes these things in this order:

Code Quality

Product Quality

Speed of Features Released

Whereas a typical client may want this ordering:

Speed of Features Released

Product Quality

Code Quality

It made me raise my eyebrow. First, this is a totally expected response to making code quality #1. I’ve been in those fights where devs want to refactor, and management wants a feature. It also could get under my skin that someone thinks that delivering features was “low on our list”. Then I thought about “why”.

We do deliver features quickly. Faster than any other place I know. This is true across all three projects I’ve worked on, and I assume all projects at Pivotal Labs. But the reason we can do that is largely due to code quality and concerns for product quality.

If my code was crappy, and patched, and buggy, and untested, each feature I’d add on would make the problem worse. And while it is true I could deliver the first few features this way with great speed, I can’t sustain it for long at all. Delivery speed drops off exponentially as time progresses that way. But if I refactor, write tests, and do my best to write good code up front, I can sustain that, even make incremental improvements as I go and deliver more features in the same amount of time.

Product quality focus also helps speed in a less direct way. If sheer number of features was indeed my focus, then my team may crank out features X, Y , and Z this week. When X,Y, and Z go public though, we may find that no one wanted Y, and Z, and so we wasted our time doing them when we could have been adding the killer feature that people did want if we had only “slowed down” and asked those questions of our product owners. In this way we don’t deliver “more” features, we deliver higher value features, meaning that the client gets a lot more bang for his buck.

Code quality is what we do. It enables us to deliver more features over time. Product quality lets us deliver better value. Together, they take care of the “speed” request that every client has.

It’s hard for me to be excited about participating when I feel like I can’t contribute ideas. Sometimes it is a very formal situation created by organizational structure, for instance I don’t see those enlisted in the army having much of a voice in how their platoon operates, let alone a base or the army as a whole.

It’s hard for me to be excited about participating when I feel like I can’t contribute ideas. Sometimes it is a very formal situation created by organizational structure, for instance I don’t see those enlisted in the army having much of a voice in how their platoon operates, let alone a base or the army as a whole.

I suspect any “knowledge worker” has the same struggle that I have. Even if one has crazy hair-brained ideas, they should be heard. If they are dismissed, reasons should be given for “why” so that the idea maker can form better ideas in the future. Topics should not be off limits for discussion- if someone is tired of re-hashing a conversation, perhaps he could reflect on why the same conversation keeps happening – and address the cause, rather than the symptom.

Today I was asked about times and pairs where I wasn’t stopping my pair to catch up, to get re-engaged. What I initially took for a skill gap, might actually be my reaction to an environment where I don’t feel like my voice is heard as much as I’d like it to. While it would be nice to feel safe and warm at all times in one’s life, I have to concede that I fail to stand up and make myself heard. It is uncomfortable for me to discuss an idea that someone has already shown to be disagreeable toward.

To me, an idea is a really special concept. Someone packages up his understanding of a problem, applies all of his history, and attempts to create a solution. At worst, he hopes his idea gets feedback, more information, more understanding, so he can better fabricate ideas. In a group, his idea may spark an idea in another group member who comes up with a great solution. But when ideas go unheard, it says to the thinking employee is a near-silent whisper, “Your experience, your life, is not worthwhile.”

That whisper is my Achilles Heel. I am looking for resources that will help me combat those situations. Methods that make me a more valuable team member – because I stay engaged – because I feel that the team is getting the full benefit of having me, and my experiences at its disposal.

Help

“How do I encrypt a user account on a Mac?”

The short answer is to use the FileVault. The drawback is that disc corruption will eat the entire home directory, instead of maybe just eating part of your home directory and leaving you some salvageable files. [Time Machine was also suggested as a possible solution for encrypting user data.]

Correction: TimeMachine, the back up util that comes with OS X, has trouble with the FileValut due to the encryption.

Interesting Things

Erik Hanson points out that Amazon has released a web service called Elastic MapReduce which aims to “easily and cost-effectively process vast amounts of data [in parallel]”. It supports development in Java, Ruby, Perl, Python, PHP, R, or C++. MapReduce is already being used to run a test suite by one of our clients.

Related to MapReduce and Hadoop (the framework tused by Amazon’s MR) is Zvents’ HyperTable which enables the use of structured data with high performance. HyperTable will be presenting at GoGaRuCo.

StackHub, a tool for making “the collection, analysis, reporting, and notification of your application logging events easy”, is looking for Beta users (Java only). Stack Hub is in the same category as services like HopToad, but promises to differentiate itself from the pack.

Interesting Things

Amazon, in a push to make “cloud computing” a tangible concept, deployed blimps as part of its new FACE service which supports 65K+ EC2 instances, with 40% of their power being generated from solar cells on the blimp surface. San Francisco pivots seemed to like the idea that a data center could be earthquake proof given a recent shakedown in the south bay.

Help

“Overriding attributes in form helpers seem to be skipped, and the attributes in the database are used instead. Is there a reason this behavior makes sense?”

Adam will be submitting a patch that allows overriding of attributes. It as mentioned that the existing behavior might be useful in the error case of a pre-coerced form.

Interesting Things

v802 of RubyMine does not auto save when focus is lost. A bug report has been submitted. Along those same lines, RubyMine is nearing a public release, now is your chance to vote up any features you want to see. Cucumber support was explicitly mentioned.

Rails has been selected for Google’s Summer of Code. While we may not be students, there are opportunities to be a mentor.

Be wary of an ad provider: Some ads will redirect your users to unwanted destinations. Placing the ad inside an iframe will let the ad do what it wants to do, without hurting your user’s experience.