Back in the days of Concrete 5.6, I found myself needing a general-purpose way to insert dynamic data into content. So I created something I called Magic Data. It began simply, just a placeholder syntax like [%token%] intended to be a lightweight way to drop in values. I published it as an addon in the Concrete Marketplace and others started to use it. New use cases emerged. Users requested further capabilities. I found my own uses for further capabilities. Magic Data started to grow. The syntax expanded to pull in anything a user might need from the Concrete CMS API: page attributes, user data, system values, and more. Then came logic. Then conditional branching. Then loops with internal variables.
Before long, I had built a full-blown language interpreter. The syntax was a bit clunky, something like the illegitimate offspring of Fortran and Forth, certainly less elegant than PHP, but it worked. In some ways, it resembled WordPress shortcodes or what Twig and other templating engines do now, expanding what can be edited by a user through the CMS without diving into raw PHP.
But the more expressive it became, the more it demanded from its users. By the time Concrete 7 (or 5.7 in the old versioning scheme) arrived, and with it a complete break in addon compatibility, I took a step back and reassessed. Anyone using Magic Data in any serious way needed programming expertise. Once it got beyond simple value insertion I had not simplified anything. I had created another language for users to learn. At that point, they may as well have been writing PHP directly. So I sat on it for a while as Concrete version 7 stabilised, then made the decision to not update Magic Data for the new Concrete core.
That experience has stuck with me. Now, as I develop new ideas for my current suite of addons, I keep it to the front of my mind. If a feature I am considering would require real programming skill to use effectively, then it is something I should think twice about before baking it into an addon.
Such features are often best left for developers to implement using the PHP language they already know. They don't need to use another language and abstraction layer and I don't need to maintain such a language or provide documentation for it. I learned that lesson the hard way.
If you would like to discuss any of these thoughts, please start or continue a thread on the Concrete CMS Forums.