Can we all agree on much day-to-day usage module-level variables being evil? At the very least prefix the vars with "this." or "Me.".

My main beef is that module level vars, by defn, mean that you can't cut and paste code from one location to another. Every method that references a module-level variable instead of receiving that same variable as a parameter is, refactoring aside, forever bound to the variable declarations. This makes for cluttered, harder to read code that is essentially passing parameters through the back door to its methods.

Perhaps I'm too procedurally minded (okay, that's really not it at all -- but I'm trying to be nice), but I like to see a spot where these objects are initialized and then passed to individual methods that can live anywhere in your code. Need to reuse the methods? Grab the object, even out of context. Need to see what's being done at a glance? Check out the procedural "main" method, however you've written it.

But all this back-door spaghetti really gets on my nerves...