Agile cannot be used in every project
Some say that Agile can be used for every project, which is usually based on a wrong understanding of Agility. Agile cannot be used in every project. It, of course, depends on how you define Agility. If you define it as, for example, having all team members wear t-shirts with the word “Agile” on it, then every project can be Agile.
Agile is the use of an adaptive lifecycle instead of a predictive one.
Predictive lifecycles define and design the product upfront, and their goal is to follow the plan and materialize the design.
When it’s not possible to predict the product, an adaptive lifecycle can be used. There you follow a feedback loop of creating small, usable parts of the product, and use them to design and create the next subset based on the feedback.
The following animation demonstrates how Agility works within the Scrum framework:
And the following animation demonstrates the different approaches in predictive and adaptive delivery:
Why Agile cannot be used in every project?
There are two main requirements for having an adaptive lifecycle; both needed for enabling real feedback loops:
- Delivering incrementally: means that you should create “usable” subsets of the product, step by step, instead of delivering once at the end of the project. Think of a piece of software: you can have a simple version, and create a new version (increment) by adding new features every few weeks. Each version would be usable, and new features bring more value to the users/customer. This should be like this, because unusable deliverables cannot create a real feedback that is needed for adaptation. Can you do it with a building? Can you think of potentially usable subsets? Can you hypothetically use a building with walls, and without windows and doors? Even if you can, is it possible to use the feedback you receive from the completed walls to decide on the doors and windows?
- Developing iteratively: in order to deliver incrementally, you need to develop iteratively, which means you should repeat the development processes. For a piece of software, you design, code, integrate, and test each item separately, instead of designing everything together, coding everything together, and integrating once (Waterfall). Is it possible for a building? Can you design a foundation without designing the rest of the building? No; there are unavoidable dependencies between the elements in this product.
That’s why it’s not possible to use Agile cannot be used in every project, such as constructing a building.
Yes, you can recognize some parts of every project that have the capacity to be developed iteratively and delivered incrementally. For the example of a building, interior decoration is a good example of a product that can be done with an Agile system.
But uncle George uses Agile for his construction projects!
When you’re executing a construction project, you can work inside timeboxes, and you can have deliverables completed at the end of each timebox. BUT, these timeboxes are not iterations, and the completed deliverables are not increments, for the reasons explained before. You’re not using an adaptive lifecyle, and therefore, you’re not Agile.
You can use as many so-called Agile Practices as you want; they don’t make you Agile. See this article for more information: Agile Practices vs. Agile Methods.