Luke VanderHart has written a nice gist about data modelling in #clojure. I like the distinction between private and public data and also the recommendations for the public data. The main point I'm not entirely convinced of is the strong correlation between public functions and the public data structures: maybe it's just me being lazy, but I'm not using private functions too much.
https://gist.github.com/levand/c97dd272bfd2f88fe5089eb81f85f98f
I guess there is a broader point here to be elaborated on: #clojure provides the :private meta data as a way to signify, well, something akin to encapsulation. However, this is not particular strict, as you can see from the availability of both ns-publics and ns-interns. 2/n
There is also the convention that libraries have a .core namespace which is defining the public API of a library. Obviously, there is nothing in #clojure that would enforce this convention. And if you're not working on a separate library but more an internal module of a bigger system, having multiple .core namespaces might even be not so pleasant to work with (eg. switching buffers).
Also, of course what you put into your .core module is completely up to you, so it's up to the intention or carefulness of the programmer if any non-private symbols in said .core module really form a public API or not. 3/n
Which brings me back to my humble and minor disagreement with Luke's gist: for sure, I would agree that his recommendations apply to any public API. But generally asking that all data structures that are needed to call a non-private function should be governed like he describes, seems to me to be too much. #clojure 5/5