Use of Assertions (2014)
blog.regehr.org
blog.regehr.org
If you're not really careful the assertions will quickly obscure the actual logic (as does logging), a careless engineer can easily add a bad assertion and fill up your monitoring system, another careless engineer can write a complicated but broken assertion without any tests - they've all happened to me on multiple production systems.
Eiffel style pre and post conditions might be a solution as the assertions are kept away from the main code path in the method signatures - but at that point a modern statically typed language might give you more value (preferably with null safety and sum types).
However runtime types like io-ts are important in network calls since the HTTP client's return type is `unknown`.
We have signal handlers and all that so the user still gets a core dump whenever the program crashes, it just takes more digging to find exactly where the bug is vs where it manifests.