In today’s organizations, there is a belief all projects could benefit from being agile, and agility will bring the dual benefits of speed and lower costs.  This is often not the case.  Agile methodology has a lot of overhead including the various ceremonies that are required each day and each sprint. By the time you factor this in, agile/scrum will likely cost more than if the project had been completed using a waterfall methodology.

However, this is only the case on a project where the outcomes are known. Where the outcomes are unknown, the benefits of agile are greater. Agile allows the team to work when they don’t yet know the full or complete requirements of the product, or where external risks may cause the project to take twists and turns in its journey.  This is where agile truly shines.  The only certainty required is enough for a two-week sprint.

Having said this, even agile projects benefit from having more certainty than one sprint’s worth.  Without a vision for the product the team run the risk of needing to re-factor greatly each sprint as they discover what they have previously built isn’t compatible with the next sprint.  To avoid this, the product owner should develop a vision for the software and outline the key features at the beginning of the project. This will help the team better understand how the product will iterate and grow. Agile principles still apply in regard to not building something unneeded, but the software can be designed to be extended.

Refactoring may still be necessary, and this emphasizes the importance of automated testing.  If tests are built as the functionality is added then if the feature is re-factored, these tests should still apply and can be used to determine if the refactoring has broken the software.  Without these tests, regression testing of refactoring would become an odious task, bringing even more work to the agile product than a waterfall project where all testing would be done at the end.

So what is agile? It isn’t doing something faster and cheaper, it is about reducing risk and uncertainty.  It produces something of value earlier, but that something is not the full product.