How about writing tests that enforce invariants?<p>I have been doing clojure dev for a little bit, and here&#x27;s what I do -<p>- Run tests in the background continuously (lein expectations will give you that. or you can write your own shell script)<p>- Do small checkins, frequently to git<p>- Write tests that enforce invariants. Haven&#x27;t gotten to test check yet - but I guess that would be even better.<p>The trouble with types is they push you into a corner early, and after a while people will be coding to zombie constraints - the constraints that were there before, but not true anymore. They are also verbose, and need tooling to get you out of the corner. If the requirements change a little bit, it could be that, your old solution goes against the grain of the new problem, which is very hard to get rid of without rewriting the code.<p>With dynamic languages, I find that I think more about the problem, than trying to do constraint satisfaction with other entities in the code, not to mention the language itself.