Mark Needham

Thoughts on Software Development

Tackling the risk early on at a task level

with one comment

I wrote previously about the idea of tackling the risky tasks in a project early on – an idea that I learnt about when reading Alistair Cockburn’s Crystal Clear.

Towards the end of the post I wondered whether we could apply this idea at a story level whereby we would identify the potentially risky parts of a story and make sure that we addressed those risks before they became problematic to us.

I define risk in this sense to mean something that we don’t know a lot about and therefore don’t know how long it is going to take, something which we think might be difficult to do or something which is likely to cause us problems.

From my experience I’ve noticed that there tends to be risk around any boundaries with other systems which are likely to be a black box to us and in areas which we lack information about the best approach and therefore need to do some research/spiking first.

I’ve been trying to apply this approach and in a recent example my pair and I needed to fix a bug whereby some values on the website weren’t being correctly updated when the user changed a value in a particular field.

We started by informally working out the different changes we might need to make in order to fix this problem:

  • Javascript to handle the page refreshing with the new values
  • C# mapping data from service into JSON object
  • Service call to get back the new values

We had quite a tight timeframe to make this fix and it seemed clear that the call to the service was probably the biggest area of risk in fixing this bug – we had done some investigation which indicated that we hadn’t been sending a particular piece of data to the service and we weren’t sure what would happen when we did.

As it turned out when we did pass this data we weren’t quite getting the response that we expected but we were able to communicate with the other team and get the problem resolved really quickly.

The only thing I would have changed about our approach to this problem was that we tested whether or not the service was working by making a call to it through the UI having ensured that we were passing the correct data through to it.

We would have been able to find out whether our integration was working much more quickly if we had just written an automated test directly hitting the service and made some assertions on the results. This only became apparent to me while watching an Uncle Bob presentation which included a section about the value of testing.

Written by Mark Needham

May 11th, 2009 at 11:54 pm

Posted in Software Development

Tagged with

  • http://www.thekua.com/atwork Pat

    I’m not sure how much exposure you’ve had at the identifying and splitting stories but one thing I try to emphasis is splitting out the unknown to the known, treating the former as a spike, and the latter as the real story.

    Spikes hopefully are about answering questions or finding the best solution. I try to avoid committing to a story until we play a spike because we don’t know how risky the solution is.

    As you point out, integration boundaries are big risk points and so I like to play a story that involves integrate as early as possible and ensure that story is kept as simple as possible.

    Of course this is also possible at the task level for a story as well.