I have mainly worked on web applications, in that context I have found TDD very helpful. I have also used TDD to verify that certain behaviors are working inside of a Windows container, when I contributed to an open-source cloud platform.
The biggest difference for me in those two contexts is what test granularity is the easiest to work with. The containers had to be rebuilt, started, and then code had to be executed in them. This caused us to write larger grained tests, since the feedback loop was so long. Whereas in a web app, I am free to test individual functions or classes.
I have spent the last few years training engineers to use TDD and pair programming. After about 3 months of doing it full time, they tell me that they feel more productive.
Manual testing still has a place when using TDD, however the goal is no longer to verify correctness—but to find bugs. Once a bug, edge-case, or even a security vulnerability is found, a new test can be written to make sure that issue is gone forever.
Thank you for the questions!
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.