It is not hard to write code in Racket or Clojure; what's hard is maintaining it!

I've written a small Clojure project, maybe 3k loc. It was great fun. But when I go back to add small features I find it quite tricky. Bugs often sneak in.

I think maintaining old software is a known problem, regardless of the language. What about lisps make them more challenging in this regard?
Lack of types.

I don't want to start a discussion here on typed vs untyped so please consider everything I say to be qualified "It is only my personal opinion and experience".

I'm writing Haskell in my day job, Clojure for fun side project, OCaml because it's a nice language that's a bit underused and C++ because it's useful to know and not so evil as most people say (and it's progressing fast!). I should throw Rust into the mix because it might have a bright future.

WARNING: personal opinions and anecdotal evidence ahead!

Maybe there's a level of lisp enlightenment that I haven't reached yet but I can't just get by with writing lisp without writing tests. On the other hand I can get by with writing Haskell and OCaml without writing tests.

This is particularly true when I'm coming back to a project that I haven't touched for a few weeks. I change something and something breaks. In Haskell and OCaml I change something and compiler complains.

Maybe we'll see HaLispML one day.

Have you tried typed Clojure [1]? It seems promising for bringing in types.

[1]: https://github.com/clojure/core.typed/