Dynamic Types Have Advantages
Static type systems have so many advantages, that's it's easy to lose sight of the cost we pay.
Good ideas should be stolen in both directions. AvoidMonocultureDesign.
Static Types Are Verbose
Inference is not sufficient in 100% of cases. Clever inference is surprising and scales poorly. Limited inference is verbose.
The World Isn't Well Typed
Important tooling like debuggers, live system migration, and test frameworks need to break type well-formedness.
Gradual Migration is hard
Error messages are often poor
Doing a good job of error reporting is hard, bordering on a research problem. Elm is incredibly good in this space, although it has a simpler type system.
A runtime type error has more information. In addition to the position of the error, it has a full stacktrace, and an example value that broke the invariant!
Sometimes dumb tools are OK. Quick and dirty serialise / deserialise is useful.
Pattern matching can end up looking like type tests.
Sometimes the tools are easier to use, more design iterations happen, and better results emerge (cf Quickcheck and Hypothesis).