In fact I'd argue that it's much harder to not accidentally build something that you don't envision.
In fact I'd argue that it's much harder to not accidentally build something that you don't envision.
Many years ago I was writing a bunch of modular audio applications that were all interconnected using JACK. So of course I needed some convenient way of storing/restoring the graphs that connected the various components that were always in flux -- each audio experiment had it's own graph, but there were often re-occurring sub-graphs.
So, I started to build a small cli utility that could save the current graph and restore it later... of course because of the common sub-graphs it needed to be able to refer to other labeled graphs so i could easily reference and re-use them... and of course to (save myself time) it also needed to have arithmetic composability so that I could add/subtract existing graphs to create new ones... and of course it would be helpful if I could also annotate the graphs so that they could launch the associated programs...
So in the end I had a generic DSL that had recursive graph parsing, reification (labels), graph composability, arithmetic composability, and could associate arbitrary labels with executable code.
I eventually looked up from my adderal fueled hack-a-thon and realized I had created a half-baked LISP and decided it was time for to go to bed! :)
Long ago I wrote an inspection reporting system, in the days of Turbo Pascal and MS-DOS. I ended up building a domain specific language for the configuration of the system. The configuration files looked almost identical to Pascal source.
maybe our previous works can be externally ad-hoc incorporated into new works by others...