1. A proper design mn effort before starting g to code does the same. In that respect building software is the same as any other engineering discipline, programmers just refuse to do it
2. Has nothing to do with TDD, but everything with what I wrote above
3. So does setting up a proper design. Donโ€™t tell me that doesnโ€™t work, itโ€™s been my job since 1993
4. All of this can be done without TDD, see 1-3