The commercial motivation was always the correctness guarantee, but the yak-shaving exercise of building the system offered the satisfaction that purely commercial concerns could not provide.
Now, in the dawn of the age of LLM coding, I find the agents are "unreasonably effective" at coding to declarative systems. The entire reference for the data format or DSL can fit in context, and LLMs are naturally more reliable against a constrained system. Compare to CSS, highly unconstrained, where I find code duplication, then conflict, then the inevitable `!important` flags begin to proliferate.
Yet, as anybody who enjoys the benefits of declarative systems will tell you, it can be lonely. The world prefers a general purpose imperative system. I believe the biggest reason is that the open-ended imperative system does not force us into a mapping exercise before we get to work. The code is like a whiteboard, where ideas are tried and modified in flight.
But I'd like to hear from others. Which do you prefer and why? In what situations?