Thanks for your article. It is very interesting. From my experience, when we start to write a new piece of code, it’s rather easy to think a bit before diving in TDD. The problem gets more complicated as the software ages and you are asked for more and more features. They’ll come a time when your design will need to change significantly to cope with these. At that point, your tests won’t magically guide you to a better design, but they’ll tell you that your design is getting messy and they’ll help you to refactor. The trick is that we should always keep our design vision slightly ahead of tests and implementation. As you said, it’s an iterative activity.