Here is an interesting article:
http://www.osnews.com/story/22135/The_Problem_with_Design_and_Implementation
I especially like this point:
... ALL of software is design. 100% of software is design from the high level architect-like design to the low-level design of a for-loop. The implementers of software are not human! I knew you suspected as much given how odd many programmers are. No, the implementers of software are actually 'perfect' machines.
...
It is rather strange actually. It is as if people do not recognize the very thing the computer brings to the table. It gets rid of human implementers. It makes them obsolete. Thus, it can do the same task perfectly over and over again without error.
While the article isn't written from an "agile" perspective, I think the logical conclusions to its points are Agile practices.
My first professional experience was with a small software company that wrote structural analysis software. Basically, the software let engineers test their designs, and, after reading this article, it is clear to me that when we test our software, we're testing our designs too. We had several clients who had integrated our analysis software with their design tools, and found this to be a significant competitive advantage ... they were doing TDD!
this is also a great point:
Every line of source code is design. Software is the equivalent of the blue prints to a bridge. The only complete design is actual source code.

