I find the topic of executable specifications quite exciting.
The main reason why people aim for a specification is explainability. Explainability brings with it feedback and this leads to better decisions.
A specification is used as a model in that it leaves some details away. Of course, no details are irrelevant in general, but some details can be irrelevant for a specific perspective. For example, security details are not irrelevant in general, but it is irrelevant when I want to evaluate how to model some accounting logic. And when we are interested in penetration tests, the specific accounting model might be irrelevant. Considering this, aiming for a single notation that focuses only on some parts but not on others can be interesting, but it is fundamentally limiting.
Solutions like the visual coding in Unity/Unreal Engine, coding in Scratch, or coding in Excel are certainly interesting, but at the end, these specifications sit on top of a huge black box (the actual engine) that everyone takes for granted that it must remain a black box.
That black box should not remain a black box. A program is a specification, too. Yet, the explainability power is rather low. So, why donāt we bring explainability into our systems?
From my perspective, there is a distinction between the act of creating a specification and the act of understanding an explanation. Most solutions I see focus on the language with which to create. This is important, but it leaves open the other half of the problem.
Interestingly, understanding an existing system implies creating a mental model about that system. That model is a projection. The projection is separate from the system, but it allows us to relate to its internals. And this projection is not a language issue. Itās a tool issue. Itās an issue of the environment through which we experience the internals of our system.
Nowadays, we typically call it the IDE. The I in IDE stands for integrated, and I believe the ultimate integration involves all stakeholders of our system. Itās not only developers (the typical IDE fails today even on that front - for example, it fails every time the developer has to go on Stackoverflow to ask a question about her/his own system).
To reach this integration, the IDE has to offer these projections. As different aspects of our system are interesting from different perspectives, the IDE cannot rely on one single form. It must be moldable. I believe this is fundamental. By molding the way we perceive the internals of our systems, we can bring explainability into our specification and make it accessible to a wider audience.