TDD for critical paths
Write the test first. Watch it fail. Make it pass. Refactor. Only for code that matters — business logic, auth, payments.
Test-Driven Development isn't a religion. It's a tool for design pressure. Apply it where the cost of bugs is high: authentication flows, payment processing, data integrity constraints, permission checks. For UI glue code, integration tests give better ROI. The red-green-refactor cycle forces you to think about the interface before the implementation — that's the real value.