Los lenguajes dinámicos están teóricamente en desventaja, todo lo demás es igual, porque especifican menos sobre cómo funciona el código (cuáles son las restricciones) y, por lo tanto, menos de la refactorización se puede hacer automáticamente, y los problemas que surgen no se pueden detectar automáticamente también. .
Pero todo lo demás no es igual. Los lenguajes dinámicos más populares permiten un código altamente compacto pero comprensible, que generalmente hace que el desarrollo en ellos sea más rápido y hace que la lógica (que puede cambiar en la refactorización) sea más fácil de detectar visualmente. Entonces, aunque podría perder parte de la ventaja relativa de trabajar en un lenguaje dinámico, aún podría salir adelante, especialmente si de todos modos planeaba hacer su refactorización a mano.
Por otro lado, existen lenguajes estáticamente tipados con esencialmente las mismas ventajas que los lenguajes dinámicos (es decir, compactos y comprensibles, con tipos en su mayoría inferidos, pero mucho allí): Haskell es quizás el ejemplo principal, pero OCaML / F #, Scala, y otros también están en esta categoría. Desafortunadamente, dado que son menos utilizados que los lenguajes tipados estáticamente más populares, no tienen un conjunto de herramientas tan extenso para ellos (por ejemplo, para refactorizar).
Entonces, como conclusión, creo que lo hará adecuadamente con metodologías ágiles en la mayoría de los idiomas; No diría que hay un claro ganador en este momento, ya que la práctica aún no ha alcanzado la teoría.