I do think that the necessity of what the article talks about varies from project to project - but it strikes close to home in reference to my current project.<p>I'm working for a client doing something like centralizing a whole lot of decentralized data for use within an industry - the project has been attempted by other people in the industry before, and failed horribly - I suspect because few businessmen understand the problem they're trying to solve (and "enterprise-ready code-monkeys" are a dime a dozen).<p>I'm lucky enough to have a client that understood that the first functional version of what we were developing was more or less a throwaway version. It helped us get a handle on the <i>exact details</i> of the problem, but couldn't last. I'm currently working on the third iteration of the application as a whole, and (not to toot my own horn but) we have a pretty impressive, stable app now.<p>If we wouldn't have done some major re-writing from the early versions, the app would be utter fucking hell to maintain or develop at this point. Since we did, the codebase is understandable, the architecture is correct for what we're trying to do, and maintenance is not much of a pain.