Codea Calculator -- in "Agile" style

This video is quite good on the topic of TDD (ignore the emotive title, he’s actually saying do TDD, just don’t do it badly)
http://vimeo.com/68375232

In the question of how much design up front, I think in the calculator example given, the key was that the early “design” was really that there would be a class, and it would be talked to in a particular way. The key thing from there is that Ron didn’t start writing tests bound into the methods within the class, but against the API of the class (the key press and get display). This is the good way of doing things. The common mistake you see is really small unit tests against things internal to the class, this means that refactoring or changes in design break tests, even though the behaviour may remain the same. Testing to the external API means you are modelling behaviour, and redesign and emergent design only impacts your tests if what you redesign is the external API from the class.