This topic seems less about power and more about invariants. I could imagine a powerful, fully expressive language that  does a better job of explicitly stating its invariants.<p>In the `urlpatterns` example,<p><pre><code>  urlpatterns = [
      url([m(&#x27;kitten&#x2F;&#x27;), views.list_kittens, name=&#x27;kittens_list_kittens&#x27;),
      url([m(&#x27;kitten&#x2F;&#x27;), c(int)], views.show_kitten, name=&quot;kittens_show_kitten&quot;),
  ]
</code></pre>
I could see `m` and `c` being used as a more-specific-than-regex DSL specifically for routes. Reversing routes would be even easier because of the inherent limitations of using the DSL - you have to pass a string to `m`, you have to pass a type (and a variable, ideally, so it would be `m(&#x27;kitten&#x2F;&#x27;), c(&quot;id&quot;, int)` or just `m(&#x27;kitten&#x2F;&#x27;), id()`.<p>The lesson I gain is &quot;figure out the implicit invariants from your design decisions, make them explicit and try to keep as many of them as possible, only letting go once you have no other choice.&quot;