Archive for the ‘Agile’ Category

Systems Thinking

03/11/2010

It all started when I read The Fifth Discipline – The Art and Practice of The Learning Organization by Peter M. Senge. I was inspired to read it after my brilliant previous colleague Pat Kua did a workshop on Systems Thinking. (Dennis Stevens wrote a better summary about this book than I will ever be able to.)

I then continued by reading Freedom from Command & Control by John Seddon as well as attended a presentation from John Seddon on the same topic. While Peter Senge’s book was a very interesting read – John Seddon’s was the easiest one to grasp and the one that really opened my eyes.

Seddon brilliantly shows how the wrong targets and measurements encourage the wrong behaviour and creates what he calls failure demand. Furthermore managers and governments sometimes specifies how people should execute their work – with the intention that these processes will then produce the best results. However, as you probably already know – it rarely does – and leads to poor results and demotivated people. Especially managing cost often leads to sub-optimizations which is not good for the end result. (I find some of this is a good match with the Beyond budgeting movement.)

I would love to use some of Seddon’s own examples to convince you, but I would encourage you to read his book instead. I will try however, to give you a few examples of where I have recognized these patterns in IT projects myself:

Managing cost:
Many IT projects seem to be managed on cost. This sometimes leads to testing only being applied at the end of a project (because that should mean less man hours needed for testing.) This obviously leads to bugs only being found at the end of the project. The later you find the bugs – the harder it is to fix them – and the more expensive you can argue it is to fix them. One of the reasons they are expensive to fix later would be that the developers might have forgotten everything about that area in the code base – the ones who wrote the code might even be gone. Also there is a huge risk that parts of the application might have to be redesigned etc.. So by managing cost – and trying to reduce the cost of one part of a process – the total cost of the project might end up higher than what it could have been had the testing started day one.. One should look at the project as a whole and not try to optimize parts of it independently. And while you are at it – does the project itself make sense at all – if you look at it from a Systems perspective?

Targets and failure demand:
Measuring velocity is common in Agile projects these days. In Kanban you would often measure cycle time. The problem however, is that we rarely get to measure this end to end. I.e. from when the customer requests a feature until he actually starts using it. Let’s say you only measure cycle time from when a developer picks up a story until it is ready for System Test. The developer might have to make the story pass a few unit and acceptance tests, but bugs found later in the process might be raised as new bug stories. Hence in terms of the statistics it does not make sense for the developer to go that extra mile and build in the amount of quality needed for the story to pass System Testing. The developer keeps coding at a high speed – while new bugs are raised. From a Systems Thinking point of view – i.e. from the end customers point of view – this of course does not make sense. The bugs are essentially failure demand – and reducing the failure demand would probably allow the user to get to use his (bug-free) features earlier and cheaper.

To fix this, you should start by looking at the System that encouraged this behaviour in the first place. Namely remove the targets that created local optimizations. From a Systems Thinking perspective it is not the developer’s fault that he produced a lot of bugs – it was the targets he was measured on. So is it his manager’s fault then? Well, maybe, but how is she measured then?

Compliance:
Starting out with Agile – you might try to follow the book – and hence end up doing for instance estimation. I.e. Scrum and XP says we should do estimation – if it doesn’t work for us – then we are probably doing something wrong so we should read some more about Scrum and see how we could do estimation better.

Wait a minute – if estimation doesn’t give you anything – then you shouldn’t do it! Blindly believing in processes or measuring people on compliance – is not the way to get the good results. The important thing is the end result – not how you got there.

Eye opener
What I realized as many have before me, is that all these different tools, CI, pair programming, estimation, 7 types of waste, product owners etc. are all just tools. You should use them if they make sense in your context, but don’t use them just for the sake of it. It is not like Kanban is always better than Scrum. It is not like stand-ups is something you have to do. It is not like IT is the solution to every problem. It is not like people are stupid just because they do stupid things – they are to a certain extent a product of the system. Reflect on your end goal. Learn to see underlying structures. You will be amazed!

Is this it then?
No it is not. I believe I have finally learned by know – that whenever I discover a better theory or a better tool – there is always something better waiting for me around the next corner. Take a look at Jurgen Appelo’s stuff on Complex Systems or the Chaordic Mindset in Bob Marshall’s the Marshall Model of Organisational Evolution for instance.

Disclaimer
There is much more to Systems Thinking – and I have only barely started to understand it. Feedback is more than welcome!

Advertisements

Going Forward!

29/10/2010

Being a consultant has been great. I have learned a lot, both in terms of process and technology. However if a company is doing great and have no problems recruiting people, it does not make a lot of sense to hire a bunch of consultants. So although you can come across some great projects – the chances are you will either end up trying to fix a broken process or work with legacy technology.

At Forward I will be able to use the optimal technology (of choice!) and work in a very lean/agile environment. Going from concept to production in a matter of hours/days instead of months or years will be liberating! I also believe it will be eye-opening and push my standards even higher.

Being located in Camden, my commute will almost be reduced to a stroll down the street. Life in London just became even better!

Distributed “Kanban”

04/07/2010

The distributed team I am working with currently has been trying out a little bit of Kanban.  We have assigned a WIP limit to the In Development / For Review column(s). That is, if the total number of stories in the In Development + For Review columns adds up to (or more than!) the WIP Limit, you should not pick up a new story, until at least one story has been reviewed and closed off and we are again below the WIP limit. (Ideally, going forward we should obviously add WIP limits to other parts of the process to, but we had to start somewhere.)

While there are lots of interesting things to say about this – such as that it has made us more disciplined and probably reduced lead time (working on the stats) and might make the team more predictable –  I will focus on the distributed side of things in this post.

Communication is a challenge on every distributed project I would say, and hence getting buy-in and understanding of the WIP limits at one location, does not necessarily mean that every location understands or starts respecting the WIP limits immediately. As every other change effort, one needs to use the full range of consulting skills / influence strategies.

What is a concrete challenge though is the time-zone differences. If one team finishes development and puts a story into For Review, then their typical next step would often be to pick up a new story. What so if the WIP limit will be breached? Should they wait until the resources that will do the technical and business reviews of the stories gets in (given they work in a different time-zone)? Or should they break the WIP limit?

The previous might force you to add a bit of a buffer to your WIP limit. And that might make sense. However, initially this is what happened to us: Location B puts story 1 into For Review and picks up story 2. Location A reviews story 1, but it needs more development or bug-fixing. Location B gets in the next day, does some fixes on story 1, and finish development on story 2. They even pick up story 3. Location A reviews story 1 and story 2, but they are both still not accepted. Hence Location B now has 3 stories in play.. This could go on for some time.

Let’s say the capacity of Location B is to work on one story at a time. Does it make sense to add in a buffer of 2++ extra then? I tend to disagree. So what we ended up communicating to Location B was to focus on quality before quantity. Do not rush to pick up new stories, but try to finish stories with significant quality.

What happened was two things:

1. Location A started reviewing stories much quicker. Focus was first on cleaning out the For Review queue – then do some development. (In order to give Location B quicker feedback, and prevent them from picking up too much new work before stories had been successfully reviewed).

2. Location B decided the brilliant thing of doing some local technical review first, before marking the story as For Review. This raised the quality, and took some of the work load off location A. It also meant that Location B are no longer rushing to picking up new work, but focusing on completing stories properly.

These two things allowed us to keep our WIP limit relatively tight. We do have a buffer for the stuff in For Review, but we try to keep it as small as possible.

Pair Programming Workshop at Agile Spain 2010

14/06/2010

I had the pleasure of facilitating a workshop at Agile Spain last week. Apparently this was the first Agile Spain ever. I must say the people at the conference were very enthusiastic and eager to learn more about Agile. I met lots of interesting people, and really appreciated how welcoming everyone was. A special thanks to those who translated eager Spanish discussions for me.

My workshop consisted of two parts. First my initial presentation called Pair Programming Strategies. My proposal to the conference was intended as a workshop around what we tend to do when our ideal pairing situation comes under pressure from various disturbing forces. My understanding is that conference organizers will post the slides on Slideshare, meanwhile you can take a look at the PDF here: Pair Programming Strategies – Agile Spain 2010.

The second part was an Open Space discussion. It turned out that less than half of the participants had tried pair programming, and only a few were doing it on a daily basis. However, the Open Space format was very adaptive to the participants’ needs, and it seemed we ended up with a set of interesting topics. Here is a quick summary of the discussions, based on the notes I gathered from each group (thanks for writing this down!). (If you participated in the workshop and are reading this blog, please feel free to add some comments. I wish I had taped the summaries everyone gave at the end.)

How do you start (pair programming)

This group was curious about how you actually get started with pair programming. Here are some keywords from the discussion:

  • Physical setup: Big screen / 2 screens. Movable keyboard / 2 keyboards.
  • Write down what you are working on.
  • Driver / copilot / supervisor. Switch roles.
  • Responsibility – Collective code ownership
  • It could be exhausting
  • Good merge with TDD. One writes the test, the other writes the code to pass it (Ping, pong)

Performance impact

This group discussed whether pair programming is an effective way to work or not. Here are some keywords:

  • Just for core functionality or also easy tasks?
  • What about deadlocks?
  • More focus
  • Knowledge transfer
  • Share responsibilities
  • Less or more stressful?
  • Tight schedules

The study referred to in this Wikipedia article which observed “a 15% increase in time, but a 15% decrease in bugs”, was mentioned as an example of a quantitative measure on the effectiveness of pair programming.

Distributed Pairing

This group discussed how or whether it is possible to do distributed pair programming.

  • Network latency is a problem
  • Very high bandwidth required
  • Communication services, such as video/audio must be working all the time
  • Desktop sharing tools
  • Different timezones
  • Is it possible to reproduce benefits of pairing remotely?
  • Try it first with people you have paired with co-located earlier
  • Multiple monitors

If I remember correctly, the group concluded that you needed to create an environment that was as close to a co-located one as possible. Then you would hopefully achieve a flow that was approximately the same as in a co-located setting.

Disagreement

Eventually someone formed this last group, discussing disagreement. They discussed what to do with a deadlock. And suggested one should involve a third person.

I asked everyone to give me a quick feedback on their way out, the result was 17 “+”, 7 “+/-” and 0 “-“. Among suggestions for improvements was to find a room without tables, as well as make it more dynamic. I am quite pleased with the feedback, but will do my best to improve. If you have more feedback, please leave a comment or send me an email (erlingwl (at) gmail (dot) com).

A big thanks to everyone who participated. I had a great time in Madrid 🙂

Adopting Agile – Challenges with the bottom-up approach

06/07/2009

Even though someone has probably written about this before, this is something I have experienced to a certain degree and feel I would like to share  with other Agile evangelists.

I’ve read a lot about Agile being adopted with the bottom-up approach. Developers wants to do their jobs better, faster and deliver more business value more frequently. They start exploring Agile approaches such as continuous integration or test-driven development. Sooner or later a couple of evangelists have convinced their team-leader or project manager to try out agile on their next project. They find themselves creating a sprint backlog, having daily stand-ups and maybe even retrospectives.

But hey – what about the demonstration meetings and the product owner? If the business people that are supposed to prioritize the product backlog are not familiar with agile, or are organized in a way that makes it hard for them to agree on a prioritization of the user stories in the product backlog, the project managers or the architects have to take on the customer role. This is a compromise that may very well work out okay. But it is hard to know if it the developer team really is delivering the optimal pieces of business value at the end of each iteration. Meanwhile the organization looses some of the benefits of their teams doing agile – for instance the possibility to turn around or change course quickly.

My point is  that using the bottom-up approach for adopting agile, will force you to make compromises that will affect the benefits of agile. Sooner or later the adoption may spread further up the organization – or if you’re really lucky someone might start a top-down approach too and meet you half-way (not that I know how that would work out =)