I seem to find myself talking with developers that seem to have some fixed notion of agile development. They speak like it’s an implementation of XP (eXtreme Programming), or TDD (Test Driven Development), or some other fairly concrete methodology. Maybe it’s just me, but I really think this misses the whole point?

In my world, agile development is simply the practice of being prepared to change. When you apply this generic statement across the entire development process you start getting a picture of what I’m talking about. It’s not just about test cases, refactoring code, or any other concrete thing. It’s a mindset that adapts across everything you do.

Why do we write unit tests for our code? So we can change it.
Why do we use interfaces instead of class names? So we can change it.
Why do we use DI (Dependency Injection) or IoC (Inversion of Control) to some? So we can change it.
Why do we design as needed only what is needed? So we can change it.
Why does a release not have a fixed set of features? So we can change it.

Being an agile developer is about recognizing one of life’s truths: “Things change”. We expect it, plan for it, adapt to it, and ultimately embrace it in everything we do.

PS: Have you noticed being adaptive to change is also a great skill outside of work ;)