Chris Winters threw me a link to my recent ramble on completely planned perfection versus workable organic imperfection in software design. After citing a very good perspective on software as gardening from The Pragmatic Programmer, he writes:
As I've mentioned before there are a number of software development practices moving toward a more humane process. And I think the ideas underpinning worse-is-better play a big part in this. The major one in my mind is this hypothesis: there is no such thing as a perfect software design. Have you ever seen or heard of one? What design hasn't been modified over time due to changing needs or conditions?Good points. Still trying to find the middle ground between clean design and fecund dirt. There's no perfect design I've ever run into in my time so far, and I don't expect to. But, what I have learned, is that where there is no design at all, you have disaster.
So I guess the main thing I've learned so far is that this guilty love of a dirty yet elegant hack while giving myself a "tsk-tsk" with a hope to design it more fully next time is useless. There will be no time that I've participated in a design that ends up being marvelously perfect. But what I'm trying to feel toward is how to get the balance right between clean and dirt, given skill levels and team sizes and project complexity.