There comes a time in nearly any relatively large application I make where the idealistic logic placement scheme I've been trying to maintain comes tumbling down. Reminds me of when I used to dam up streams as a hoodlum -- you'd have rocks piled just so, piled over with mud to stop whatever what headed down, and you'd think you had everything in just the right order and placement to move on to the next section. But then something about the way the water moved after putting up the middle would take out the side, and instead of careful planning and building, you'd throw it all to heck to start fixing that spot in the dam before it all came crashing down.

That's not to say the codebases don't have some parts that keep damming right nicely -- you can use interfaces and inheritence and namespaces/packages to keep some processes shielded from the rest. But the "roundhouse" classes -- the ones that do the marshalling of the compartmentalized portions -- always seem, in my experience, to eventually hit critical mass and start flowing away from your ideal just like those childhood dams. After patching, you can often, with a ton of work, get everything ship-shape again (boy, talk about metaphor--arifficness), but it's usually a bigger task than you've got time to accomplish.

Yes, that goes against much of what I write here. I'll reconcile later.