>...TDD is great for some types of code, where the code is mostly self-contained with few external dependencies and the expected inputs and outputs are well defined and known ahead of time.
I find that TDD is very well fit to fix the expectations from the external dependencies.
Of course, when such dependency is extensive, like an API wrapper, then writing equally extensive tests would be redundant. Even then, the core aspects of the external dependencies should be fixed testably.
Testing is a balance game, even with TDD. The goal is to increase certainty under dynamic changes and increasing complexity.
I find that TDD is very well fit to fix the expectations from the external dependencies.
Of course, when such dependency is extensive, like an API wrapper, then writing equally extensive tests would be redundant. Even then, the core aspects of the external dependencies should be fixed testably.
Testing is a balance game, even with TDD. The goal is to increase certainty under dynamic changes and increasing complexity.