The only dynamic language I used in production code is Clojure, hence my perspective is probably skewed by it.<p>&gt; I&#x27;m having trouble thinking of a time when I felt something akin to what you describe with zombie constraints<p>Think of deprecated methods in a class, unneeded methods in an interface that are stubbed etc.<p>&gt;  I also write plenty of tests with plenty of mocking<p>This is good. But what happens to mock objects when the underlying class changes its implementation - It needs a large number of changes in tests.<p>If you are writing micro-services, the guarantees that typed system gives you are more trouble than they are worth. If your average microservice is less than 10k lines of code, it probably reduces to 1000 lines of code in Clojure, and for the codebase of that size, typed systems provide little value for the cost(atleast for me).