In an agile process, what is a defect?

Our agile team is finding some things challenging. In particular deciding how to prioritise and work on “bugs” in the midst of a pool of prioritised and scheduled feature stories.

“Agile In Action” has a nice summary of an approach to software development. Most agile practitioners won’t find anything to object to.

AGILE IN ACTION: The Energized Way

Our first problem is with the second bullet “Work with clients every day“. As a team we would love to work with clients every day, but there seems to be a thick layer of representatives and proxies in between us and real customers. This is made especially difficult as we are currently serving the needs of several customers with a single product, and resolving customer differences is proving tricky.

Our second problem is with “Fix defects as soon as they’re discovered“. In principle this seems obvious, but the trouble we are having rests on the definition of a defect. As an agile team we keep up-front specification to a minimum, and in-effect treat every delivery as a prototype ready for customer feedback. Plenty of people in the company have opinions on such prototypes – things they think it should do, things they think it should not do, and things they think it does wrong. Any of these could be considered as defects (and indeed many of them are raised in our bug tracking system.) If we stopped new work to make all these changes we would (a) greatly reduce our feature velocity, (b) bypass the prioritisation process used to “Deliver the client’s highest-value stuff first“, and (c) leave us stuck in a mire of conflicting opinions.

We certainly do not ever want to deliver “broken” software, but its a fact of life that some “bugs” are lower in priority than others. Some “bugs” are also lower in priority than new features, but this is more of a business decision than a development decision. Working out how deliver prompt, appropriate and minimal software in the face of such a slew of opinions is proving contentious.

I’d be interested in reading any suggestions or answers to these problems.

6 reasons why a VC funded startup failed

A very thought-provoking post analysing how one particular software startup company failed, and exploring things which might have helped prevent the failure. I’ll need to think more about this.

6 reasons why my VC funded startup did fail | Code Monkeyism

Are Thoughtworks’ products (and product sales) really so rubbish?

I’m tired, and I’m cross. Last night I was up too late, and this morning I have wasted another few hours. All trying to do something which should be simple – evaluate some products from the well-known software consultancy “Thoughtworks”. And so far I still have not succeeded.

It all started so simple. I was looking around for a bundled software solution for running a new software project and found “Buildix 2.1“. This looked to be a large part of what I need, so I investigated further. Subversion for storing source code, Cruise Control for continuous integration, Trac for change tracking and wiki collaboration. All familiar, useful, stuff. And it also offers “Mingle“, a tool I have not used before, for agile project planning. A quick check shows buildix is offered under an Apache licence. Best of all, they offer it as a pre-built virtual machine image, so I should be able to just download it and run it alongside my existing VMs and give it a good evaluation.

And that’s where it all began to go wrong.

I downloaded it and extracted the files from the archive, started my VMware server console and gave it the details of the VM image. First problem – the image somehow requires a later version of VMware, forcing me to upgrade. I have installed a bunch of different vm images before and never had to do this, so why can’t Thoughtworks manage to build a compatible image?

So I went through all the pain of an upgrade to VMware server 2 (complete with the sudden appearance of a login box which was never needed on the old vm manager, and required me to create a new Windows admin user!) but eventually I got to a stage where the new vm image would at least load into the hypervisor.

Then I hit the bit which astonishes me the most. The supplied VM image is broken and won’t even start. Worst of all, this is a known problem. Did they not even test this most basic of steps?

So, I followed the instructions and logged in to issue a “fsck” command to get it working a bit more. Which in turn required me to go to the web again to find the default root password (if it helps anyone else, it is also “root”).

After a while it seemed to have stopped initialising, so I found the dhcp address which had been assigned to the vm, and tried an HTTP request to port 80. Timeout. Using my new found root login skillz, I hit Alt-F2 on the VM console, logged in as root and entered “ifconfig”, the response did not include an ethernet connection, only a loopback. My knee-jerk response in this situation is to enter “ifup eth0″, and in this case it seemed to work. It is probably not a long-term solution, though, and may not survive a reboot. For that I may need to mess with some config files.

After all this effort, I just about have a running system. Connecting to the same ip address with a web browser now gives a redirect to https, which in turn causes Firefox to complain about a self-signed certificate, so I plod past that. Eventually I see a page which asks me to configure Mingle, so I enter a bunch of smtp and user details and suggests that I enter the details of the new user in the buildix config (with a handy link). Unfortunately, when I click that link I find that it requires a login first. I try the details from the user I have just created, with no luck. Back to the internet I go.

It turns out that the username and password I need are “buildix” and “buildix” respectively. After a bit of bouncing around pre-populated login fields, I get to the config page and enter the details.

Now I have run out of what little instruction there was. On the Buildix web site the navigation link labelled “Documentation” takes you to a breathtakingly dismissive page which just states:

Documentation

The forums can be found here.

No sign of even the simplest tutorial or walk-through to give a hint of what you can do with the system. No links to documentation for any of the component applications. No FAQ for any of the show-stopping problems which I have tripped over so far. Unbelievable.

Left to my own devices, I try clicking some of the links, starting with “create project” but all I get is a cryptic error message. The suggested solution from the forums is to find and edit yet another config file, which allows me to create a project, but leaves me without Mingle. Somewhere in the application I find some text suggesting I need to register Mingle, with a handy link to Thoughtworks Studios. When I click the link I see nothing about registering, so I wander around the site for a while, and eventually find a page where I can buy licences. I’m not interested in paying USD 318.60 per user, especially when the software has needed so much TLC so far to even get it running. Luckily, the page states

Remember that the first five users are free. Thus, if your team has 15 people, you should key in only 10 in the “Qty.” field below.

I don’t need more than 5 users, so I enter 0 in the quantity field and click “proceed to checkout”. The purchase system then informs me that “You do not have any items in your cart.”. Another needless failure. Fed up with trying to get a licence I return to the Buildix application and poke around a bit more. Re-reading the config page I see an un-checked checkbox under Mingle Options labelled “Enabled”. So I enable it and continue. Magically, a Mingle Icon appears next to the others for my test project. Filled with excitement I click it, only to see

We apologize for the inconvenience.

You should be able to continue work by returning to the projects page or you may prefer to sign out and sign in again.

So I sign out and in, using the admin user I created so long ago, which eventually logs me in to an unregistered Mingle, but with no projects. So I create one with the same name as the one I created using the “a little bit of our own ThoughtWorks magic” which was obviously not quite as magic as it should be.

Eventually it seems that I have achieved a running Buildix 2.1 Virtual machine. But I’m exhausted, and sick of all the nonsense I had to go through to get here, so I’m hardly enthusiastic about evaluating it and telling all my colleagues how wonderful it’s components (and by extension ThoughtWorks’ coding skills) are.

Seriously ThoughtWorks. Do you have any idea how poorly this sort of thing reflects on your products and your company?

Plenty of people seem to be able to put together working systems of this complexity in their spare time, and to get it right. If this is really the best you can manage, why would anyone consider hiring your team for anything important?

Never forget the capacity planning, especially for free stuff

So Dr Pepper were overwhelmed by user interest in a free offer, which brought down a promotional website and led to all sorts of financial and PR problems.

Reminds me of when I worked for a telemarketing company a dozen years ago. At the time giant manufacturer Daewoo were trying to enter the UK car market and decided on an innovative marketing strategy. They took a bunch of prime-time TV ad slots and used them to offer interested customers a free car for a year. There was (of course) some small print, and only a relatively small number of actual cars on offer.

The plan was to get anyone interested to contact the telemarketing company, answer a bunch of questions and have their details “put into the hat” for a free car. Then, in principle, Daewoo would have a ready-made sales call list of potential customers.

What happened? They completely, and very naively, underestimated the customer interest. When the first ad aired they received over 60,000 incoming calls in less than a minute. This completely swamped the telemarketing company, who had less than a hundred phone operators. Worse, it crashed the local phone exchange, preventing any incoming and outgoing calls from any of the businesses in that area for hours. The result was a consumer backlash, legal threats, and a PR nightmare.

Glad to see that the same mistakes are still being made

Some one forgot to ask the critical question… | dancingmango

Evaluating and rewarding agile teams

I had not seen this article by Mary Poppendieck until it was recommended by Joel Spolsky and Jeff Atwood, but it offers a compelling analysis and a series of suggestions for managing agile teams, particularly in the thorny area of evaluation and rewards. Well worth a read, and well worth finding a way of getting whoever evaluates your team to read it, too.

Compensation.pdf (application/pdf Object)

Kent Beck discusses debugging using tests

I’m not generally a fan of “debugger” tools. They seem laborious, manual and clumsy compared to the speed and precision of unit tests. However, it’s not always easy to decide what test to write to localise a particular bug. Kent beck offers a technique he calls the “Saff Squeeze”.

Hit ‘Em High, Hit ‘Em Low

Pragmatic Books at 25% off

This post has an even shorter shelf-life than my others. The Pragmatic Programmers (along with most of the USA, it seems) are offering special discounts for “black friday”. In this case it is 25% off their book prices. They have some pretty impressive books in their line-up, so now may just be the time to stock up.

What’s Missing From the Agile Manifesto

An interesting summary of some thoughts on the agile manifesto, it’s place in software development history, and how/whether it should grow or change.

InfoQ: Brian Marick: What’s Missing From the Agile Manifesto

Clearing my backlog, a mix of links

My browser is full of tabs, each representing something I intend to blog about. I need to clear some space, so here’s a few interesting links without comments.

Don’t worry about how valuable it will be, just tell me how much it costs?

Nice little post highlighting the need for value information along with cost estimates.

Don’t worry about how valuable it will be, just tell me how much it costs?

Don’t lose that command history

If you have ever run multiple terminal windows at the same time on a Linux system you have probably hit this problem. Only part of the command history seems to be saved for future sessions. This can be really irritating if you want to go back and re-sun some complex, finicky command.

“Cube Rick” has a suggestion to make sure that it all gets saved for later:

Cuberick: Update Bash History in Realtime

The Parable of the Two Programmers

I’d not seen this before, but it certainly has echoes of real life.

The Parable of the Two Programmers

Validating JVM Arguments in Code

I can’t think of any real uses for this right now, but I can think of lots of possible uses!

thekua.com@work » Validating JVM Arguments in Code

TDD and Test-Driven Refactoring

This is a neat observation. One equivalent to test-Driven Development (TDD) when working with an existing codebase might be “test-driven refactoring”. The idea seems to be that at any particular point in the lifecycle of a software system not all of the benefits of TDD are actually being used. So why not just do enough TDD to get the required benefits at the time.

In this case the need is to refactor some existing code in preparation for a change. Rather than either (a) stop to write tests for the whole system, or (b) throw up our hands and abandon TDD for this work, the suggestion is to write a passing test around the exact code being refactored, then use that test to ensure that the change preserved that behaviour. Then, in the TDD style, rinse and repeat for the following refactorings.

As this progresses the result should be a growing body of regression tests. concentrating around the areas which have actually changed, which seems good to me. It’s not as good as TDD from the start, but it’s better than no tests at all.

Agile Tips: Testing private methods, TDD and Test-Driven Refactoring

Less-bright applications and web sites save power

I’d not encountered this before, but it does kind of make sense. Showing a bright pixel consumes more energy on most display technologies. so choosing a black background for applications and web sites can help save both your own energy bills, and the planet!

ecoIron – All these whirring boxes.: The Full Story on Black Google, Blackle, etc.

Ubuntu Ibex key repeat problems

This is really irritating me, but I can’t find a solution so far. I use Synergy to control multiple computers from a single keyboard, but have found that Ubuntu Ibex does not completely work. Apart from the “@” symbol being translated to a capital omega (which I did find a fix for) there is still the problem that the “left arrow” and “down arrow” keys (the ones in the group between the alphabetic and numeric keypads) do not seem to repeat when held down. All the other keys (with the possible exception of “End”) seem to repeat normally.

Anyone know of a fix or work-around?

The mobile future is calling

The world of mobile systems and software is potentially a very exciting place to work, even if sometimes I am so close to the code that it seems just like every other piece of software I have ever worked on. Nice to note that the BBC see some crossover potential, too.

BBC News: The mobile future is calling

Comparing Amazon’s EC2, Google’s App Engine and Microsoft’s Azure

“Cloud computing” is still very high on my list of things I need to get up to speed on. One trouble is that innovation in this area seems to be coming faster than I have time to experiment. Still, this article seems a useful summary of the current state of play.

InfoQ: Comparing Amazon’s EC2, Google’s App Engine and Microsoft’s Azure

UK universities to lead global e-learning

Apparently there is to be a push to make the UK a world leader in on-line higher education. I’d love to see this happen, but I have my doubts.

As with so many other attempts at “e-learning”, the emphasis seems overwhelmingly on “learning and teaching resources”. But this is the easy part of the problem. The hard part is institutional change; moving away from the legacy idea of classes and courses to a new model which decouples learning from teaching, and both of those from assessment.

So far I have not found any indication that educational institutions in the UK are willing to step away from the traditional, everyone in one room, everyone being taught at the same time, lecturer as source of all wisdom approach to the distributed, asynchronous, collaborative, multi-sourced model needed for real “e-learning”.

Even the Open University, despite being centred in distance education, still has synchronized course start dates and assessment deadlines, for example. This is not only inflexible for students, but also places a much heavier load on tutors at certain times of the year. As far as I can tell, this sort of practice is done solely because, well, that’s the way it has always been done.

Educational institutions, please wake up. Successful on-line study and assessment should be available to everyone wherever and whenever needed.

UK universities to lead global e-learning : JISC

Second Life affair ends in divorce

It seems that some people just want attention, even in an on-line setting. For me. the last line in the article is the most revealing…

Second Life affair ends in divorce – CNN.com