Okay, Brooks is right even when you go into a project knowing Brooks is right. I've still got one to throw away.

I knew I was taking a few shortcuts when I was creating the oft-pimped (here, anyhow. Haven't spent advertising dollar number one yet, and the revenue (only about $78,000 over the last year) reflects that (yeah yeah, smartarse, and possibly other things)) The Digest Handler, but now that I'm working on another project the gremlins are coming out of the woodwork. And the new project's *very* similar -- it's a mail handler. In this case, it's not a specialized mail handler, just a generic, every day, no frills mail handler. And yes, it'll probably eventually refactor itself & The Digest Handler so that the second is eventually swallowed by the first.

But as I begin to code up the new app, I've noticed I missed a ton of stuff I needed to do. Preference files aren't as extensible as they could be. I've still got some GUI elements that depend on others, making it too difficult to rip a JPanel from widget X in The Digest Handler and shove it without changes into the new project. Even -- argh, .NET's already got me forgetting the Java name -- "namespaces" that aren't weildy have caused trouble, which means that the code isn't grouped according to functional units as well as it could've been. I'd like to grab one namespace for preferences and be done with it, but I'm slowly having to pry it all loose from the other objects around it.

Luckily my project at my "day job" is getting to the point that it's reasonably well factored out. I've got GUIs that are passed all their information in instances of the ADO.NET DataSet. Each individual UserControl (GUI element) needs only to have the right DataSet format passed to it and it's ready to go. Each UserControl also has a test Form that'll create a DataSet from a sample XML file for testing, meaning you don't even need a database connection to get the programming going. Each tiny GUI element is totally separated from the business tier. It's very nice, and makes coding the GUI away from the RDBMS backend (so on a laptop at the beach, say, not that I'd try that. Too much sand) a pleasant thing for which to prepare.

So though I don't argue for throwing away the one to throw away -- refactor instead -- it's interesting to note that even when you're thinking about doing it right, it won't always happen.

Ha, yes, $78,000 in revenue was an April fool.