Just read a short piece and a great comments section on Zen of Design.
In particular the comment from Joe Ludwig:
I started out entirely neutral on the subject of designers writing scripts. Then I saw the production schedule and thought, “Holy crap! The only way we’re going to get all this done is for designers to write scripts.” Then I saw the scripts that designers write.
Now I would much rather provide data driven systems (with conditionals!) so the designers can do 95% of what they need to do without writing any scripts. Then over time you will end up adding new features to your data driven system and the designers will start thinking in terms of what they can do with the system they have.
That reassures me greatly when it comes to the design of Unangband. Whenever I come up with a new feature, I try to push as much as possible of it out to a data file, either in tables.c or a separate .txt file in the lib/edit directory. I'll prototype by writing a data file that contains the information I want. When I've come up with enough examples, I'll write a data structure and parser, based on the existing set up in init1.c.
Then I'll finally implement the feature in code.
It's proved remarkably effective and resilient. And it turns out others can do great things with simple designs.