{"id":922,"date":"2025-07-31T16:31:03","date_gmt":"2025-07-31T22:31:03","guid":{"rendered":"https:\/\/redmonk.com\/rstephens\/?p=922"},"modified":"2025-07-31T16:31:03","modified_gmt":"2025-07-31T22:31:03","slug":"spec-vs-vibes","status":"publish","type":"post","link":"https:\/\/redmonk.com\/rstephens\/2025\/07\/31\/spec-vs-vibes\/","title":{"rendered":"Vibe Coding vs. Spec-Driven Development"},"content":{"rendered":"<p>In some circles vibe coding is all the rage right now. (In fact my colleague Kate Holterhoff declared this to be \u201c<a href=\"https:\/\/redmonk.com\/kholterhoff\/2025\/07\/14\/ai-engineers-and-the-hot-vibe-code-summer\/\">hot vibe code summer<\/a>).\u201d<\/p>\n<p>Why the appeal? As <a href=\"https:\/\/redmonk.com\/rstephens\/2025\/04\/18\/vibe-coding-is-for-pms\/\">I discussed in a previous post<\/a>, AI-powered development tools are well-suited for helping both developers and adjacent personas (like PMs and designers) with informal, rapid prototyping. Rather than waiting for scarce development cycles, people can experiment with ideas in higher fidelity than traditional methods (like design docs, wire framing, white boarding, etc) allow.<\/p>\n<p>Most current vibe coding tools are great for early stage exploration but can fall short when generating code suitable for production-scale systems. Generally speaking these are not tools for betting your business on, or even business applications. (At least not yet.) There are legitimate concerns about whether vibe coding creates more liabilities than benefits.<\/p>\n<p>Perhaps vibe coding can scaffold code quickly or spin up small projects, but at scale it tends to:<\/p>\n<ul>\n<li>Not build code efficiently. If you want neat, maintainable, reusable code, vibe coding probably ain\u2019t it. <\/li>\n<li>Be quite tricky to debug. <\/li>\n<li>Create performance problems. Remember the anecdote about the database getting hammered by <code>select *<\/code> queries written via vibe coding? (I hope you do because I can\u2019t find it again; all my \u201cvibe coding database performance impact\u201d searches are just turning  up the Replit debacle)<\/li>\n<li>Have unreliable behaviors, sometimes catastrophically so (see the <a href=\"https:\/\/xcancel.com\/jasonlk\/status\/1946069562723897802\">Replit database deletion debacle<\/a>)<\/li>\n<li>Shift the bottlenecks of creating software to debugging, testing, and deployment pipelines. <\/li>\n<\/ul>\n<p>There&#8217;s a chasm to cross from magical prototypes to maintainable, deployable systems.<\/p>\n<p>Spec-driven development has emerged as a potential response to this gap.<\/p>\n<p><a href=\"http:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-scaled.png\"><img decoding=\"async\" src=\"http:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-520x168.png\" alt=\"thick black glasses frames\" width=100% height=\"168\" class=\"aligncenter size-medium wp-image-927\" srcset=\"https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-520x168.png 520w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-1024x331.png 1024w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-768x248.png 768w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-1536x497.png 1536w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-2048x662.png 2048w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-480x155.png 480w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/AdobeStock_541488539-1200x388.png 1200w\" sizes=\"(max-width: 520px) 100vw, 520px\" \/><\/a><br \/>\n<em>(there are going to be glasses in this post. #sorry #notsorry)<\/em><\/p>\n<h1>Spec-Driven Development \ud83d\udd76\ufe0f<\/h1>\n<p>\u2018Spec\u2019 in this case stands for <em>specification<\/em>, an artifact that captures requirements before writing any code. Rather than relying exclusively on a series of prompts, the user augments the AI\u2019s context with a more structured approach.<\/p>\n<blockquote><p>\n  \u201cI\u2019m sure you\u2019ve been there: prompt, prompt, prompt, and you have a working application. It\u2019s fun and feels like magic. But getting it to production requires more.\u201d<br \/>\n  &#8211; <a href=\"https:\/\/kiro.dev\/blog\/introducing-kiro\/\">Nikhil Swaminathan and Deepak Singh<\/a>\n<\/p><\/blockquote>\n<p>This is not to say no prompting occurs. Users still interact with AI via chat.<\/p>\n<p><strong>Let\u2019s Zoom In: A Simple Comparison<\/strong> \ud83d\udd2d<\/p>\n<p>The below prompt is not necessarily how I suggest either vibe coding or doing spec-driven development if you want to use your tokens efficiently, but rather is an attempt to illustrate how the approaches differ if I were building a simple greenfield personal website. The below screenshots are from <a href=\"https:\/\/kiro.dev\/\">Kiro<\/a>, an agentic IDE from AWS that allows users to build either using Vibe Mode or Spec Mode.<\/p>\n<p><em>Vibe Coding<\/em><\/p>\n<p>Prompt:<\/p>\n<p><code>I want to build a personal website to showcase my work portfolio. I want to import articles I've written via an RSS feed. <\/code><\/p>\n<p>The AI responds with suggestions for which tech stack to build on, questions about where to host, and then starts scaffolding it out. It jumps straight to writing code.<\/p>\n<p><a href=\"http:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.26.44@2x.png\"><img decoding=\"async\" src=\"http:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.26.44@2x-520x900.png\" alt=\"dark mode screenshot, Kiro vibes\" width=100% height=\"900\" class=\"aligncenter size-medium wp-image-923\" srcset=\"https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.26.44@2x-520x900.png 520w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.26.44@2x-592x1024.png 592w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.26.44@2x-768x1329.png 768w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.26.44@2x-480x831.png 480w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.26.44@2x-362x627.png 362w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.26.44@2x.png 786w\" sizes=\"(max-width: 520px) 100vw, 520px\" \/><\/a><\/p>\n<p><em>Spec-Driven Development<\/em><\/p>\n<p>In spec-driven development I could use the exact same prompt, but instead of diving into code the system first creates markdown documents focused on user stories and design.<\/p>\n<p><a href=\"http:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.24.23@2x.png\"><img decoding=\"async\" src=\"http:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.24.23@2x.png\" alt=\"dark mode screenshot, Kiro specs\" width=100% height=\"1008\" class=\"aligncenter size-full wp-image-924\" srcset=\"https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.24.23@2x.png 1430w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.24.23@2x-520x367.png 520w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.24.23@2x-1024x722.png 1024w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.24.23@2x-768x541.png 768w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.24.23@2x-480x338.png 480w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-10.24.23@2x-889x627.png 889w\" sizes=\"(max-width: 1430px) 100vw, 1430px\" \/><\/a><br \/>\n(This is a truncated screenshot. The system actually generated 4 requirements based on this simple request.)<\/p>\n<p>The user can then go in and edit this markdown. Requirements can be added, removed, and amended. Additional context of what\u2019s being built is captured not just in the ephemerality of prompts alone but in a living document.<\/p>\n<h1>Kiro<\/h1>\n<p>As stated, the above example utilizes AWS\u2019 recently released <a href=\"https:\/\/kiro.dev\/\">Kiro<\/a>, an agentic IDE that allows users to build with multiple modalities: either vibe- or spec-based development.<\/p>\n<p><a href=\"http:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-09.35.42@2x.png\"><img decoding=\"async\" src=\"http:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-09.35.42@2x.png\" alt=\"dark mode screenshot, Kiro\n&quot;Let&#039;s build&quot; with Vibe or Spec options\" width=100% height=\"712\" class=\"aligncenter size-full wp-image-926\" srcset=\"https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-09.35.42@2x.png 776w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-09.35.42@2x-520x477.png 520w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-09.35.42@2x-768x705.png 768w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-09.35.42@2x-480x440.png 480w, https:\/\/redmonk.com\/rstephens\/files\/2025\/07\/CleanShot-2025-07-31-at-09.35.42@2x-683x627.png 683w\" sizes=\"(max-width: 776px) 100vw, 776px\" \/><\/a><\/p>\n<p>There are many tools on the market that enable vibe coding, but spec-driven tools are newer to the scene. Kiro is currently leading the charge in terms of attention and adoption in the latter space.<\/p>\n<p>When using spec-based development, Kiro allows users create their requirements; from there the agents create an editable design document, and then a task list of things to do to build the code according to the specifications.<\/p>\n<p>In addition to specs, Kiro contains concepts like \u2018steering\u2019 (essentially rules that agents will follow before responding) and \u2018agent hooks\u2019 (things you can offload from the spec to help keep the context window from getting too large; for example you can create an agent hook that runs a unit test every time you commit an update.)<\/p>\n<p>VS Code users will feel comfortable with the UI, and the <a href=\"https:\/\/kiro.dev\/blog\/introducing-kiro\/\">release blog<\/a> says \u201c\u2019Kiro is built on Code OSS, so you can keep your VS Code settings and Open VSX compatible plugins.\u2019\u201d<\/p>\n<p>Apart from the tech itself, the branding of the product is another notable aspect of Kiro. Per my colleague <a href=\"https:\/\/redmonk.com\/jgovernor\/2025\/07\/18\/giants-awaken-google-geminicli-aws-kiro-developer-experience-and-the-need-to-ship-and-keep-shipping\/\">James Governor<\/a>:<\/p>\n<blockquote><p>\n  Intriguingly Kiro isn\u2019t branded AWS or even Amazon, it stands alone \u2013  it is simply Kiro. Amazon is going to markedly increase velocity in building its AI dev tools. Kiro: watch this space.\n<\/p><\/blockquote>\n<h1>Speculation vs. Specification \ud83e\uddd0<\/h1>\n<p>In her book <a href=\"https:\/\/www.ohioswallow.com\/9780821425961\/speculation-and-the-darwinian-method-in-british-romance-fiction-1859-1914\/\"><em>Speculation and the Darwinian Method<\/em><\/a>, my colleague <a href=\"https:\/\/bsky.app\/profile\/kateholterhoff.bsky.social\">Kate Holterhoff<\/a> explores the definition of \u2018speculative\u2019 as \u201ca way of thinking that involves abstract reasoning.\u201d<\/p>\n<p>At its core, vibe coding is speculative software development: fast, fluid, and exploratory. You\u2019re reasoning abstractly about what might work and letting AI tools help play out that line of thinking in code. It\u2019s improvisational. It\u2019s playful. It\u2019s powerful, but it\u2019s not always production ready.<\/p>\n<p>Spec-driven development enters the market as a more structured approach. It\u2019s a methodology that prioritizes intentionality and alignment.<\/p>\n<p>Both approaches have their place, but vibe coding de facto favors the lone developer. We frequently talk about the AI tools serving as a paired programmer for the developer; the collaboration point is between the AI code assistant and the builder. If another team member wanted to pick up the project, they can possibly try to read through the chat history but most likely are just going to have to dive into the source code.<\/p>\n<p>Spec-driven development, on the other hand, creates human-readable artifacts that share a project\u2019s design and intent. It captures more than what is commented in the code; they start to document the \u2018why\u2019 behind what was built, not just the \u2018how.\u2019 This widens the points of collaboration beyond just \u2018dev + AI\u2019, and makes it simpler if anyone else needs to pick up the project.<\/p>\n<p>Maintainability and understandability are crucial for enterprise-grade software. There is an inherent level of unmaintainability in vibe coding, and there is potential for greater maintainability with spec-driven assets. This is arguably the best argument for enduring the front-loaded effort of creating a spec as compared to diving straight into the project. It remains to be seen if spec-driven code is production ready at scale, but its methodology is inherently more aligned to the needs and expectations of enterprise software development.<\/p>\n<h1>Specs: The Lens of Intent \ud83d\udd0e<\/h1>\n<p>I\u2019ve heard several articulations that \u201cthe spec is the source of truth\u201d and I\u2019m not sure I agree with that framing. At least not yet.<\/p>\n<p>To date, a challenge with all code (whether authored by humans or LLMs) is capturing the authors\u2019 intent. How do we communicate to our colleagues (both current and future) what problems our code is attempting to solve?<\/p>\n<p>Generally speaking as software engineers, we have a cultural deficit in explaining our own history to each other. We attempt to fill the gap with code comments and code reviews, but often we are left with oral history. (See <a href=\"https:\/\/www.youtube.com\/watch?v=4PaWFYm0kEw\">Bryan Cantrill\u2019s excellent talk<\/a> on the subject.) Now specs are an attempt to capture that intention as well, now in an AI-driven development environment that historically has been devoid of this.<\/p>\n<p>While that all can provide crucial informational context, in a pre-AI age I don\u2019t think we\u2019d ever call any of those things \u201cthe source of truth.\u201d The source of truth is what builds. The source of truth is the code.<\/p>\n<p>AI vendors have a north star where natural language supersedes the code itself, and in this vision specs could conceivably become the source of truth. But the industry is <strong>far<\/strong> from being there in terms of functionality and reliability.<\/p>\n<p>So I push back on the framing that specs are the source of truth. I feel much more comfortable calling them the source of intention.<\/p>\n<h1>New Frames, Same Vision \ud83d\udc53<\/h1>\n<p>Vibe coding and spec-driven development aren\u2019t opposing camps. They\u2019re different tools for different stages of the creative process. Vibe coding unlocks momentum. It\u2019s the spark. It\u2019s how you get unstuck, test an idea, or just get something working without waiting for a meeting or a milestone. But the magic of prototyping doesn\u2019t always translate into the rigor of production.<\/p>\n<p>Spec-driven development helps teams slow down just enough to think clearly about what they\u2019re building and why. Specs aren\u2019t (yet) the canonical source of truth, but they do something arguably just as important: they clarify intention, capture context, and create artifacts that outlive the memory of the developer (or the AI\u2019s token window.)<\/p>\n<p>In a world where AI is reshaping how we build software, vibe coding vs. spec-driven development is not an either\/or but a yes and. That said, specs are a new interesting and important development in how we\u2019re building.<\/p>\n<hr \/>\n<p><strong>Related Research:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/redmonk.com\/kholterhoff\/2025\/07\/14\/ai-engineers-and-the-hot-vibe-code-summer\/\">AI Engineers and the Hot Vibe Code Summer<\/a><\/li>\n<li><a href=\"https:\/\/redmonk.com\/rstephens\/2025\/04\/18\/vibe-coding-is-for-pms\/\">Vibe Coding is for PMs<\/a><\/li>\n<li><a href=\"https:\/\/redmonk.com\/jgovernor\/2025\/07\/18\/giants-awaken-google-geminicli-aws-kiro-developer-experience-and-the-need-to-ship-and-keep-shipping\/\">Giants awaken. Google Cloud GeminiCLI, AWS Kiro, developer experience and the need to ship and keep shipping<\/a><\/li>\n<\/ul>\n<p><strong>Disclaimer:<\/strong> AWS is a RedMonk client. This post is not compensated and reflects my own opinions.<\/p>\n<p><strong>Image credit:<\/strong> Glasses frames licensed from Adobe stock.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In some circles vibe coding is all the rage right now. (In fact my colleague Kate Holterhoff declared this to be \u201chot vibe code summer).\u201d Why the appeal? As I discussed in a previous post, AI-powered development tools are well-suited for helping both developers and adjacent personas (like PMs and designers) with informal, rapid prototyping.<\/p>\n","protected":false},"author":45,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[40,27,23,152,151],"tags":[],"class_list":["post-922","post","type-post","status-publish","format-standard","hentry","category-ai","category-amazon","category-developers","category-spec-development","category-vibe-coding"],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/posts\/922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/users\/45"}],"replies":[{"embeddable":true,"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/comments?post=922"}],"version-history":[{"count":0,"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/posts\/922\/revisions"}],"wp:attachment":[{"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/media?parent=922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/categories?post=922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redmonk.com\/rstephens\/wp-json\/wp\/v2\/tags?post=922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}