What I write below might be universal knowledge, but I was personally bitten by this more than once, so I feel the need to emphasize it once again.
Clojure's assert form can be used for quick&dirty verification and consistency
checking in your code. It is convenient to have them during development because
they may discover incorrect usage of functions before the mistake drops deeper
into the callstack and fails with something like
java.lang.Long cannot be cast to clojure.lang.IFn. And for this task
is perfectly fine — it is there out of the box, and you can disable the
assertions in production by setting
clojure.core/*assert* var to false.
The problems begin when you stick to assertions for prod-time data validation (once again, you may already be smart enough not do it. I wasn't).