Thursday, December 06, 2007

Unconsciously Agile

The funny thing is that most shops are unconsciously flirting with Agile Development. They do a release on a regular basis which is very similar to what Agile teams do without even realizing it and then feel ashamed that they had to do it. Afterwards, they hope they won’t have to do another one. Those feelings of guilt and shame get associated with the need to do the release and it doesn’t occur to anybody that they are missing what is right in front of them. I know that I’ve been looking the evidence right in the face for years and I never saw it.

I am speaking of maintenance releases, patches, and hotfixes. Forget for the moment that these are created out of necessity due to problems with “the big release” and that they are often done under intense pressure. Forget for the moment that sometimes you have to redo a hotfix with another hotfix. The need for the second hotfix is often found by the intense scrutiny that is in place during the aftermath of the first hotfix and due to the fact that the hotfix probably didn’t get the full spin cycle of the normal QA process.

Think for a moment about how you later felt about that maintenance release. Didn’t you think something like “too bad we had to do it, but we really pulled together and I’m really proud of that release?” Wouldn’t you say that the type of release that spends the most time in production is actually a maintenance release or patch release?

A lot of the time, those maintenance releases aren’t just maintenance releases. Usually, there are a smattering of small enhancements thrown in for good measure for a customer or two.

So, let’s review. Your maintenance release has the highest quality, was produced in a short time, and it has a fair amount of new features in it. Guess what? This is very close to what Agile teams do on a regular basis. Surprise! But then of course, you revert back to your old habits.

I believe that the reason that most shops drift towards and then away from Agile development is that it is the natural rhythm of software development and it is hard to resist it. The challenge is to sustain it. In order to sustain it, you need two things: understanding of Agile and conscious intent. Without conscious intent and the synchronizing signal of short iterations it is hard to notice the difference between being on the path and off the path unless you stay on the path for a while. The other problem is that while everybody in an organization might from time to time all be synchronized into an Agile rhythm by pure chance, the synchronizing signal of the project plan, habits, and entrenched process interferes with the natural rhythm. Thus, the natural rhythm doesn’t get a chance to take hold.

Let me leave you with this thought: if your best releases are your maint/patch releases, and they are similar to what Agile teams do on a regular basis, perhaps you should take a closer look at Agile.

[Note: many thanks for Soon Hui's comments on an earlier version of this post.]

Next: The Agile Waterfall

5 comments:

Anonymous said...

There is a bit of a difference between patches / maintenance releases and "normal" agile development. Typically when patch is needed there is quite clear understanding of what exactly is required.

Even though prioritizing might still be useful, the requirements are quite well detailed up-front.

Damon Poole said...

You bring up a good point Artem. Certainly an iteration and a patch/maintenance release are not guaranteed to be exactly the same. While Agile helps when there is not a clear understanding of what exactly is required, it is perfectly ok if you do happen to know what is required. My point is that folks may have more experience that overlaps with Agile than they realize.

Isaac Rodriguez said...

Hi,

Great post. Let me go even a step further. I am a true believer that agile practices are the way to go. But, I work for a company that develops commercial products and we are in yearly release cycles.

For a long time, I've been trying to push agile practices, and people react negatively to that because they make the wrong assumptions. They say, we do not release often, things are different in our world. We do not have direct contact with customers, etc.

People often do not see that we release 2-3 builds a week to QA, can you be more agile than that? Furthermore, Product Designers complain we have not implemented exactly what the spec said. Aren't they in some way our customers? Aren't they the ones that decide if a feature is written correctly or not?

Working at this pace and avoiding agile practices is a nightmare, so my battle now is how can I introduce agile practices without telling people that they are agile.

Damon Poole said...

Isaac,

You don't have to release often to be Agile. There are benefits to releasing often, but they are not the only benefits nor are they the lions share of the benefits. See my post on the definition of Agile which talks about the complete list of benefits and where they come from.

If the product designers produce their designs as a result of interacting with customers, they yes they could be considered a customer proxy.

All of the Agile practices except for short timeboxed iterations can be introduced without major disruption and many have been or are in the process of being introduced in many places without any reference to Agile. Refactoring, Continuous
Integration, and Test Driven Development are becoming very popular independently of Agile.

In the end, I believe your best tool is education. Start finding people that are like minded or open minded and suggest that they at least read a book or two. I think "The Toyota Way" or "Lean Software Development" are both excellent starting points which lay the groundwork without hitting one over the head with the message.

Ethan Moore said...

Without conscious intent and the synchronizing signal of short iterations it is hard to notice the difference between being on the path and off the path unless you stay on the path for a while.Nicely put indeed Damon!!Apart from studying Agile methodology and implementing it on a software development project, it is quite interesting to understand the degree to which you are Agile.Why don't you have a look at our piece of work.Click on: https://www.scrumstudy.com/blog/how-agile-are-you-2/