
Previously, we’ve examined the new development practices that the Songbird team adopted to plan and track a release. Everyone on the team was very eager to put them to the test. Unfortunately, at the time, we were still in the middle of the 0.3 release cycle and new work could only be started once that release was completed. During the 0.3 release, everything was still treated as a bug, but in fact, many bugs were stories and tasks in disguise. We decided to apply some of the newly defined tracking principle to help us guide and finish the cycle, so we could start fresh with our next release as soon as possible.
Cuánto es?
The first step was to add cost to everything. We introduced a new cost field in Bugzilla and put a cost value on everything according to our new scale of 1, 2 and 3 points. With costing in place, we were in a position to compute how much points the team was able to complete in a typical work week. That total, normalized per work day became our team velocity.
Below is a chart representing our velocity over many — one week — iterations during the 0.3 release (code name Bowie). The blue line is the number of points the engineering team completed, averaged per work day. The red line tracks the cost of new things being introduced, normalized per work day. The green line tracks the net velocity.
It quickly became apparent that as the team took things off the pile, new work was being identified and added. We had to keep track and take this into account. We named this intake to globally represent new functionality, regressions and newly discovered bugs.
The net velocity gave us an indication on how well we were doing overall. When it gets in negative territory, we are losing ground.
You can see below 3 events that had clear impact on intake, namely scope creep (some features were not well defined upfront), and bug intake due to public feedback from a blessed build and a release candidate.
Also noticeable is a week when the team was not as productive as usual. With that information in hand, we were able to have open conversations about the state of progress and try to determine the cause for it. Sometimes, a low velocity is simply because work gets accumulated in a week and does not get checked in until the next. We call this carry over. Other time, there are some inevitable distractions such as a move, interviews, equipment failure, etc. In other cases, the team is just having a bad week.
With this in place, we were able to understand the rate at which the team was completing work. We created a burn down chart that tracked the total points of known work left. Using the team velocity, we could forecast an expected release date with a simple best fit projection. When the line crosses the X-axis, you are done and can ship.
If you compare the two charts, you can see how much influence intake had on the release. This became a key component to take into account in our planning. By budgeting points towards intake, it allowed us to reserve some engineering capacity to take change into account upfront and have a more realistic schedule.
Where does intake come from?
By formally tracking our intake, we were able to better characterize the nature of change. Most of our intake comes from change introduced when features start to materialize in the product and can be tested. This is a desirable effect of adopting an Agile practice. Other contributors are defects being reported by existing users, which is a benefit of early releases. Less desirable intake come from regressions or new tasks that resulted from bad assumptions or misunderstandings. Those can usually be mitigated by increasing unit tests coverage and more upfront detailed planning.
Full Agile cycle
Let’s take a look at another release cycle. Dokken was our second release in which we used the new process from inception. The charts below represents velocity and burn down respectively. Note that the scale on the velocity has increased. There is more dynamic range. Because the release started from day 0, we noticed a ramp up in the velocity. We learnt not to be necessarly alarmed by this. In a new release cycle, the team needs some time to “prime the pump” of development. As the release progressed and we got better visibility of the team progress, we decided that we should defer feature work that was identified as nice-to-have. This is another thing we did during planning. We prioritized work in must have for the release, hope to have for the release and nice to have – mainly cosmetic changes, low risk bugs – buckets. This gave us a pre-negotiated way to easily shift features as the release progressed.
By actively tracking and managing the intake, we were able to steer the release and deliver within weeks of the projected date. Not great, but better than our previous releases. Dokken was a particular difficult release as we undertook a lot of device support work, which can lead to nasty device compatibility problems.
Embracing change
The next release, named Eno presented some interresting characteristics. The intake was relatively high thru the release but the team was also maintaining a higher velocity. This is a good example of the team achieving a good level of agility. Change is being introduced throughout the release and the team is well prepared to tackle it. Also notice that the spike in intake due to feedback from release candidate has a corresponding level of increase in team velocity. This is due to the shortening of feedback loop. With proper ownership, the developers are able to respond in real time to issues being discovered.
Notice how the burn down trend is converging almost linearly. This means that the team is achieving a sustainable pace, leading to more predictable ship date.
Achieving high velocity
Our latest release, Fugazi is another example of a successful cycle. This was the shortest release cycle the team ever undertook, with only 4 weeks of planned development work and 3 weeks of QA. In order to maintain our original release date, we had to defer some lower priority work in iteration 3. Despite the shorter release period, the team actually completed more points per iteration than any other release. We maintained an unprecedented high velocity, which in turn allowed for a high level on intake to be absorbed, so all the planned must have featured could be kept in the release and still hit our original target date.
DIY tools
In the last part of the series, we’ll cover the tools we created to make the tracking easier and how they are being used on a daily basis to help us steer the release. Stay tuned.





















4 Trackbacks
[...] Songbird on track and cranking up the pace for a version 1 release by December I decided to contact the Songbird team [...]
[...] Songbird path to Agility – Part II [...]
[...] I’ve covered our move from waterfall to Agile and provided an in-depth look at some actual release cycles. In this last post, I’m going to introduce a tool – which I gave the uninspiring name sdpbot [...]
Songbird path to Agility – Part II…
This is a repost of a series of article originally published on Songbird’s blog
Previously, we’ve examined the new development practices that the Songbird team adopted to plan and track a release. Everyone on the team was very eager to put them to t…
12 Comments
SubscribeI’ve been in the software “industry” for years but am a very new Software Engineer–a whole month and a half old–and am looking forward to your DIY tools article. I don’t think I’m as smart or as experienced as the people I work with, so I rely on methods and tools that aren’t “just sit down and code, save testing for later, and don’t ask questions.” Thanks for sharing this, it gives me confidence to keep persevering in my job, especially since I’m happier engineering so far than almost anything else I’ve done.
Songbird is getting better all the time… but how long before you really focus on getting that memory usage down? The other features are important but if you spent a month just focusing on nothing but that I’m sure it would keep everyone happy =)
Incredible post!! Thanks for sharing with all of us your experience. Absolutely great.
@Joshua
We’ve been allocating time to focus on performance in the last few releases, which lead to the introduction of jemalloc, a better memory allocator for instance. We’re going to tackle more memory improvement in this cycle. You can follow bug 12103 if interested.
Songbird seems to use around 130-150mb when idle and well over 200mb whilst using it. By contrast Windows Media Player, typically regraded as the most bloated media software, uses under 50.
Ironically though Songbird does seem to handle my 25 gigabyte music collection better then WMP, although admittedly Songbird isn’t displaying album art.
I guess my point was Songbird is using a good 3 or 4 times more memory than other media players. I know nothing about coding, so apologies if I make no sense, but is this something you are definitely able to fix given the time, or are aspects of Songbird going to eventually need a rewrite?
Before iteration 1 there is a set of items scheduled for inclusion in the release, the cost of those are the starting value of the burn down chart, right?
In Dokken and Fugazi deferring features took place after two or three iterations, but in Evo the intake is negative before the first iteration. Is this something else and how come it’s accounted as velocity rather than just a lower starting value for the burn down chart?
@Ulrik
Good observation. I should have clarified that the charts don’t capture data at the same time. The burn down chart represents the total points at the beginning of each iteration. The velocity is computed at the end of the iteration, and plotted as the velocity for that week.
In the case of Eno, we started the first iteration and still had some items in the plan that we were not sure should make it in the release. During that first iteration, we pruned the list so it would be ready for iteration 2. That’s the negative intake velocity.
@Joshua
You should expect Songbird to use at least as much memory as Firefox. Especially if you have a few tabs open and web pages in them. It is a browser after all.
There are however, lots of things we can do to get memory usage down still. We won’t be focusing solely on that though since we still have a lot of features that need to come in over the next months.
Hey – I work at Topspin and I find it hilarious that we have almost all the exact Sprint Names. LOL
Question – how far in advance of starting development do you plan out your sprints?
For e.g. we have a rough idea of the features we want to add and when we would like them in over the next 6 months, and we are trying to get to the point where designs and prototypes are at least one sprint ahead so we can task and estimate ahead of time.
I think the hardest part is striking a balance between planning far enough in advance to have a good idea about the release timeline, but not too far in advance that you are weighed down with the future and not the present.
Also, we need to account for the “agile” piece where scope changes or artist requests come in. Do you have buffer at all for that?
I’m looking forward to the tools…we just Jira and Confluence and I’m evaluating Project Mgmt tools right now: http://tarabrown.pbwiki.com/Agile-Project-Management-Tools
@Tara
Yeah, always fun to look for great bands/artists. Our planning period is typically 2 weeks. We try to get a head start during the QA phase of the previous release in an attempt to overlap release trains as much as possible. In practice, it turned out to be very challenging as often time the whole team is still focusing very hard on releasing the current bits.
What we’ve learned is that planning is very much a full time activity. You need to allow for the product manager, designer and engineer to iterate over stories, design docs and prototypes to increase the accuracy of our costing estimates.
As far as anticipating scope changes based on requests, we allocate a certain point budget over the course of the release for what we call “intake”. This allow us to accommodate small variation in plan and regressions. For more drastic changes, you have to revise your plan and trade features to make room.
Hi Georges – I just read with great interest your two blog posts about your efforts to adopt agile development practices at Songbird. I am with Rally Software in Boulder, CO. Rally has been at the forefront of helping organizations effectively implement Agile into practices including companies in the Bay Area such as Cisco, Verisign, and CNET.
Rally has won the last three consecutive JOLT Awards as Best in Class project management software.
We would like to learn about your interest in agile and welcome an opportunity to set up a phone conversation with you. Please let us know if there is anything that we can do to support you.
I can be reached by email or phone 720-921-8147.
Best regards,
Mike Hayes
Rally Software Development
http://www.rallydev.com
Thanks for sharing