I don’t believe in silver bullets for software development. Building software is very creative and I don’t think we can do it by just following a prescribed set of steps without thinking about what we are doing. And thank goodness. I don’t want to be in a field where I can go on automatic. I like the constant learning and challenge of discovering new ways of doing things.
I do, however, believe in and seek out things that help us be better at what we do. I think agility works because it creates a structure that encourages doing the right things more often.
For example, breaking down big problems into smaller problems is very useful for managing complexity and this is exactly what iterative development does. At the same time it also helps us group and build features in an organized way that makes integrating features easier.
We cannot successfully develop iteratively or employ continuous integration without following certain development practices and paying attention to code quality. Because we welcome customer feedback and changing requirements we must write code that is changeable. This forces us to establish engineering practices that promote higher quality software that can change.
Agility also addresses the cultural aspects of software development. Trusting the whole team to work together and do the right thing empowers us to collaborate more effectively. Favoring face-to-face conversations and working software over artifacts and ceremony keeps us focused on what we are there for in the first place—to create value for our customers. Supporting sustainable development and an environment that encourages improvement helps create teams that get better over time instead of burning out.
By following the few principles stated in the Agile Manifesto we are forced to adopt better engineering practices and a more effective development culture. I believe this is one of the main reasons that agility works for many organizations.