The second principle from the Agile Manifesto is “Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.”
I call this the Product Manager’s dream principle: “I get to change the requirements, even after development has started! Woot!”
First let’s break this principle down and see what it really means and then let’s talk about how to deal with it.
There are 4 ideas embedded in the PM’s dream:
- Welcoming changing requirements in general
- Welcoming changing requirements even late in development
- Harnessing change
- Customer’s competitive advantage
These ideas come from the grim realization that requirements are going to change, at any stage of the development process, and there isn’t a damn thing you or any process can do about it. We can pretend that we have control over change. We can ask business owners and product managers to sign an iron-clad contract but Mother Nature and Murphy’s Law are not going to stop working on our plans.
Given that change is inevitable we can either hate it or love it or just deal. If this principle was written from the hating change POV it would read “Abhor changing requirements, especially late in development…” On the other hand if the authors of the Agile Manifesto loved change the principle would have read “Encourage changing requirements, the later the better…”
“Welcoming changing requirements” is a positive way to deal with a problematic issue in the same way that many cultures have a tradition of adopting strangers. It’s a smart coping mechanism and recognition that shit happens.
Why do Agilists welcome change and not run the other way and lock the door? Because they are confident that Agile process and policies are setup to withstand change. They have accounted for change in the Agile process and thus change is not going to do much damage to the overall big picture.
Agilists also recognize, according to this principle, that they can “harness change”. Agilists can guide change instead of being driven by it. That’s a pretty tall order but with the right process, one that assumes the inevitable, Agilists take advantage of the opportunities that change creates. Change is where true competitive advantage comes from! Not from a carefully designed, well executed plan, but from a process that gives customers the chance to quickly capitalize on changing market conditions. Wiggle room beats precision any day of the week.
Stephen Jay Gould once wrote about how his interest in fossilized snails, from which he would derive many insights about evolution, came about completely by accident. Gould spent his life discovering and teaching how random events lead to advantages that life is able to exploit. That’s agility right there.
Working with Niles Eldredge, Gould popularized the theory that evolution works in cataclysms called punctuated equilibrium: Short periods of sudden change separated by long periods of relative calm. Agilists see a lot of punctuated equilibrium in software development. Everything in the project is going along as planned and then WAMMO! The market changes, a bug appears, or a forgotten requirement emerges! (This is in well run organizations. In poorly run organizations the change is constant and internally generated.)
OK, now that I have accepted change how do I deal with it? Each school of Agile development from XP to SCRUM has different foci for dealing with change. I’ve seen five patterns emerge that successfully welcome change (but I’d love to hear about others):
- Time boxing: Limit the amount of time you spend on any one task so that the cost of change isn’t devastatingly high.
- Locked iterations: Restrict change to outside development cycles. Once a dev iteration is started ignore change until victory can be declared. If you really must change requirements in the middle of an iteration stop and re-plan.
- JIT planning: Plan as little as possible and as late into the project as possible.
- Light design and documentation: Waste as little time as possible on design and documentation as it’s all going to change anyway.
- Measure and analyze: Don’t act on assumptions or intuition. Do what the data tells you to avoid surprises.
These solutions in isolation create as many problems as they solve. But when used together in a well thought out and integrated process they create a flexible fabric that can capture the energy of change and use it to gain an advantage. This is hard to do, not because it’s complex, but because many engineers (and normal people too) are uncomfortable with change. One strategy that helps people surf the chaos is to keep a central vision in place with a general roadmap of how to get there. As long as the vision is stable then change is the process of getting there.
Comments
5 responses to “The Name of the Game is Change”
Another really great piece. I wrote an article published in Innovation in 2001 on a process I call “Channeling Innovation” that encourages, accommodates, and manages change. The “five patterns” you list fold neatly into it. I’m looking forward to your next post.
“This is in well run organizations. In poorly run organizations the change is constant and internally generated” – Very well said! This emphsizes a need to be organized and in control when implementing agile principals. I feel it’s an important point that is many times missed in following scrum. Thanks John
Anish B
“JIT planning” is spot on, and most important. I’ve heard famous software people refer to this as “late binding” or as the Open Future Principle: “The best way to implement the future is to avoid having to predict it” (pdf). In other words, don’t make decisions now if you can make them later (when you’ll have more data).
This, in turn, yields a very important architectural axiom – that we ought to choose and create systems which allow you to defer decisions to a later point. This means choosing systems which let you separate business logic to make it reusable over those that don’t, picking systems which allow you to change garbage collection strategies over those which don’t, and systems which allow you to separate your domain objects from their serialization strategies.
Excellent comments James and Andrey! Ever since I first ran into the Model-View-Controller design pattern I released that layering biz logic was an amazingly powerful tool to deal with changing requirements. Agile is just he methodology that lets you do it with people 🙂
Thanks for the comment Anish. I agree with you: You have to be really organized before you can be successful with Agile and Scrum.