Monday, August 17, 2009

Agile, TDD and upfront desing

As TDD and agile software development are emerging as more and more used technologies for software development lot of software developers are jumping into it without having real knowledge.

From my point of view one of the misconceptions about TDD and agile is that you don't need any design and architecture upfront. TDD with refactoring will give me the right architecture in all cases.

Although I am big fun of agile software development I don't believe this is idea of the agile. Agile is here to help develop better software for better customer satisfaction. But it in no cases claims that you should forget about big picture, about documentation and about having at least basic understanding of your system design.

From my point of view you need to do basic design at least at the high level. Then for important parts you need to go to lower levels (if really necessary). And then agile together with TDD will help you to really get it right. To separate concerns, to make separation between domain objects in different tiers and so on.

So as conclusion, agile does not mean no more thinking. Agile means think about the problem, do basic planning and then use TDD and other agile tools to get it right.

1 comment:

Urs Enzler said...

I agree with you. There is still need for a (minimal) design up front.

Put in other words: TDD is great to optimize locally (refactoring), the big picture (architecture) is still needed to optimize globally.