With many thanks to Auralvance, we’ve got Fedora RPMs for FC9 up at our Contributed Builds page!
We’re working to get them into Fedora, so if you’re interested in following along, go add yourself to bug 453422 (on Fedora’s Bugzilla)
With many thanks to Auralvance, we’ve got Fedora RPMs for FC9 up at our Contributed Builds page!
We’re working to get them into Fedora, so if you’re interested in following along, go add yourself to bug 453422 (on Fedora’s Bugzilla)

This is the first post of a 3 part series presenting our experience moving Songbird development to an Agile process.
Up until version 0.3, Songbird development had been following a fairly traditional waterfall model. Realizing the ambitious vision of building both a platform and a desktop media player has presented many challenges. A lot of plumbing infrastructure is needed before any features can be created. Faced with that challenge, the engineering team did what engineers do best, they designed a very comprehensive system, planned for it very carefully and started cranking code.
During the planning phase, the team estimated the work to the best of their abilities and a Gantt chart was created to reflect identified dependencies and track progress. Unfortunately, this approach led to lengthy release cycles (10-12 months) with lots of room for scope creep. When the release finally got completed, lots of good work was accomplished (over 1200 issues where addressed in 0.3 alone) but the lack of visibility was problematic and the slow pace of releases was too demoralizing.
We recognized that the schedule was build on assumption that we knew everything upfront. There was a sentiment that the whole Gantt thing was a little removed from the actual work and that overall “things were going ok, because we were kind of tracking it” was not an acceptable way to run our project. We had to accept that our planning and scheduling practices were broken.
Besides the effect on morale, a long development cycle presented the following problems:
We also felt that our task estimates were not granular enough and the built-in slack was not taking into account other work. Unfrequent build also meant a lack of visibility on product quality.
That kind of development approach also fosters poor engineering and product development habits, such as:
We decided to adopt a new approach to development that would address those issues. These are the objectives we tried to fulfill:
We felt that we had a good foundation of existing practices we could build upon. Build automation, continuous integration, unit testing, peer review process for code commits, automated api documentation and the use of Bugzilla were already well established within the team. We needed to augment those with a few others borrowed from Agile methodologies.
We added the following set of guiding principles:
At a high level, we’ve committed to release a major update of Songbird every other month. We opted for calendar driven releases with a short development cycle of 4 to 6 weeks of coding maximum. We adopted a naming scheme for each release train drawn from a music artists theme. Alphabetically sequencing those release trains makes it easy to see the order of releases (Eno release comes after Dokken for instance).
Within a release cycle, we introduced the notion of iterations of 1 week length that we used for planning and measuring progress against. This gave us the context to improve our estimation and tracking system.
Estimating how long software development takes is one of the most difficult thing to do.
We created a High Level Roadmap that captures the scope and sequencing of each release.
We came up with a set of lightweight artifacts that would help us represent and track what needs to be done.
In support of that, we also created on our wiki design docs that represent wireframe and accompanying notes to explain each feature. You can see an example of such document for the view menus clean up in Eno release.
For each story, task and bug, we’ve introduced a costing system based on points. The scale starts as at 1 point, for something easy that an engineer can do in a day. Two points means it will take some time to think about it and write the code. 3 pointers are reserved for the most difficult issues, requiring research or lots of code. The idea is to come up with a normalized unit of work across the team that we can measure ourselves against. Moving from a time based estimate to point base is not easy. For one, the scale is not linear (e.g. 3 pointers don’t take 3 times as long as 1 pointers). However, the basis for this is to simplify and reduce cost estimate process to a good enough level that we can measure and forecast. While it may be a blunt instrument, there is diminish return in spending more time refining and tracking estimate at a much more precise level.
The key benefit from developing a consistent costing practice is the ability to measure progress and use it to forecast future work. Entering Velocity. By computing how many points get completed by the team over an iteration, we were able to normalize the output in the form of a velocity metric. This gives us a sense of how much stuff we can accomplish in a typical cycle.
To track our progress, we setup 2 iteration meeting, one to review and plan the iteration and the other to steer the iteration at mid-point.
All the artifacts and measurements are tied together on a Release Plan published on our internal wiki.
Another important factor is the acceptance and validation of work. In order for points to be counted in an iteration, there needs to be an agreement on when things are “done”. Nightly builds are being used for verification every day. On the bug front, QA validates engineering fixes and mark them validated. Similarly, Product Manager accept stories as completed when they are satisfied with the implementation of a feature.
With all these new practices in place, we were eager to tackle our first Agile release known as “Cher”. Our next post will take a look at the roller coaster of real life release cycle.
Did you lose your bookmarks in the 0.5 to 0.6 upgrade? Our super summer intern, Anthony, came up with an easy solution to get your original bookmarks into your freshly-upgraded Songbird.
Step 1: Quit the Songbird application.
Step 2: Navigate to your OLD Profile directory. Your profile location depends on your OS, so here’s a platform-specific breakdown of profile locations:
(The gobbledygook is different on every computer. It’s just a jumble of letters and numbers.)
Step 3: Make a copy of the file named service-pane.rdf.
Step 4: Navigate to your NEW Songbird profile. It’s in the exact same location as the old profile, but the directory is named “songbird2″ (instead of “songbird1″).
Step 5: There is a file in here named service-pane.rdf. Rename it to ORIG-service-pane.rdf.
Step 6: Move the copy of your old service-pane.rdf file into your new profile directory.
Step 7: Start Songbird. At this point, your old bookmarks should be restored!
Note: This process will only restore your bookmarks (not the rest of your user data from previous Songbird versions.) We moved the profile directory in 0.6 because we made some major changes from 0.5 — it just works out that the bookmarks file is safe to copy!
Greg over at Grabb.it (a wicked cool community-contributed music blog) put together a really awesome Songbird development guide to using the Webpage API.
If you’ve been thinking about using the Songbird Webpage API, check out Greg’s guide, and don’t forget to look at the rest of our Webpage API development resources as well!
© 2005-2008 POTI, Inc.