I'm in the middle of my first (small) full app though, and I can tell it will be worth it. With java there was a wall in productivity I simply could not brake. I wrote pieces of code sometimes as fast as I could type (similar alterations to existing software), but still I felt I did the same thing over and over again. Now I'm at the first iteration of my framework and I can already tell a lot of the code I write won't be written again.
Just an example: one of the first things I did was to brake the old web convention of separating the app into writing html and processing requests. Most of the links I write now, including forms, have the action code right there. Something like (pseudocode):
html_button("Delete item", {
delete_item(value);
return list_items();});
I'm not saying it's the way to go with a webapp, only how easy it is to experiment with different paradigms.But I'm not sure if it will work out in the end... and I mixed this with liberal use of metadata and thrown away SQL too... mostly I try to go as far as I can and see where I trip. It's fun.
And it does make for some terse code. This for example is the code for changing the person responsible for a brief:
(html-select (cons {:id 0 :name "- No account -"}
(filter #(:is-account %) @users))
:selected (:account brief)
:onchangefn #(do
(passoc briefs (:brief %)
:account (Integer/parseInt (:value %)))
(return-from briefs (:brief %))
:onchangeparams (str "&brief=" (:id brief)))
And this really is all of it. No html, no sql, nothing.