T-shirt sizing is ‘relative’ sizing and less prone to errors than estimation of effort, in real days.
For instance, you can be guaranteed that two developers are like two watches. They never agree when it comes to how long it will take to develop a piece of functionality. One might say that it will take two weeks while the other smirks with an I-can-do-it-in-two-days attitude.
That may be true as different developers come with varied skills and experience. Relative sizing is about comparing two different pieces of functionality and agreeing on which one is smaller (or larger) in size and by how much. Rarely do developers disagree on this. And if they do, you can be sure that the story is not clear enough or there are major unknowns.

One way to estimate using relative sizing is to use the T-shirt sizes; small, medium, large and x-large. Too many sizes may confuse the developers and the team, so it is wise to stick to three or four sizes. You always estimate with more than one developer in the room, so that there can be a good debate about confusing issues. The skills and experience levels of the developers are not that important. It may even be good to have a wide spectrum.

Start by writing up cards with S, M, L, XL for each of the developers in the room. The Business Analyst or the Product Owner then explains the stories, one by one, and the developers estimate by putting forward one of the cards, simultaneously so that one does not influence the other. Whenever there is a mismatch in their estimates they discuss and debate the point in the room and re-estimate straight away. Usually it ends up with a consensus, as debates clear up the confusion. Always estimate with the end-users and stakeholders in the room to clear up any doubts.

At the end of this exercise all the stories would have been classified into the different size buckets. Now what? Sample and work out the time required to develop a small, medium, large and x-large, respectively. Start with one from each size bucket and break them down into developer tasks, at the minute level possible. It is not too much to break down to a task level of even an hour’s work. Then estimate each of these minute tasks to calculate how long it will take, in real hours, to develop a small, a medium and so on.

Sampling is quite important in this process. It is good to start with random samples and then move on to boundary samples. From each bucket, pick ones that seem to be the largest and the smallest. Estimate these. How much do they vary? Is the smallest medium larger than the largest small? By how much? What is the variance within each bucket? Can the smallest and the largest in mediums still be called mediums?

Depending on the results of the above analysis, the buckets and the stories in them may have to be rearranged.

Once this exercise is over, we can now apply the real estimates from the samples to all the stories in a bucket to get an overall estimate of the size of the project. It is now time to step back and take stock of the budget, cost-benefit, approvals, schedule, road map and so on before progressing any further.

I’ve been out to a couple of unconferences (with varying values of “un”) in the last month. Citconf (Continuous Integration and Testing conference) was well and truly in the unconference style with audience created topics and discussions covering mostly testing topics with a few extra things such as bee-keeping.

I started the day with a session I proposed and co-facilitated on Behaviour Driven Development (BDD) and Acceptance Testing. We covered a good amount of ground on the troubles getting people into the BDD mindset and appropriate acceptance tests.

Our discussion turned towards some particularly tricky problem banks were having with acceptance tests on their larger system towards the end which surprised me but was an interesting discussion of BDD at scale. The discussion reminded me how grateful I am for the tools available in Ruby that make testing so much easier than it is for people in the Java world.

We had an eye-opening session on the limits of testing and the use of skilled testers in the testing process. The difference of opinion between the people from smaller outfits vs the large banks was quite dramatic with the smaller outfits being much happier to move quickly with as light a testing overhead as possible whilst the banks had large test teams dedicated to going through the applications at length.

Interestingly, the dedicated testers had a very poor opinion of the testing abilities of developers, I wonder is partly due to developers being more relaxed in their coding when they know there is going to be a high level of dedicated testing around to pick up the errors or if it is simply that organisations that are concerned enough about testing to hire testers happen to be those that require a more bug-free approach than the normal small organisation that can react quickly to issues.

The final talk of the day was Nigel McNie talking about his start-up’s use of continuous deployment. He’d put a lot of effort in the implementation at his start-up and was able to build on a lot of stuff with practical examples of how he implemented it. Eric Ries had talked about continuous deployment at Webstock this year and Nigel’s examples made it seem significantly more realistic than Ries’s mention of it.

By using feature flags that go around code that is related to that feature Nigel can have a test suite that tests both states of the flag and if the tests pass the code goes straight to live. So every feature that he has developed so far has made its way onto the server in a latent state, when he wants something to go live he just changes the variable or it can just be set to a time. If issues occur in the site his time to fix is very low as he does not have to wait for deploys or releases and relies on a comprehensive set of automated tests to cover for him.

Overall Citconf was both useful in terms of technical things that I’ve taken away from it and very interesting in terms of meeting the dedicated testers who are present at so many organisations but don’t seem to come to the conferences or events that I do.

Some wiki entries from the conference.

More information on some of testing and CI tools we use at 3months:

I was recently lucky enough to be invited on to a panel at Archives NZ’s 2010 Future Perfect: Digital Continuity Conference to discuss: What impacts or solutions to digital longevity does technology innovation present? I say lucky because the other members of the panel are people who are held in pretty high regard:

Our summer of code intern, Josh, is vice-president of the VUWIT society at Victoria university and invited me up to talk about Rails, so on Wednesday I went up to the university and spent about three hours teaching 40ish students Rails.

In the last couple of months I’ve been to both Linux.conf.au and Webstock. Two conferences that both aim to cover to a reasonably large variety of cool stuff happening in technology. It is stunning just how different these conferences manage to be when they set out with similar goals

In our work with clients we come across organisations and internal champions of Agile practices who understand this very important concept: Agile is about practices and behaviours. Practices and behaviours that enable teams to improve and succeed ultimately save money and increase delivery. We also occasionally run into people who are hoping for a project [...]