Increasing Pivotal Tracker Usability with Shorter IDs

We’re using Pivotal Tracker to manage the backlog on my current project. I initially really appreciated the simplicity of the way Tracker presents stories just by their human-readable name. But as the project progressed, there came a point where there were so many stories that it started to become difficult to find stories quickly.

One of the clients made a mention in passing about how they wished they had a short story ID like they had seen in previous projects. Having previously worked with JIRA’s project-unique issue-ID system, I realized how much easier it would be to make quick reference to existing stories, and started looking for a solution.

Wanted: Short Unique IDs

The root of the problem lies in that Pivotal Tagger seems to use a global story ID numbering scheme. As such, the IDs of stories in your project are quite long. New story IDs can be observed as increasing, but are usually not sequential. As such, taking the last few digits of the pivotal-assigned story ID is not guaranteed to point at a unique story in your project.

As an experiment to verify that the pivotal-assigned IDs would be in conflict often enough to cause issues, I made a CSV export of all the pivotal stories in our project, and found that I would need 5 digits of the ID to be able to uniquely identify every story. Since the project had fewer than 1,000 stories, I found this unacceptable and went searching for another solution.

New Story IDs via Ruby Script

What I came up with was pretty simple — just rename the stories with a unique ID similar to the ones used by JIRA. Initially, I attempted a proof of concept using Pivotal Tracker’s CSV export/import functionality and a spreadsheet editor. Even on my relatively small project, I was already hitting the Tracker CSV story count limit, so this was unacceptable.

Luckily for me, Pivotal provides a pretty nice REST API with more than enough power to accomplish the job. I took an hour out of a Saturday and implemented a Ruby script that will prefix all the stories in a Tracker project with a new story ID of the form “KEYNAME-ID”. The script can be run multiple times and will pick up any untagged stories and give them new IDs. You can find the script on my github page.

These story IDs have proven to be extremely useful when conversing about stories in the backlog. They’re easily searchable and pretty easy to remember.

What seemingly minor functionality have you added the tools you use that’s proven to be more useful than you had anticipated?