@floppy Don't be caught by the trap of thinking TDD will necessarily give you a great design. It's a good way of avoiding bad/untestable code, but it doesn't guarantee clean, understandable interfaces etc. As Rich Hickey described, using TDD to get a good design is like driving a car along the motorway and bashing against the crash barriers as a way of keeping on track.
@floppy@theDoctor@ghost_letters Code composed of small modules is easier to test, if each module can be tested in isolation. It's then possible to drive unusual & error paths as well as the happy paths through the code.
The trick is deciding the size of "unit" to test. If it's larger, there's more scope for refactoring without needing to change the tests. If it's smaller, then moving code between modules and changing interfaces tends to require test rework.