Burndown Charts

Disclaimer: I am not an expert on this topic and have never studied it formally. This is purely an explanation of how I’ve seen these charts used within Ibuildings and included in my talk Passing the Joel Test in the PHP World which triggered lots of questions and tweeting.

Burndown charts are a way of tracking how much work was estimated to be remaining at a given point in time, and we track this over time to give us some idea of the rate of change. We start with some estimates, then we track how much time is left at regular intervals, I do this daily, because its a sensible unit but there are no rules. Its much easier to show this rather than tell it so here is an example – we’re making a dolls house.


(yes, this is a photo of me. This was my fourth birthday and the dolls house was a home-made gift from my parents – I still have it)

Task List and Estimates

We need some numbers to start with, and I don’t mean looking at a task and going “a week and a half … ish?”! Tasks need to be in small enough increments that we can safely estimate them. By “safely” I mean realistically and hopefully accurately enough that you won’t find your project manager following you to your car at night with a pitchfork in his hand. For our dolls house, the table looks something like this:

Task Estimate
Assemble pre-built frame 2
Paint exterior 2
Paint windowframes 1
Decorate rooms 27
Fit carpets 5
Add furniture 1

As you can see, we’ve got a large element listed in the middle of the table – 27 hours is too big to be a single estimate, so we’ll break it down further.

Task Estimate
Assemble pre-built frame 2
Paint exterior 2
Paint windowframes 1
Decorate bedrooms 8
Decorate kitchen 7
Decorate bathroom 5
Decorate reception rooms 7
Fit carpets 5
Add furniture 1

Charting Estimate Remaining Over Time

The aim of this is to chart how the estimated outstanding work changes over time. So we start with the total estimates in place – I’ve added a week’s worth of days, just because its easy to fit onto the page, but your chart might have dates rather than days and go on for longer. Each day copies the number of hours of the previous day as its initial value – we’ll edit them when they change.

On Monday, all the work is still to be done, so we start with a chart that looks like this:

Task Estimate Mon Tue Wed Thu Fri
Assemble pre-built frame 2 2 2 2 2 2
Paint exterior 2 2 2 2 2 2
Paint windowframes 1 1 1 1 1 1
Decorate bedrooms 8 8 8 8 8 8
Decorate kitchen 7 7 7 7 7 7
Decorate bathroom 5 5 5 5 5 5
Decorate reception rooms 7 7 7 7 7 7
Fit carpets 5 5 5 5 5 5
Add furniture 1 1 1 1 1 1

To make the chart is as simple as adding a “total” field to each of the day columns and turning that into a bar chart:

Let’s say on Monday we get the first two tasks done – we set the “Monday” column for these tasks to zero because there is nothing outstanding. Now our table and chart look like this:

Task Estimate Mon Tue Wed Thu Fri
Assemble pre-built frame 2 0 0 0 0 0
Paint exterior 2 0 0 0 0 0
Paint windowframes 1 1 1 1 1 1
Decorate bedrooms 8 8 8 8 8 8
Decorate kitchen 7 7 7 7 7 7
Decorate bathroom 5 5 5 5 5 5
Decorate reception rooms 7 7 7 7 7 7
Fit carpets 5 5 5 5 5 5
Add furniture 1 1 1 1 1 1

So each time some work is done which causes the estimated remaining work to be reduced, we update the figures in the table.

During the Main Phase

Imagine we’re partway through and its Thursday, let’s check in on our dolls house project:

Task Estimate Mon Tue Wed Thu Fri
Assemble pre-built frame 2 0 0 0 0 0
Paint exterior 2 0 0 0 0 0
Paint windowframes 1 1 1 1 1 1
Decorate bedrooms 8 8 8 6 1 1
Decorate kitchen 7 7 7 7 7 7
Decorate bathroom 5 5 5 5 2 2
Decorate reception rooms 7 7 3 3 3 3
Fit carpets 5 5 5 5 5 5
Add furniture 1 1 1 1 1 1

At this point, its pretty obvious that the project isn’t going well. The curve on the chart isn’t steep enough to be able to reach zero by Friday and without having to interrogate developers (who of course are always 90% finished), we can see that overall, things aren’t great. Project managers may know that there is one blocker which is causing the problem but if you didn’t know … then you do now :)

A closer look at the numbers against the tasks show that we started the reception rooms and the bathroom but neither are finished, the bedroom we’ve worked on for the last couple of days and its almost there … you get the picture.

The Aim of the Game

The ideal burndown chart tends towards zero at the point at which the project needs to be finished … but working this way gives a nice graphical overview of whether thing are heading in that direction or not. Flat lines are generally the sign of something bad, and progress is really visible even when its spread across many tasks or many developers. The chart could have a column for who owns each task, and for extra points add an “actual” column so you can compare how the team performs against its estimates (this is “project velocity”).

This post was really only intended to show things as I see and use them – if this helps you then great. If you want the “official” version then I can only suggest you get a book on scrum and find out how to do it from someone much more qualified than me :) If you’re using this or something similar, then I’d love to hear how it works out for you and what you do differently – leave comments and tell me!

Speaking at Bradford LUG

Next week I’m taking the plunge and attending a LUG (Linux User Group) meeting for the first time when I attend the Bradford LUG meeting on Wednesday as a speaker. I’ll be giving my talk “Working With Web Services” which I’ll give at PHP Barcelona a mere 36 hours later (Wednesday is the dry-run, let’s hope it goes well!). I’m excited about this topic and looking forward to meeting a new group of geeks – if you are in the area then I hope you’ll pop in and join us.

Portugal and The Internet Cafe

Things may have seemed a bit quiet around here lately – that’s because I spent last week in the Algarve in southern Portugal. My sister is working in a hotel there as head nanny, I think she’s spent 8 days of 2009 in the UK so this is about the only way to get to visit her, a beach holiday!

Despite the holiday I still had a lot on my to-do list so I took my netbook with me, and got my sister to show me the local internet cafe – it was a great place and worthy of mention, so thanks very much to Hugo Beaty in Praia Da Luz for a stable connection and good coffee :) It was good enough to work from, I almost wished I’d gone for longer and not taken holiday (I telecommute, nobody would notice!)

If anyone is interested, there are a few photos in a flickr set of the trip.

Working at The Hub, Bristol

A couple of weeks ago I had some friends coming to the UK for a little while, but they were staying in Bristol and I live in Leeds. My weekends were pretty full so I wasn’t sure if I would get to see them – but since I telecommute I can work from anywhere with a decent connection and some quiet space. A friend recommended The Hub in Bristol, so I worked from there for the day.

Its a great place, I haven’t been to Bristol before and the views are rather good since the space is on the top floor. There was plenty of desk space and both wired and wireless connections available and they also have meeting rooms which were getting some good use the day I was there. The atmosphere was friendly and everyone had a smile for me, even though I was a stranger and only there for the day. The office is part-shared by sustrans so there were other nice ethical touches, like fairtrade tea and coffee and a good selection of recycling options.

I had a great day and will be looking out for opportunities to use The Hub again – either in Bristol or elsewhere. Thanks!

Lame Excuses for Avoiding Conferences

At the moment I am getting to quite a few conferences, as a speaker, as an organiser, and sometimes as a plain old attendee. I get so much from these opportunities to learn from experts in their various fields, meet people in the flesh whose blogs I read or whom I know from IRC. I also hugely value the opportunity to socialse and build personal connections, and to be a bystander for technical conversations between leaders where I understand most of the words but can barely follow the flow. I can quite appreciate that different people come to conferences for different reasons, but I cannot accept that people actively avoid conferences because they think its not for them – and the reasons for this, from people who have never been to a conference, are wild and varied. Most are based on misconceptions and I’d like to take the time to examine some of these.

I won’t know anyone

This situation will persist until you go to a conference and meet some people! Then, you’ll know some people at the next event. When I went to IPC in Frankfurt in 2007, I knew nobody but while I was there I met Derick, Sebastian and Zoe … and these three are now conference friends wherever I go! Lots of people at conferences are there on their own and will be happy to chat to you and find out who you are.

Its too expensive

While I’m lucky enough to have the support of my employers, Ibuildings, to send me to at least a couple of conferences per year, I’ve worked for plenty of other organisations that didn’t invest in their people. I think this is unforgivable but the reality is there are plenty of us in this situation. If you are paying your own way to these events I can appreciate that $1100 (~700 GBP) plus international flights plus a week in a hotel in Silicon Valley can seem pretty expensive if you want to get to ZendCon. But there are cheaper and closer conferences are available for most of us – so do your homework and get to something you can afford, even if you don’t do it every year. I’ve yet to get to a conference where the cost outweighed the benefit so in my view this excuse is invalid.

My employer won’t pay

No, well, see previous point. This is true for plenty of people and while I don’t have any numbers on people paying their own way – they do exist and they almost invariably move on to work for employers that do invest in their future. Do this for you, not for them.

I might have to talk to people/strangers

This is the excuse I hear the most often, or a variation on this. Actually you don’t have to talk to anyone if you don’t want to. I went to an event last year and introduced myself to a guy who said “Hi, I’m James. I don’t have any social skills” and proceeded to say nothing further (his name may or may not have been James, I can’t really remember). To be honest I didn’t really think anything of it. Conferences are firstly about the technical content so if you want to come and get the technical sessions and then disappear again – that is your call. I can’t agree this is a good idea but there is absolutely no pressure to be the life and soul of the party, and in fact if you want to sit in the corner and mutter to yourself that is also fine … we’re all geeks after all! Nobody will judge you, in fact if you don’t talk to anyone probably nobody will notice you – just COME and you might be surprised :)

I haven’t been to a conference

Why not? Pick an event you like the sound of, join in the preconference hype (more about this in my post about making friends at a conference) and see how it goes. If you hate it, then don’t go to another. But don’t stay home immobilised by lack of experience, you’re missing out :)

Avoiding Conferences

Getting to a conference costs time, money and effort and if you don’t want to invest any of those things in your professional development then I respect your decision. However if you think you’d like to attend something, but you don’t know what to expect or you have concerns about what is expected of you, then try to put those fears aside and dive in! I think I’ve covered the things I hear most often – what excuses do you hear from conference-avoiders?

First Steps with bzr-svn

I’m an SVN nut – love it, use it, talk about it at any opportunity, can’t physically write code without it. But as a telecommuting developer who is sometimes travelling around, I’ve been thinking for a while that one of the distributed systems would really make more sense. I tried git ages ago and decided that I just wasn’t smart enough to use it; I’m so comfortable and confident with subversion and it is such a change.

I know there are alternatives out there, I saw a talk about bzr at LUGRadioLive last year and I have some canonical-associated friends who use it so I know the community is good and I can get some help if I need it. I confided in a fellow developer that I’d struggled with git, but that I’d also read that bzr would be more subversion-like which seemed ideal for me since that’s my background. His response? “No, bzr isn’t easier for people coming from SVN, bzr is just easier“. So I figured I’d give it a go.

I’m an ubuntu user so I installed the bzr, bzrtools and bzr-svn packages, and read the user guide – the user guide is absolutely excellent and I wish every tool in the world had instructions like these! Anyway here’s a quick outline of how I got started and used bzr against my existing SVN repository (it seems too much like hard work to start migrating repos before I’ve decided if I like the tool).

Who Am I?

Tell bzr your name and email so it can credit your commits to you:

 bzr whoami "Lorna Mitchell "

Good start :)

Checkout from SVN

There are several ways to set yourself up to work with bzr-svn, I chose the simplest, and checked out from SVN using bzr, then branched locally and worked on that. First we initialise a directory as a bzr repository:

bzr init-repo --default-rich-root snapshot

Then I actually did the checkout.

bzr checkout http://svn.rivendell.local/snapshot/trunk trunk

So at this point I have a current working copy of code.

Bzr Branching

So that I could work locally and commit at intermediate stages between commits to the SVN repo, I then made a local bzr branch of this checkout. This is the bit that’s a bit different to subversion, the branch is just local to you, more like a working copy. It was quite easy:

bzr branch trunk working

So I’ll now make my changes in the working branch I just created, this becomes my web root if its a web app for example.

Comitting

Using the “bzr commit” command from the branch we created (“working” directory in the examples) only commits locally to the branch. You can do this as many times as you need/want to until your feature is ready (or maybe until you can get back to a connection).

Updating

I realised at this point that I needed to update from the repo to pick up some changes someone else had made, to do this I needed to update my checkout and then pull the changes into my branch:

cd ../trunk
bzr update
cd ../working
bzr pull

To give a clearer idea of how this all goes togehter, I drew a diagram of the repo, the checkout, the branch, and how the process works to get between them all (click to see it at a sensible size):

Status

The “bzr status” command shows what changes are local to the current directory.

Conveying Changes Back To Repo

I made a couple of changes in my working directory and then wanted to put these back to the repo. So from the checkout (“trunk” directory in my example), I merged the changes in and then committed.

bzr merge ../working/
bzr commit

My changes were then in the SVN repo exactly as normal, bzr-svn means extra functionality for me but nobody else necessarily needs to change tools and all the hooks and backup routines and everything that are already in place for this repo can be kept. I’m happy with that outcome!

Next Steps

This is a very basic usage of bzr, really I’m only recording my own experience to make these concepts clearer in my own mind. I plan to do a lot more with this tool and will keep blogging as I go along. Comments, corrections, suggestions and questions are all very welcome – add a comment :)

Customising Screen-Profile Files

I wrote a while ago about the new version of screen in Ubuntu Jaunty. Screen is an application which lets you run lots of tabs inside one terminal window, then disconnect from screen and reconnect again later. You can turn on and off a whole bunch of notifications which appear inside screen, and I also added the pink tabs I used with older versions of screen.

The tabs line is the one in the profile file which starts “caption always”.

caption always "%{wk}%H%{Bk}|%{Mk}%?%-Lw%?%{km}[%n*%f %t]%?(%u)%?%{mk}%?%+Lw%? %=%{Bk}"

I also altered the “hardstatus string” line, which holds lots of placeholders, to remove the clock – I run screen on my laptop inside KDE mostly, so I already know what time it is. Annoyingly this isn’t customisable via the menus but I edited my profile file to get rid of it – here’s the diff

29c29
< hardstatus string '%99`%{= kw} %100`%112`%= %102`%101`%114`%115`%108`%113`%119`%117`%118`%116`%106`%104`%103`%105`%107`%Y-%m-%d %0c:%s'
---
> hardstatus string '%99`%{= kw} %100`%112`%= %102`%101`%114`%115`%108`%113`%119`%117`%118`%116`%106`%104`%103`%105`%107`'

The only thing annoying me now is that screen seems to constantly redraw itself, so Konsole thinks there is activity in that screen, when there isn’t. Suggestions on stopping this or more ways you can customise your screen file are gratefully received – just add a comment!

Upgrading Subversion Server to 1.5

I’m really excited about the magic merging features in the newer subversion versions at 1.5 and later. I’m still figuring out which are actually useful, more on those another day, but I wanted to mention something I ran into when upgrading my server.

Some time ago I upgraded the subversion server to subversion 1.5, and the clients that use it are probably mostly on 1.5 as well. We haven’t had any compatibility problems between versions on this upgrade, which is good news since a few versions ago there was a release which caused any newer client to render the repo unreadable by any older client. Predictably someone in the office upgraded their client one day and it took us a good few hours to work out why subversion had stopped working!

The Subversion 1.5 upgrade doesn’t turn on all the 1.5 features by default, but will upgrade to 1.5 and allow older clients to continue to work with it. If you want to upgrade to the 1.5 features though, you’ll need to make sure that all users have clients of version 1.5 or later, and then upgrade the repo by running:

svnadmin upgrade

Once this is done you can start using the new merge tracking features in subversion – enjoy!

5 Ways to Make Friends at a Technical Conference

These are my top tips for getting along and meeting new people at a technical conference.

Take an extension cable

Conferences are notorious for having too few and too short power leads, and everyone needs to recharge laptops, especially in hands-on sessions like tutorial day. Having an extension cable will make you instant friends as you bring power to more people.

Join in the pre-conference hype

Follow the nominated twitter tag and log into the IRC channel if there is one. Find out who is staying in the same place as you or arriving at the same time, arrange to travel together or meet for a pre-conference drink to break the ice.

Attend the extra-curricular events

Don’t think for a moment that when the official schedule ends, you are off-duty for the night! Find out about any social activities going on – and if there is an informal track such as an unconference, make sure you attend, or even participate. This is a great opportunity to meet more people and see more talks in a much less structured environment.

Take business cards

Or if you don’t have that kind of job (or even if you do!) get some moo cards to take with you so you can pass on your blog/email address, name and twitter details to people you want to stay in touch with after the event.

Stay an extra day

The party starts when the conference ends, so hang around for 24 hours or so and join in :) Especially for the speakers (whose rooms are paid for) and those travelling internationally, there’s no need to rush off straight away. Some of the best times I’ve had at conferences have been after the main event.

Keep in touch

Write up your experiences on your blog (do you have a blog? If not, this is a great place to start) and tag it appropriately. Comment on other people’s and stay in touch with the new friends that you made at the conference.

OK, so technically this is six ways to make friends, but I won’t apologise for that :) What’s your top tip for conference attendees?

Ubuntu Netbook Remix on Aspire One

A while ago, actually quite a while ago in May, I put the Ubuntu Netbook Remix version of Ubuntu 9.04 Jaunty Jackalope onto my lovely blue Acer Aspire One netbook.

The way this works is that on another machine (or I guess on an existing OS on the netbook) you download a bootable USB key image. With some trepidation (not a whole lot, I did back up first), I put in the USB key and settled in to see how far I could get with the installation.

Well, a short time later I realised I’d finished installing and was really just fiddling! Straight out of the box the wifi worked, the hibernate worked, sound (in and out) worked, the webcam worked, and there is this great window handler thing which amalgamates title bar and task bar into one. There’s also a cute menu on the desktop – all in all its really neat:

The working hibernate in particular has really made a big difference, at home the netbook just gets used for short bursts and lives next to my bed, usually plugged in. When it comes into its own though is at conferences! I can flip this thing open, use it, and flip it shut, pretty much all day. The startup time is really small from suspend and so long as I’m only dipping in and out (at conferences, I’m mostly in talks so I’m only ever checking mail etc), the battery life easily lasts a day.

Thanks to the Ubuntu folks – this is one quality piece of software and now I love my little netbook even more. Anyone else using the netbook remix? Were your experiences as good as mine?