I have been asked several times in just the past two weeks whether I believe that you can “apply Agile” to every project. This is a very interesting question to me, since I believe that agile is a culture, and not a defined process. To me, this question is much like asking whether you can apply your religious beliefs to every situation in life. Agile is a way of approaching software development, and if you are truly “doing agile”, you will continue to use that same approach for every project – you can’t simply set aside your core beliefs regarding how quality software is developed. To say that it doesn’t apply to this product indicates that you don’t believe that you can develop this project to meet real customer needs with a high degree of quality. Why would anyone take on that project in the first place?
I was very interested to read Alistair’s explanation of applying agile practices to home building. This really shows how these concepts are truly universal, and can really be applied to many different situations.
When people ask if agile can be applied to any software project, I believe that what they are really asking is whether the specific agile implementation that they are familiar with can be strictly enforced for any project. Of course, the answer to this is “No”. As a matter of fact, I believe that ANY implementation of agile cannot be strictly enforced – defining an agile implementation (like XP or Scrum) is an oxymoron.
To truly “do agile” one needs to look at the environment, understand the people involved, know the product and its complexities, and then put in place the pieces of certain agile processes that make sense for that environment. You have then created a culture where software can be developed with minimal documentation, a test-first mentality and most likely with daily stand-ups and automated testing. You take the values from agile and create a culture of software development that results in high-quality products that meet real customer needs.
When you create this culture, you do not set it aside for some new project that may not seem to fit into an agile process. Instead, you mold your processes around the culture you have created to meet the needs of this new project. Being an agile development team means more than strictly applying an agile process – it means being agile in the very definition of that process, and molding the processes and procedures to meet the needs of the project.