Here’s one: Mike Rettig wrote a great post about this in the early days, long since lost to time. Didn’t take that much note of it at the time but grew increasingly convinced over time: shared memory primitives are a bad idea. We would have been better off with an architecture that prioritised message passing. (Not that you can’t do message passing in Clojure, just that it isn’t privileged the way STM is.)