I had quick DSL appropriateness argument last week for someone that was objecting about us implementing a DSL for some small part of the domain.
The argument: “Business users will never write code”.
My response: “But business users will read code”.
And to test the argument, I later emailed one of the business users with a small snippet of the DSL that we were crafting and simply said in the email: “Please check the following configurations for the client…”.
His response: “You incorrectly configured the final_costing_policy. It should be …”
In the large, the DSLs that you create are going to be read by a larger audience than just developers. So, like all good code, this DSL code should be highly readable, but not all of your audience needs to know it’s syntax in detail. You create a DSL to make your life, the developer, easier. Getting business users to understand what you are doing is part of making your life easier. Anyway, is it not about ubiquitous language and vocabulary? You can’t get closer to the domain than revealing data and behavior with a DSL, can you!?