{"id":1758,"date":"2026-01-23T13:10:12","date_gmt":"2026-01-23T21:10:12","guid":{"rendered":"http:\/\/blog.nillsf.com\/?p=1758"},"modified":"2026-01-23T13:10:14","modified_gmt":"2026-01-23T21:10:14","slug":"not-all-ai-assisted-coding-is-vibe-coding","status":"publish","type":"post","link":"https:\/\/blog.nillsf.com\/index.php\/2026\/01\/23\/not-all-ai-assisted-coding-is-vibe-coding\/","title":{"rendered":"Not all AI-assisted coding is vibe coding"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">AI-assisted coding is helping in two very different areas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On one side, it\u2019s making non-developers able to rapidly prototype and build applications, often called <em>vibe coding<\/em>. On the other, it\u2019s helping professional developers build and maintain real software systems. Both are using the same tools but are generating different outcomes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The problem is that \u201cvibe coding\u201d has quickly become synonymous with AI-assisted coding, and that framing has given the space a slightly bad reputation. For a while, it was easy to conclude that AI coding is mostly about duct-taping large, fragile systems together to build a fancy demo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But that misses the point. It\u2019s my belief that AI-assisted\ncoding is useful for both professional and non-professional developers, but in different\nways. While some principles like the importance of a great prompts carry over;\nthe outcomes and failure modes are not the same.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vibe coders tend to generate end-to-end applications\nquickly. Professional developers tend to use AI to accelerate small, specific\npieces of work within a complex system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Professional developers: acceleration inside constraints<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first wave of AI coding tools, like GitHub Copilot, was aimed\nat professional developers: it was enhanced autocomplete. It removed friction\nwhen you already knew what you were trying to build. I found it genuinely\nuseful, but the benefits were debated. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With newer agent-based tools, the model has evolved. AI can now explore codebases, suggest plans, and apply changes across multiple files faster than any developer could reasonably type.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This works best inside mature software environments: understanding your code base, good test coverage, real code review, CI\/CD you trust. It requires a certain maturity of the developers using these AI tools for what they\u2019re good at. Mature software environments will be able to filter AI slop from valuable contributions to a code base.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This does raise some concerns about who companies will hire. If senior engineers can suddenly do more with AI, will companies stop hiring juniors altogether? And if so, who trains the next generation? Guido Van Rossum raised this concern this week on X, and I think he has a point. <a href=\"https:\/\/x.com\/gvanrossum\/status\/2013852963316355579\">https:\/\/x.com\/gvanrossum\/status\/2013852963316355579<\/a> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Senior engineers can make the most of professional AI tools\nprecisely because they already know what good looks like. But if we remove the\npath for juniors to grow into that role, we\u2019re trading short-term efficiency\nfor long-term fragility in the talent pipeline.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also, and this bleeds into the next section, we will need\nthe next generation of engineers to understand software quality. We can\u2019t\nexpect complex distributed systems to be vibe-coded. Maybe I\u2019m underestimating\nthe quality of future AI systems, and they\u2019ll become as trustworthy as a compiler\n(when was the last time you wrote assembly code?).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vibe coding: fast iteration to MVP<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vibe coding is a very different use case.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here, the user is often not a professional developer (but, professional developers can also vibe-code). They might be a domain expert, a technical PM, a marketer, or just someone with an idea. Vibe coding allows them to go quickly from idea to MVP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is genuinely powerful. People are building small SaaS\nprototypes, dashboards, Chrome extensions, personal automations. Many of these\nthings would not have existed before, because learning to code for just that\none problem wasn\u2019t worth it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Just this week, I\u2019ve vibe-coded two tools that help me in my running. A <a href=\"https:\/\/running.nillsf.com\/tools\/fuel-the-work\/\">calorie-burn estimator<\/a> that helps me plan my nutrition during long runs and a <a href=\"https:\/\/running.nillsf.com\/tools\/hydration-planner-simple\/\">hydration planner<\/a> that helps me plan my hydration and sodium intake.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vibe coding is not just \u201cjunior engineering\u201d. It\u2019s a new\ncategory: rapidly generating code that turns idea into MVP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But vibe coding comes with limitations. The output of these AI generated applications generally didn&#8217;t reason about architecture, security, or maintainability the same way professional developers do. That\u2019s fine for demos and prototypes, but it becomes a problem when those systems quietly drift into production without changing how they\u2019re built or governed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Same set of tools, different outcomes<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because both approaches use the same tools,&nbsp; \u201cAI coding\u201d gets treated as one thing. But not\neverybody is vibe-coding, and there are different outcomes and expectations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Professional coding optimizes for:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>long-term maintainability<\/li><li>correctness<\/li><li>security<\/li><li>scalability<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vibe coding optimizes for:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>speed of creation<\/li><li>idea validation<\/li><li>low barrier to entry<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Judging one by the standards of the other is a mistake. Vibe\ncoding is not failed professional engineering. Professional AI coding is not\nscaled-up vibe coding.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Closing thought<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AI-assisted coding is not one thing. It\u2019s a spectrum of\npractices that only look similar on the surface.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The opportunity isn\u2019t choosing between vibe coding and\nprofessional AI coding. It\u2019s understanding which mode you\u2019re currently in and\nbehaving accordingly \u2014 while making sure we don\u2019t accidentally erase the path\nbetween the two.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AI-assisted coding is helping in two very different areas. On one side, it\u2019s making non-developers able to rapidly prototype and build applications, often called vibe coding. On the other, it\u2019s helping professional developers build and maintain real software systems. Both are using the same tools but are generating different outcomes. The problem is that \u201cvibe [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1759,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[193],"tags":[45],"class_list":["post-1758","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artificial-intelligence","tag-ai"],"jetpack_featured_media_url":"https:\/\/nillsfblog.blob.core.windows.net\/media\/2026\/01\/ai-coding.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/posts\/1758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/comments?post=1758"}],"version-history":[{"count":1,"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/posts\/1758\/revisions"}],"predecessor-version":[{"id":1760,"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/posts\/1758\/revisions\/1760"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/media\/1759"}],"wp:attachment":[{"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/media?parent=1758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/categories?post=1758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nillsf.com\/index.php\/wp-json\/wp\/v2\/tags?post=1758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}