Agile development is hard to define, because most people define it by giving examples. For instance they give a specific description of Extreme Programming (XP), instead of defining of agile development in general. We’ve ended up with a widespread misconception that agility is about XP techniques like Pair Programming and Test-Driven Development (TDD).
By the way, if XP is the only form of agile that you know, this page probably won’t make any sense. Am I really saying that TDD is not part of the core definition of agile? Yes I am. Look for TDD in the Agile Manifesto. It’s not there. While TDD is a good thing, and I like it, it’s not the core essence of agility. You’re welcome to define XP in prescriptive terms, mandating pairing and TDD, but those same prescriptive terms do not describe the agile movement as a whole. It is, after all, about “people and their interactions; over processes and tools“.
Defining agility by describing XP is like defining democracy by describing America. Such a “definition” obscures the underlying concept with details of the chosen example.
Agility is not defined by TDD, just as democracy is not defined by having a President. Democracy is defined as “choosing leaders in competitive elections”. It makes no difference whether you have a federal system or not; whether the executive is or isn’t separate from the legislature; or which method you use to count the votes – it’s still democracy.
Do we have a similar definition of agile development? One which is uncorrupted by specific examples and which defines the core underlying concept? In many respects, we don’t. The agile manifesto is the founding document of the agile movement (and the source of the term “agile development”). It’s a great definition of what agile developers think; but it doesn’t concisely define what they do. In other words, it talks about values and principles but not about practices.
Here’s my soundbite-size definition of agile:
The agile movement asserts that software development works best under:
Simple, iterative processes, which empahsise creativity and collaboration.
I use the word “creativity” to mean “inventiveness” – i.e. “producing solutions to difficult problems” (not just artistic ones). The most difficult problems are those involving (i) lack of clarity of the situation [e.g. requirements], (ii) multiple goals, (iii) complexity and (iv) time considerations – sounds like software!