I had a thought in the shower. The majority of development involves optimization -- that's why it's development, right? But optimization isn't limited to executable speed. You also want to optimize customer satisfaction, developer productivity, value to the company, and a myriad of other things. It seems like common sense when optimizing executable speed, but let's reiterate: you can't effectively optimize without measuring. And, in my limited experience, few organizations and developers measure those other aspects before trying to optimize them. The more I think about it, the primary advantage of agile methods is that it increases the iteration rate in the measure-optimize loop, for whatever you're trying to optimize. On an unrelated note, Martin Fowler has interesting things to say about domain-specific languages. Another note: A nonobvious benefit of adopting refactoring as a methodology is that hidden aspects of your design start to stand out against the noise, leading to further refactoring, leading to further clarity, ad infinitum. Eventually the structure settles into something that makes a great deal of sense.