>But it is insane to write tests first and then just write code to complete tests. It completely ignores the larger picture. It ignores how things will change and it has no context of what is good code and bad code
If you TDD outside in and tend to test from the edges of your stack, being conservative about moving your test coupling lower down the stack then it provides you with the freedom to change things underneath the hood and still have a body of tests that let you know you didnt break anything.
If you TDD inside out then yes you can and probably will create an enormous inflexible mess of tests that dont tell you if your code worked.
Sadly many tutorials teach it as "you want to write a class "Ball" you should write a test for that class first" which is wrongheaded.
Thats just writing tests badly though, it's not intrinsic to red-green-refactor.
I'm not sure what you're describing, but it kinda sounds like you're saying your using tests, not doing TDD. Having tests is very different than doing TDD