&gt; <i>In my experience, faster development didn’t matter much. Developers’ speed mattered somewhat, but only to the extent that we made effective product design choices based on the valid understanding of customer, user, and stakeholder needs.</i><p>Lately I&#x27;ve been thinking that most of the value a good engineer provides is in making a vague specification concrete. Building something that works is easy; deciding <i>what it is</i> that you are building is the hard part. You can think of the process of writing software as the process of deciding exactly how every unspecified edge case and detail in a specification will be resolved.<p>I wish there were more and better tools for declarative programming. Most of the time imperative programming produces overly specific solutions that are brittle and difficult to understand. It&#x27;s really hard to infer the original intent of such code. A lot of solutions don&#x27;t even require a Turing-complete language in the first place! For example, a library for mutating a datastore and keeping it consistent can be entirely specified using SQL-like expressions. Yet there are all these frameworks and ORMs for writing such libraries by hand using Turing-complete languages. It baffles me. &#x2F;rant