Wednesday, June 27, 2007

Agile = Discipline

In a recent conversation with another agile enthusiast, I reiterated my assertion that any formal embodiment of Agile is inherently an oxymoron. This was met with some concern, and the conversation quickly turned to the subject of discipline and agile.

There is a very common misconception that agile means complete freedom (i.e., chaos) where every developer can do what they interpret to be the "right thing". Freedom from documentation, freedom from a disciplined approach to software development, freedom from being accountable for product not shipping on time. This is not only completely false, but is actually the polar opposite of a true Agile environment.

A team that is truly operating under the Agile principles actually must be extremely disciplined. In fact, I assert that following agile principles requires more discipline that non-agile processes. If you are going to get product out the door and into customers hands on a regular basis, and if you are going to have a functioning "shippable" product at the end of each iteration, and if you are going to operate under a "test first" mentality, then you must be extremely disciplined in whatever process you put in place.

My assertion that a single embodiment of agile principles will not always work for every team does not indicate that I advocate chaos. Rather, I believe that one needs to assess the team, the customers, and the product and come up with the implementation of the agile contepts that works best for that environment. Once those processes are put in place, the entire team must be extremely disciplined to follow those processes in order to get their product shipping regularly to customers.

Of course, every process must be molded and modified as time goes on. This is another reason why I believe that each team must create their own implementation of Agile in order to create their Agile Culture - because those processes will be changing over time to better meet customers needs. If you simply lock yourself into XP, Scrum or whatever other embodiment you choose, you may loose the ability to mold that process over time as your culture evolves.

Having a true agile culture actually means much more discipline on the part of developers, testers, product managers, management, etc.
  • Developers need to be more disciplined to ensure that they develop to the test plan that has already been written, that they do not change too much at one time, and that they return to a "shippable product" state before moving on to work on a new feature.
  • Management and product managers needs to be more disciplined in prioritizing features so that any given iteration is not overloaded with too many changes, and it takes discipline to stick to the idea that no product will ship before its time (or that no iteration will end before its time...).
  • Testers need to be more disciplined to ensure that the product remains shippable at the end of each iteration - especially if that product DOESN'T ship! It is much too easy for testing to sign-off on a "shippable" product so we can jump into the next iteration if they know the product isn't actually going to ship to customers. It takes discipline to stick to the same high standards regarding the definition of a shippable product regardless of whether it will actually get into customers hands or not.

Agile does not mean chaos - agile means dedication to small, incremental changes that benefit the customer in observable ways, and reacting to the changing priorities of customers. And that requires great discipline throughout the team.

No comments: