Agile is not TDD
A few days ago, I attended a user group event Agile open forum discussion, which lead to a couple of interesting topics that I'd love to elaborate on the next couple of blogs.
On this particular post I want to focus on how I understand the essence of Agile, and address the common misconception how Agile is ALOT more than just TDD.
Agile for agility
Agile is about achieving agility. With the ever changing landscape in economy, rapid pace of innovation in technology, it's even more important to embrace change. As Robert Collier said
Agile is about focusing development on demonstrable feature, which allows the team to integrate and release often. It gives a chance for the stakeholders of the product to review, give feedback and even change the direction. It exposes problem early and its up to the team to react upon it (it's important to differentiate problems identified by agile as opposed to caused by adopting agile).
Having regular releases allow the whole team to re-asses what went well and what can be further improved. Grow as a team. This will allow each of the team member to grow, make better decisions and self manage. The team becomes a living organization.
Identify and Reduce Waste
Apparently (I'm not trying to be an expert in history here-which Jason Yip might be able to help me with), Agile have a strong root from the manufacturing processes. It can be seen from its focus on identifying waste. Long term plans will be wasted when situation change, requirement documents will turn obsolete as direction change.
Being able to embrace change, short term thinking and little documentation does not come for free. This is why many agile advocate will tell you: don't just pick and choose the practices that you want to do.
All these nice characteristics comes through discipline; relentless refactoring, modularise component to small testable pieces, automated testing and continuous integration. They won't be easy, but they need to be done!