Написание тестов сначала и реализация после гарантирует, что вы пишете код реализации, который определенно пройдет тесты. Внедрение сначала и написание тестового кода после запуска сопряжено с риском, что вам придется реорганизовать (иногда значительно) код своей реализации, чтобы обеспечить правильное покрытие тестирования, которое может стать дорогостоящим в зависимости от того, насколько поздно написаны эти тесты.
Личный опыт, я видел, что лучшая производительность / среда исходят от разработчиков, выполняющих тесты одновременно с реализацией, делая достаточно заранее, чтобы гарантировать, что границы контрактов интерфейса правильно зафиксированы и достойны тестирования, оставляя тесты это не повлечет за собой редизайн / серьезный рефакторинг к концу, но не рассматривает компонент как завершенный, пока не будет поставлен полный набор модульных тестов.