A great start. But even though "a failing test" is a necessary precondition for writing production code, to me it's by no means sufficient.
I'd at least add: Be sure to understand the problem. And have a good idea of how to solve it.
TDD won't help against ignorance.
TDD:
Write no production code without a failing test.
Stop writing that test as soon as it fails, or fails to compile.
Stop writing production code as soon as the failing test passes.
Refactor both and then repeat.
Cycle time: ~10-60 seconds.