As linguagens dinâmicas estão teoricamente em desvantagem, todas as demais são iguais, porque especificam menos sobre como o código funciona (quais são as restrições) e, portanto, menos refatoração pode ser feita automaticamente, e os problemas que surgem também não podem ser detectados automaticamente. .
Mas tudo o resto não é igual. As linguagens dinâmicas mais populares permitem código altamente compacto, mas compreensível, o que geralmente torna o desenvolvimento mais rápido e facilita a localização visual da lógica (que pode mudar na refatoração). Portanto, embora você possa perder parte da vantagem relativa de trabalhar em uma linguagem dinâmica, ainda assim poderá avançar, especialmente se estiver planejando fazer a refatoração manualmente de qualquer maneira.
Por outro lado, existem linguagens estaticamente tipadas com essencialmente as mesmas vantagens que linguagens dinâmicas (ou seja, compactas e compreensíveis - com tipos principalmente inferidos, mas muito existentes): Haskell é talvez o exemplo principal, mas OCaML / F #, Scala, e outros também estão nessa categoria. Infelizmente, uma vez que são menos usados do que as linguagens de tipo estaticamente mais populares, elas não possuem um conjunto de ferramentas extensivo (por exemplo, para refatoração).
Então, como resultado, acho que você fará adequadamente com metodologias ágeis na maioria dos idiomas; Eu não diria que há um vencedor claro agora, já que a prática ainda não alcançou a teoria.