Controversial opinion: I don't think TDD makes sense for most CRUD software. It makes sense if you're writing software with a defined input domain and output codomain, like a database engine or a CLI utility, especially where a breaking change has a huge impact, but if your API has O(1) consumers then it's a very high cost to pay for little benefit.