To avoid of building extra-complicated solutions it's reasonable to:
* Put to DSL as little as possible.
* Think about any DSL in terms of its AST and keep its syntax as much close to AST as possible. This might allow you to avoid writing and debugging parsers at all.
* Select simple easy-to-learn tools and languages (or subsets of languages) to allow quick joining of new people to the project
* Choose one of "programmable programming languages". I.e. extensible language that directly supports homogeneous metaprogramming3.