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

Let us know how we can contact you.

Thank you!

We'll respond shortly.

Will Read

Posts By

Announcing Cloud Foundry cf v6

You can find our new Cloud Foundry CLI, written in Go on github.

A complete rewrite, and yes, we changed things

We hadn’t been happy with the Ruby CLI for a while. We had three big problems: it was hard …

Read more

Read More

XP on Ruby Rogues

I had the pleasure of appearing on the Ruby Rogues podcast this week talking about how Pivotal Labs does Extreme Programing (XP). Accompanying me was ex-pivot Josh Susser, James Edward Gray, Avdi Grimm, and Charles Max Wood. I had more …

Read more

Read More

Cucumber: When to Use It, When to Lose It

I had really poor experiences with Cucumber. The annoyance with Cucumber comes nearly all from a case of indirection. If devs are writing the Cucumber tests and then writing all the regular expressions to implement the steps, then you often …

Read more

Read More

Org Chart Growth and Keeping Our "Flatness"

We’re growing. You may have heard that we were acquired in 2012. You might also have heard that we’ve been spun out again as a core part of a new company that shares part of our name. From when I …

Read more

Read More

Releasing When It's Ugly

This is yet another post where the tl;dr is “SHIP IT!” but with a Pivotal perspective. It can be easy to hold back an initial launch, especially when you’re trying to attract customers, not offend them. I submit that with …

Read more

Read More

"Drinking the Kool-Aid™" How We Create Value Alignment

Over my four year tenure at Pivotal Labs I’ve heard it a lot: “You guys really drink the Kool-Aid around here, don’t you?” and I’d shake it off with a joke, “Yeah, you can grab anything from the fridge you …

Read more

Read More

Get Personal, Get Feedback, Get Better

One of our directors shared this article with the managers here at Pivotal Labs about having a personal retrospective. It immediately sparked a healthy debate, and I latched on to the idea because I think it fills a very real hole in getting feedback. We do great at gathering, weighting, and aggregating feedback from a pivot's peers and delivering that in a constructive way. However, we don't have a great way to get direct feedback on a level above the day-to-day pairing feedback. To see if it would be useful at our company, we needed to try it out so I volunteered. In addition to learning about myself the personal retro had several unexpected, positive effects. My experience was very personal and I'd be happy to talk about it in more details in person - what follows here are my findings on how to run one successfully in the hopes that others will find this tool useful as well.

Read More

How to do Google Apps SSO in Ruby

Google has a ton of APIs, and a fistful of authentication methods to match – everything from  3-legged OAuth2 to proprietary protocols like AuthSub. I’m in the middle of building out a One-click installable Google App for Enterprise/Education (ya know, …

Read more

Read More

Experience Report: Engine Usage That Didn't Work

On the project I'm currently working on we have a main portal that provides a user registration system and a generic billing mechanism. It also has several sub applications which need to know some information about the user and be able to publish billing events. With a fairly easy to articulate boundary, we thought it might make sense to be deliberate in how we organized our code - we came up with three main solutions:

  1. One big app, just use namespaces
  2. Create the portal and expose API endpoints over HTTP to get user data and set billing data.
  3. Create the portal, and have each sub application contained in a Rails Mountable Engine.

Our Boulder office had been making some noise about Rails Mountable Engines for some time, gave a presentation in the SF office, and I had experience working with engines both in the dark times of engines in Rails 2.x and the markedly improved days of Rails 3.x, and even better still in 3.1+. We had need to scale one sub-component of one of the applications independently, but not entire apps as the primary usage of the system would be low-volume. We set off down the engines path...

Read More

Postgres features n' bugs


  • Potential Heroku/PG/hstore bug in 9.1.3

One of our tables was using an hstore to collect data (a really big json object). We discovered that the primary database on staging was using PG 9.1.3 while our acceptance & production apps were using 9.1.4. Pushing this very large (58K) object into the hstore caused a Postgres failure:

ActiveRecord::StatementInvalid: PGError: ERROR: cannot execute INSERT in a read-only transaction : INSERT INTO "xxxx" ("created_at", "data", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id"

while saving the same data into our acceptance app did not cause the error.

We suspect that there is a bug in PG 9.1.3 when inserting "big" strings into an hstore that is fixed in 9.1.4.

We promoted a new 9.1.4 db on our staging app. This cleared our problem.

  • postgresql_cursor and streaming in rails

We were able to stream the contents of a table to the user without loading the whole dataset into memory.

  • RubyConf CFP ends Friday

It's in Denver this year.

Read More