Just a quick talk about the thought process behind the "StandardAccess" approach used in Cacophony 2.0 pre4. That is, using a coarse-grained locking and data abstraction instead of the more fine-grained approach previously being used.
Basically, I think that it makes sense to start out with the fine-grained approach, when a system is small, but that some systems may benefit from transitioning into a coarse-grained approach, as they get larger. Specifically, I don't think that there is a single "best approach". Instead, I think that switching to coarse-grained probably only makes sense for the more "structural" parts of a system (like the "Commands", in the Cacophony example) while the leaf logical elements (things which represent more stand-alone units) should probably still be invoked using a fine-grained approach.
I don't think that there is single right/wrong answer to this, though. I just wanted to mention it since I think that nuanced software design concerns are interesting and should be discussed more often.