Branimir and I came up with the tongue-in-cheek assertion that ACS has many fewer contributions and shared libraries than Java because, in Java it's so complicated to accomplish anything at all that, once you've done it, you've already done it in a global, reusable fashion and you might as well share it; whereas in OpenACS, it's just soo easy to make little tweaks that solve your problem, but really hard to contribute them back. In the terms of this thread, the groove can be the enemy of the community, because it can lead to lots of customized OpenACS work not being shared or sharable.
Here's a concrete example. I want the separator character in my breadcrumb trail to be a <, not a :. Since I've made this same change five times on five different sites, I already know that I just find ad_context_bar (it's in acs-tcl). ad_context_bar takes an argument to override the default :, but since it's called from so many places, it's not practical to use that. The Right Way at this point would be to create a new parameter in acs-subsite that overrides the default, but that would involve changes to two packages and upgrade scripts and testing etc. Instead, I do it the Wrong Way: I just change a single character in one file and I've solved my problem. And forked my code. And I'll have to do again in the future, and newcomers who want to change their own sites will each have to waste an hour or two tracking down the code to ad_context_bar and figuring out how to change it.
How can we make it easier to do the Right Way?