Hay bastantes, pero las ventajas superan con creces las desventajas.
Hay una curva de aprendizaje empinada.
Muchos desarrolladores parecen esperar que puedan ser eficientes con la programación de prueba primero desde el primer día. Desafortunadamente, toma mucho tiempo ganar experiencia y programar a la misma velocidad que antes. No puedes evitarlo.
Para ser más específicos, es muy fácil equivocarse. Muy fácilmente (con muy buenas intenciones) puede terminar escribiendo un montón de pruebas que son difíciles de mantener o probar cosas incorrectas. Es difícil dar ejemplos aquí: este tipo de problemas simplemente requieren experiencia para resolverlos. Debe tener una buena sensación de separar las preocupaciones y diseñar para la comprobabilidad. Mi mejor consejo aquí sería hacer programación de pares con alguien que conozca TDD realmente bien.
Haces más codificación por adelantado.
Test-first significa que no puedes saltarte las pruebas (lo cual es bueno) y significa que terminarás escribiendo más código por adelantado. Esto significa más tiempo. De nuevo, no puedes evitarlo. Te recompensan con un código que es más fácil de mantener, ampliar y, en general, menos errores, pero lleva tiempo.
Puede ser una venta difícil para los gerentes.
Los administradores de software generalmente solo se preocupan por los plazos. Si cambias a la programación de prueba primero y de repente te llevas 2 semanas para completar una función en lugar de una, no les va a gustar. Definitivamente esta es una batalla que vale la pena pelear y muchos gerentes están lo suficientemente informados como para obtenerla, pero puede ser una venta difícil.
Puede ser una venta difícil para otros desarrolladores.
Dado que hay una curva de aprendizaje empinada, no a todos los desarrolladores les gusta la programación de prueba primero. De hecho, supongo que a la mayoría de los desarrolladores no les gusta al principio. Puede hacer cosas como la programación de pares para ayudarlos a ponerse al día, pero puede ser una venta difícil.
Al final, las ventajas son mayores que las desventajas, pero no ayuda si ignora las desventajas. Saber de qué se trata desde el principio le ayuda a negociar algunas, si no todas, las desventajas.