The real limitation in any system is this:
Can you make the code say what you mean?
TDD is just really efficient at demonstrating your inadequacy at achieving this goal. It's a really uncomfortable experience, and to get comfortable with that feeling takes a certain acceptance of the human condition that reads like something straight out of eastern philosophy.
Tl;dr to err is human. To really fuck up requires the aid of a machine.