Thursday, July 16, 2009

Test Driven Development is not the same as agile!

So I was reading a recent blog post on this issue here. Here are a couple of key lines that really struck a chord with me:

  • Over the last several years managers, directors, and executives have asked me to present empirical evidence that Agile will cost them less money and take less time
This is a great question. I'm interested in data from the community?
  • A recent paper (here) published by Microsoft and IBM, showed that practicing TDD versus general unit testing reduced bug density by 40-90%. Reading this paper gave me one data point; bugs are one of the three things listed above that customers hate the most. The question is can bugs be equated to time and money?
This is really insightful and would suggest a renewed focus on eliminating bugs to reduce cost. But the author fails to include which is listed in the white paper is the associated cost of TDD. Here are the costs as noted by the paper "Subjectively, the teams experienced a 15–35% increase in initial development time after adopting TDD." Despite the increase in additional development time, TDD is worth it as the costs of fixing issues post-customer launch is very high.

Overall the author of the blog has the right idea, that TDD is the way to go! However, he seems to conflate agile and Test Driven Development. They are two distinct things. One can practice agile and not TDD and vice versa. Now we can debate whether or not you should write unit tests for "private" methods :)

Monday, July 6, 2009

Benefits of Agile Software Development

Agile Software development is well documented all over the place. You can see the agile manifesto here. I'm not going to expound on all the details that already all over the place, rather I'm going to focus on the benefits that I have seen in practice. Enough of this theory and explanation of how agile would ideally work, here's the real scoop. There are some drawbacks of Agile and other benefits, more on that later.
  1. Customer's change their minds and that is ok - The burden on trying to know every single detail of the customer/market requirements is greatly reduced. I have never worked in an organization where there were enough product managers to do everything that product managers are supposed to do. Having to write complicated and detailed technical requirements up front before development begins was always a huge burden. I hate being on the critical path. With Agile, I don't have to know every detail up front, I can accept the fact that the customer can see the product and change their mind.
  2. Estimating work is much better in Agile - I love the concept of story points and velocity. It let's the team achieve a natural capacity and work speed rather than trying to work overtime to achieve an unrealistic deadline because the product manager took too long writing the requirements.
  3. Team work is really emphasized - This is the real strength of Agile. Teams work together, teams communicate daily, teams communicate verbally. It just works well rather than just trying to throw "artifacts" over the fence to the development team.