My experience is that when an Agile project fails, the customer has a project with a partial set of features and some bugs. I've never seen an agile project fail in a way where the customer got nothing but a bill. That is sadly common in waterfall projects. I worked for a company where a project ran for 16 months, spent several million dollars and shipped nothing but power point slides.
I was on the team maintaining the old (client-server) system. In that same time; we added a test system, an automated build and improved user deployment. We also refactored the code to improve maintainability by separating the GUI and business layers. We also shipped dozens of new features.
In the end, four web guys from the failed project were moved to our team to explore building a Web UI from the code base we maintained. They had a demo in four months.
And there the seeds of fail were planted.
Why?
A GUI transplant was a dumb idea that didn't scale well. The C/S app was designed to be used by an internal sales rep. The Web app was designed to be used by the general public. We did ship one new form after another but there was so little reuse and so much duplication in the GUI layer that any little change (like adding paypal) required a lot of poking about and making repeat changes. The decision to keep compatibility with the Client server app was dumb. In hindsight, I really regret that choice and my efforts to keep compatibility.
I knew things were getting bad because it took us longer and longer to deal with changes. And the quality was slipping. After snatching victory from the jaws of defeat, we were now feeding defeat little slices of victory with every dumb idea we stuck to.
And this is why Agile works. We knew things were starting to go off path. Having builds fail and having more time used to fix bugs that made it to the customers were proof that things weren't going well.
It took us months to realize that we need to fork the project and reuse only those parts that made sense to reuse.
What we needed was for our PHB (our customer stand in) to ask two question of the Very Big Boss (the defacto customer)
- Which app is the priority?
- How should we assign our resources?
In the end we had three teams, C/S, Core and Web. This set up worked.