&gt; <i>When it comes to maintaining and evolving these systems, the lack of explicit static typing becomes a bottleneck.</i><p>Assertion without evidence.<p>Lack of static typing is awesome in evolving a system: you can convert a part of it to some new types as &quot;proof of concept&quot; and still load and run the code to get usefully far. You just avoid stepping on the parts which aren&#x27;t converted&#x2F;refactored yet.<p>Having something Working Now (tm) is a great motivator for some developers to keep going; it reduces the &quot;activation potential barriers&quot; against creativity.<p>The trick to using dynamic languages is to have a ton of static experience. The typing is in your head, where it doesn&#x27;t get in the way. What we are seeing a lot of lately is a crop of developers who have never worked in anything but some dynamic language.<p>When I&#x27;m working in a dynamic language, my concept of type is consciously coming from all the static experience. That keeps me from doing totally scatter-brained things which are possible. I write code such that most of it <i>could</i> statically check, but with the freedom that some of it doesn&#x27;t have to. Moreover, I am aware (hopefully!) of which code that is.