Why do TDD?
Because sometimes your test passes the first time you write it. Either you’re done writing any more code, or your understanding of how your code is supposed to work is wrong. Both paths lead to a better spot than without tests. Writing this because a test I wrote passed, exposing a misunderstanding on how a system I’ve worked on for months.
Getting to a failing test is half about characterizing the behavior you want to see in your system, and half about challenging an assumption on whether your system behaves today how you think it behaves. And challenging assumptions through such a cheap mechanism as an automated test is always a good thing.