Markus Voelter has written an article about Best practices for DSLs and Model Driven Development. The article lists and analyses approaches to the development of DSLs and gives them a point score based on whether the author thinks they work or not. Lots of interesting ideas and good advice. I'm not sure I agree with all of them. On one point: how general purpose should a DSL be? I think this is tricky. In the days before DSLs were called DSLs, I was taught to start with a very small general purpose language with a well defined semantics and gradually sugar both syntax and semantics until it had been transformed into the required language. This approach seems to achieve both generality and specificity at the same time whilst being a repeatable step-by-step process.