Why StoryBoard for OpenStack ?

Published: Thu 08 December 2016

By ttx

In Info.

The StoryBoard project was started a few years ago while we were looking for (and failing to find) alternatives to Launchpad. Now that we are getting closer to being able to roll out StoryBoard for task tracking across OpenStack projects, it's not useless to come back to what motivated this project in the first place. We are used to Launchpad after all, and it served us well. Why change ?

Workarounds

One thing to remember as we start discussing this is how much we worked around Launchpad's limitations. It's difficult to use Launchpad to organize our work, so we all used a variety of other tools to do that. I witnessed this first-hand while doing release management: teams would use Trello boards, etherpads or Google docs to maintain unwieldy lists of out-of-sync links to RC1 bugs and reviews, because Launchpad "priorities" and milestone targeting were not exactly cutting it. We got used to those workarounds to the point where we don't see them anymore, but that doesn't mean we should forever renounce having everything in one tool. Another issue is that every team would use its own set of workarounds, making it hard to discover. For someone working on multiple teams, those ad-hoc workarounds made it very difficult to have visibility inside the processes of each team.

Going beyond Launchpad's limits

We originally chose Launchpad because it's a great tool to track tasks across a complex community. The concept of Bugs being project-neutral but having a number of tasks affecting different projects is perfect: you can describe a single problem you are trying to solve and then list all the tasks affecting all the teams that will need to coordinate fully solve it. Most other trackers maintain stronger isolation between "projects", which make this kind of coordination harder. Launchpad worked well for us for a while. But as we added more projects, the list of tasks grew, and we discovered that Launchpad did not exactly handle that well for bugs with, say, more than 10 tasks. The UI would constantly hit timeouts which would prevent you from editing the status of any of those tasks. As a result, coordination on complex tasks moved to other tracking solutions like etherpads or git documents. There is nothing fundamentally complex in handling bugs with 50 tasks, though, and StoryBoard does not have the same limitation. It replicates the Bug/Task concept (we call bugs "stories" so that they can be used for more than just bugs) but without the complex data model and interactions that plagued Launchpad's performance when handling them.

API-first

The main issue we have with Launchpad is its API. It doesn't reflect all the features of the web UI, nor does it expose the full data model. You can propose fixes to exhibit those (as I did for pieces of the blueprint data model), but that doesn't change the fact that it's not API-first, so you are always playing catch-up. The other thing is that the API also happens to be barely usable. I mentioned above that the UI would frequently timeout when manipulating bugs with a large number of tasks, but the corresponding API calls would also timeout and fail whenever you manipulated large bugs. That made most scripts very brittle and almost unusable in automation. The API is important, because if there is a strong API you can work around any UI limitation, and deeply automate your tasks. StoryBoard is API-first: the web UI is actually a JavaScript static page making REST calls to an OpenStack-like API server. You can actually do more with the API than with the UI, and the UI is just one possible way to use the API.

Not being stuck with UbuntuOne

Launchpad uses UbuntuOne OpenID for authentication, and you can't use anything else. Since we required it for Launchpad, we ended up using it as authentication for most of the upstream development properties: review.openstack.org, wiki.openstack.org... But OpenStack also has its own OpenID authentication (OpenStackID), used in your Foundation profile, which you use for most of the downstream activities (registering to summit, voting for Foundation individual members etc.). That creates a number of issues when we need to connect those identities, like for example to know who signed the CLA. A single identity would solve that. StoryBoard accepts any OpenID provider: it uses UbuntuOne currently but can easily be switched to OpenStackID authentication whenever we are ready.

Why not push modifications upstream and/or run our own ?

Now the question is, couldn't we just improve Launchpad so that it suits our needs, rather than reinvent the wheel by writing our own ? It is, after all, developed under AGPLv3. We can (and some of us did) push a number of changes to Launchpad. The issue is we are now hitting opinionated changes (like wanting to use the Bugs backend for features, instead of the Blueprint backend), or complex ones (like solving the whole data model issue that triggers those damn timeouts). Without upstream support this is likely to be an impossible task, and the bugs we filed over time did not exactly generate much upstream excitement. We could fork it, modify it and run our own... but Launchpad is notoriously difficult to run as a standalone instance -- we happen to have a lot of ex-Launchpad devs in the OpenStack community, and they all advised us against trying that path.

So where does that leave us ?

We spent years evaluating alternatives. We created a set of requirements, and no existing solution offered them all. An experimental OpenStack infra project, called StoryBoard, was started based on those requirements. But it went slow and we continued to consider alternatives. We came very close to implementing one such alternative solution (Maniphest) but it was missing one of our key requirements (an API-first design) and their developers were not really interested in bending their product to support our (admittedly specific) use case.

Fast-forward to today, where there is an organization outside of OpenStack using StoryBoard, interested in supporting it in the future, and willing to help with getting the must-have features we may still be missing. It feels like this option has the most potential to become the one and unique task tracker across OpenStack projects, so we are now reaching out to power users to identify and cover all those must-haves before starting any large-scale migration.

links