Tom Hollander wrote about why your customers will love agile (even if they think they hate it) last week, and made several interesting observations about how agile methodology has taken hold in many companies and teams, and why customers should really be fighting for it, rather than fearing it. He notes that, while generally project management principles aren’t particularly sexy or interesting to developer types, many developer types are totally into Agile. I think some of this has to do with a very good marketing job on the part of Agile’s proponents. You’ve got things like “Extreme Programming” that make coding sound like competing in the X-Games. And then you’ve got Agile itself. I mean, if you’re a developer, do you want to be Agile, or not? If you’re not, then you’re what? Clumsy? Plodding? Uncoordinated? Certainly being Not Agile is not something anyone (coders included) wants to be, so it’s got a certain ego appeal inherent to it.
As for customer appeal, I think some of them may fear that Agile is just a way for lazy programmers to get away from doing the icky parts of development, namely writing specs and documentation. This Dilbert comic sums it up nicely:
Of course, the truth is, agile development (in its many forms) does require programmers to do things they don’t necessarily enjoy (e.g. writing tests, among other things), but the difference is that the things being done have value even to the one writing them. Personally, I hate doing work on things that I’m unsure will ever be used. For instance, writing a spec document that nobody will read. But when I write unit tests, even if it’s for a project only I’m working on, I know they’re going to be run. I know they’re going to help me later on when I’m refactoring the project. I find it easier to stomach doing the “extra” work of writing tests for my code because I can see the value of it. And tests, in an agile project, serve not only as a safeguard against bugs, but also as a runnable form of documentation. They describe how the application’s features should work, and they also can tell you at any given time if the application does in fact perform as it should.
So, yes, developers are a lazy bunch (at least the good ones), in that they hate to do monotonous work that can and should be done by a computer. Agile methodologies take better advantage of automation as a part of the software development process, and as a result can provide value to the customer much faster (in smaller pieces) than traditional BDUF/Waterfall approaches.