How does TDD force you to a better design ?
You can see this same thing in action when watching functional programming live coding sessions: most live coding is bottom-up, but they still write the function signatures before writing any code.
Good design is a creative activity and cannot really be forced, only given space to grow.