More Goto tech episodes

Spec-Driven Dev Is Back. But Not How You Think  Daniel Terhorst-North & Gojko Adzic thumbnail

Spec-Driven Dev Is Back. But Not How You Think Daniel Terhorst-North & Gojko Adzic

Published 29 May 2026

Duration: 00:39:45

The text critiques rigid, static spec-driven development, advocating for iterative, feedback-driven processes with human-centric design, guardrails, and domain-specific automation to address AI and tooling limitations in code quality and readability.

Episode Description

This interview was recorded for GOTO Unscripted. https://gotopia.tech Daniel Terhorst-North - Originator of Behavior Driven Development (BDD) & Princi...

Overview

The podcast delves into critiques of "spec-driven development" as a static, one-size-fits-all methodology, emphasizing its inadequacy for creating functional software without iterative feedback. Instead, it advocates for adaptive, human-readable specifications and iterative cyclessuch as behavior-driven development (BDD) or prompt-based feedbackto refine both code and requirements. The discussion highlights tools like Microsoft/GitHub's Spec Kit, Open Spec, and Amazon's Kero, but stresses the need to customize these to individual workflows. Challenges include tools generating dense, unreadable specifications and the limitations of AI in translating natural language into maintainable code, which often fails to align with human intent or readability standards. Historical parallels are drawn to past technologies like CASE tools and model-driven architecture, which overpromised but underdelivered, underscoring the role of human expertise over overreliance on automation.

The podcast also explores the importance of guardrails and deterministic validation in software development, such as custom ESLint rules for enforcing domain-specific coding standards and leveraging CI systems to automate compliance. It critiques the commodification of AI as a replacement for human roles, arguing that deterministic, testable systems are essential for quality assurance. Practical examples include optimizing banking reconciliation systems by replacing inefficient legacy code with set-based operations, reducing processing times from hours to seconds. Additionally, the discussion emphasizes balancing automation with human oversight, highlighting risks of misaligned workflows and the need to prioritize stability and clarity before automating. Tools and frameworks, whether AI-driven or custom, are framed as aids rather than replacements, with a focus on iterative refinement, semantic validation challenges, and adapting existing solutions to specific needs.

What If

  • What if you automated spec refinement with lint-like rules for AI-generated code?

    • Move: Develop custom ESLint-style rules to validate AI-generated code against domain-specific constraints (e.g., enforce naming conventions, prohibited patterns).
    • Why Now?: Current AI tools often produce unreadable or semantically incorrect code, requiring manual validation. Custom linters can automate this process, saving time.
    • Expected Upside: Reduced manual review efforts, faster iteration cycles, and higher confidence in AI-generated code quality.
  • What if you replaced rigid spec documents with iterative BDD cycles for feature development?

    • Move: Adopt Behavior-Driven Development (BDD) with collaborative feedback loops, using tools like GitHub to refine specs incrementally.
    • Why Now?: Static specifications are brittle and fail to adapt to changing requirements, while BDD aligns with the texts emphasis on iterative refinement.
    • Expected Upside: More responsive development to user feedback, fewer scope-related reworks, and clearer communication with stakeholders.
  • What if you built a lightweight CI pipeline to guardrail AI-driven code changes?

    • Move: Integrate pre-commit hooks and CI tools (e.g., GitHub Actions) to enforce rules like code readability, compliance with domain constraints, and branch-specific policies.
    • Why Now?: The text highlights risks of AI misaligning with intent and the need for deterministic guardrails. Current workflows lack this automation.
    • Expected Upside: Early detection of AI-generated errors, reduced risk of flawed deployments, and streamlined onboarding for future developers.

Takeaway

  • Adopt Iterative Feedback Loops with BDD Tools: Replace static spec-driven approaches with Behavior-Driven Development (BDD) frameworks like Cucumber or Spec Kit. Use small, incremental cycles with continuous feedback (e.g., unit tests, user reviews) to refine specifications and code dynamically.

  • Create Human-Readable Specifications with Linting Rules: Draft specs in clear, concise markdown and enforce readability using custom ESLint rules or similar tools. Avoid verbose, unreviewable documents by embedding domain-specific validation logic directly into code pipelines.

  • Leverage AI for Minor Tasks with Strict Guardrails: Use LLMs like Claude for non-core tasks (e.g., UI tweaks, documentation) but automate guardrails via CI/CD pipelines and pre-commit hooks (e.g., ESLint, custom CLI tools) to ensure AI output adheres to coding standards.

  • Break Development into Smaller Iterations with Static Simulations: Limit changes to 3 files per step and use static HTML pages or mockups to simulate application behavior before committing code. Leverage GitHub for peer reviews during iterative cycles to catch issues early.

  • Automate Repetitive Tasks with Custom CLI Tools: Replace manual workflows with scripts or existing CLI tools (e.g., grep, ESLint) to enforce rules and reduce friction. Avoid relying on markdown-based rules; instead, encode constraints into automated processes like linters or pre-commit hooks.

Recent Episodes of Goto tech

10 Jul 2026 The Architect's Guide to the AI Era Luca Mezzalira & Teena Idnani

"AI accelerates coding and research but requires human expertise for system design, governance, and business alignment, with architects balancing innovation, ethics, and practical constraints to ensure AI augmentsnot replacestraditional engineering."

3 Jul 2026 Model-Based Systems Eng. & Requirements Definition Dennis Hansen & Jorge Orellana

Structured system engineering emphasizes sequential layer development from mission definitions to detailed designs, using documentation (e.g., Technical Requirements Reports, SysML) for traceability, iterative refinement, architecture modeling to manage complexity, and collaboration to align technical and managerial priorities while avoiding parallel component development that causes conflicting requirements.

26 Jun 2026 Sovereign Cloud: Who Really Owns Your Infrastructure? Jake Warner & Charles Humble

The evolution of infrastructure management highlights Kubernetes' limitations, introduces Cycle as a decentralized alternative offering flexible, hybrid deployments and data sovereignty compliance, while addressing cost, vendor lock-in, and geographic data privacy challenges through bare metal use, geographic control planes, and expanded provider support with a free developer tier.

19 Jun 2026 Continuous Delivery in a World of Constant Change Abby Bangser & Dave Farley

Continuous delivery principles, AI's challenges in code generation, and the necessity of incrementalism, rigorous testing, and human validation in software development are emphasized, alongside critiques of AI's lack of precision and the push for structured validation in high-stakes systems.

16 Jun 2026 Go for Java Programmers Barry Feigenbaum & Shon Saliga

Go emphasizes simplicity, concurrency, and efficiency for lightweight applications through explicit error handling and goroutines, while Java offers a feature-rich, object-oriented framework with extensive libraries and inheritance for complex, general-purpose systems, each suited to distinct development priorities and domains.

More Goto tech episodes