I think that most software companies would say that they’re doing Agile development. Maybe they have a fancy chart showing the rigid development cycle that they follow, showing every step of the “Agile process” from planning to release. They might even have a nice checklist where they can mark off each step of the process, so that they can work out how close an iteration is to being done.
Nothing about that is “Agile”.
The original idea comes from the Manifesto for Agile Software Development, where it’s defined by these values:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
That rigid development cycle fails because it’s so rigid. Having a plan is great, but that plan needs to be flexible. You need to empower your people to move beyond it when it starts getting in the way, and you need to be ready to change it when it doesn’t quite fit.
That checklist fails because it’s not focused on the customer or the product. Having a test suite, designing and building a stable basis for your software, these are all worthwhile… but at the end of the day, the customer doesn’t care about the 500 tests that your team designed or the flawless elegance of the code that they wrote. They care about usable, working software.
This is what Agile is really about. It’s not some specific process. It’s not a one-size-fits-all approach to management. It’s about empowering your employees to do what they need to deliver working products. It’s about working with customers to make sure that what you’re building is what they want.
Software development is all about change, and Agile development is about working more closely with people to make sure that you can recognize and respond to that change.