← Back to context

Comment by jmspring

7 days ago

I need to read through this some more, but there has been another genetic coding paradigm referred to as spec driven development.

I’ll find the link in the morning, but I kinda joke - it’s vibe coding for people who know how to define a problem and iterate on it.

I’ve got a project reimplementing a service I want to make more uniform. Claude has produced a lot of stuff that would have taken me weeks to do.

GitHub's SpecKit is an example: https://github.com/github/spec-kit

Spec-Driven Development treats the spec as the source of truth and the code as an artifact. As you develop, you modify/add to the spec and the codebase gets updated to reflect it.

Personally I'm doubtful it can compete with traditional artisanal software engineering, as it's (IMHO) boils down to "if only you can spec it precisely enough, it'll work" and we've tried this with 5GL and (to some extent) BDD, and it doesn't get you to 100%.

I do think it's interesting enough to explore, and most of us could use a bit more details in our Jira tickets.

  • That was exactly what UML wanted to do, and it almost never worked out in practice.

    Seems to be just a rehashing of the same idea but instead of XML, and diagrams, it's now some free-text to be interpreted by LLMs, so much less deterministic and will probably fail just like UML failed.

    People also tend to forget about Peter Naur's take on "Programming as Theory Building" [0], the program is, in itself, the theory of what's implemented. A spec cannot replace that.

    [0] https://pages.cs.wisc.edu/~remzi/Naur.pdf

    • Theory building is the secret sauce, and all variants of "this is how to use AI effectively" I've seen are inferior to the epistemologically sound theory Naur outlines in his paper.

  • We already invented languages for succinctly describing what the computer should do. They’re call programming languages.

    “The code is the documentation” is not a joke. Logic that’s useful in the real world is complex and messy. You need additional documentation (why did the code end up like it is, etc) but code is the most expressive way we’ve got for describing how a computer should work.