Agile is dead. The word is too easy to slap onto any old thing in an attempt to jazz it up. It’s also pretty easy to use as a pejorative term by those who have no interest in improving. Let’s take a typical interaction:
“We’re doing agile development. By using agile techniques we can work more effectively and our software is easier to change, with fewer bugs. The agile approach lets our customers steer the project while it’s running to maximise return on investment.”
“Agile techniques? I’ve heard about them. Isn’t agile software development just an excuse not to spend time doing design and analysis? How can you run a project without nailing down all the requirements and design in advance? Agile approach? No thanks!”
In my head, I like to replace the word ‘agile’ with ‘professional’ and ‘modern’. To me the above conversation thus sounds a bit like this:
“We’re doing professional development. By using modern techniques we can work more effectively and our software is easier to change, with fewer bugs. The professional approach lets our customers steer the project while it’s running to maximise return on investment.”
“Modern techniques? I’ve heard about them. Isn’t professional software development just an excuse not to spend time doing design and analysis? How can you run a project without nailing down all the requirements and design in advance? Professional approach? No thanks!”
It also works when talking about software frameworks.
“We’ve built a software framework to enforce a standard approach to all applications and maximise reuse of common components. All a project team has to do is work to the common interface and conform their design to the framework. Sharing common software components maximises standardisation between projects.”
I hear:
“We’ve built a software nightmare to enforce a mediocre approach to all applications and maximise reuse of inappropriate components. All a project team has to do is work to an inappropriate interface and conform their design to the nightmare. Sharing inappropriate software components maximises mediocrity between projects.”
(Just to clarify, I’m a big fan of libraries. A library is something that you use. java.util.collections for example. A framework is something that (ab)uses you.)