We all know the stories: “if you do agile, you can change!”. Isn’t that great? Those poor fools doing Waterfall can’t change. They bolt themselves to this big plan, and stick to it even when it goes to hell.
But on an agile project, we can do whatever you like. Change direction, change product, change focus. Change your scope, change your timelines, change your priorities, whatever you like!”
These are myths and misconceptions. In this article I am going to challenge:
Let’s get started!
I’ve worked on many agile projects and many waterfall projects. Many of them (both types) have involved changes. Waterfall projects certainly can definitely change: they institute a change control process.
Remember, Waterfall projects tend to fix scope up front, base their time and cost constraints on that scope, then try and hold those things fast in the Iron Triangle. If scope goes up, time goes up and if time goes up, the cost goes up. So Waterfall project managers often spend a lot of time trying to avoid scope changes by a Change Control Process.
You make someone fill out a bunch of forms and do a bunch of impact analysis and cost and risk estimation (all of which are a waste of time or money). And hopefully, they give up and go away or can’t get the seventeen approvals required for their change.
This describes big scope changes. There are also the little “micro” changes: a new button here, and different heading there, an extra set of form validation there. Waterfall people are (rightly) worried about these too, so they try and prevent them by specifying all of the system up-front in big “specification” documents. You don’t start building anything until everything is “specified” in the big document. If someone wants to change something, they have to change the specification first, which is covered by guess what? A slow and painful change control process! Thus, even if someone has a better idea on how to do something, they probably won’t get their idea in.
So Waterfall projects CAN and DO change. So Agile doesn’t differ from Waterfall in that “Agile projects can change, Waterfall projects cannot change”. Both can change and can not change, depending on the decisions made by people working on the projects. The difference is that Waterfall projects tend to resist and fight change; they discourage change by putting wasteful processes around it that make it difficult. Agile projects tend not to (though there is no law saying they can’t… maybe you’ve worked on an agile project that has? If so, I’d love to hear about it in the comments).
Change is complex. Some change is good, some change is bad. Some change is easy, some change is hard. I’ll start off by dividing change into three types:
The first type has the lowest cost and risk since you’re just changing an idea or a scope item. The second one has higher cost and risk because you might break the thing as you change it. The third type has the highest cost and risk, because you might break it, and you might break other things that this thing is connected to, and if it does break, you’re impacting real users or customers, instead of just something in a test environment.
So it seems like the first is the best type and the third is the worst type. That’s roughly correct though is a simplistic view. The third type often has the most value.
For example, if you have a website that customers don’t like or can’t use or isn’t converting, fixing it and improving it could yield huge results. But rearranging items buried in a product backlog probably won’t make much difference to anything. As always, it’s not just about the costs and risks, it’s also about the benefits.
If “being able to change” is good, that means change is good, right? We know that some changes are more costly and risky than others, but change is a good thing, right? Otherwise “being able to change (easily)” wouldn’t be an advantage, right?
Change can be good or it can be bad. The important question is not the what (what are we changing? Has it been built yet?) or the how (do we just let it happen or do we wrap wasteful control processes around it?), but the why. Change can be done for a variety of reasons, some of them are good and some are bad. Here is a rough list:
So if you have a product owner or stakeholders or marketing people who like to change their mind for no particular reason about what they want to build (urgh), or are in the middle of building (double urgh) or have already built (triple urgh), “being able to change” is not an advantage, it’s actually a disadvantage.
You want to be making the right changes for the right reasons.
The worst reason for change is because “the boss says so”. They will actually have their own reasons, probably based on some line of thinking. But if it’s not based on inspecting the product (in an agile sprint review), or actual data, then the reasons are probably invalid.
The next worst reasons are “we saw the product in a sprint review and we don’t like it and we want something else”. At least the stakeholders have seen the product; but unless the feedback is from actual customers, it’s not very relevant. Remember, you’re building something to make customers happy, not stakeholders happy. Stakeholders can hate the product, but that doesn’t matter if customers love it and pay for it.
The next best reason to change something is that you did some user testing, and the testing showed that the product needs to change. This is important feedback and is a good reason to change. Obviously, you should be testing things you haven’t built yet or are just starting to build (via Rapid Prototyping), rather than things you have already built.
The problem with user testing though is that it is not a realistic environment. Eric Ries has some interesting things to say about this in his book The Lean Startup.
The best reason to change something is that you have gotten real data from real customers in a real production environment. That is, you have built analytics into your product (you HAVE built analytics into your product, haven’t you?), and it is telling you that customers don’t like it, don’t understand it, or can’t use it properly.
Of course, this will mean changing something you have already built, which is expensive and risky. So you have to invest in automated testing and continuous delivery, to reduce the cost and risk of these changes.