• ...and how does that work with TDD?

    TDD favours small methods so very well. If you're in the camp that says you should only write test against the required functionality it doesn't give you a huge benefit but if you're in the camp that writes tests for the implementation then it gives you much tighter control. Personally I fall somewhere between the two. Mostly I'm interested in the functionality but I'll also write tests for any parts of the implementation where I think it's crucial that it behaves in a certain way.