<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Evgeniy Kormin</title>
    <description>The latest articles on DEV Community by Evgeniy Kormin (@evgeniy_kormin).</description>
    <link>https://dev.to/evgeniy_kormin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3986002%2F99fe30ae-7e35-40ba-9ce1-2ca862c54b35.jpg</url>
      <title>DEV Community: Evgeniy Kormin</title>
      <link>https://dev.to/evgeniy_kormin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/evgeniy_kormin"/>
    <language>en</language>
    <item>
      <title>Vibe Coding Bible: A Programming Paradigm for AI-Written Software</title>
      <dc:creator>Evgeniy Kormin</dc:creator>
      <pubDate>Mon, 15 Jun 2026 18:49:49 +0000</pubDate>
      <link>https://dev.to/evgeniy_kormin/vibe-coding-bible-a-programming-paradigm-for-ai-written-software-gp9</link>
      <guid>https://dev.to/evgeniy_kormin/vibe-coding-bible-a-programming-paradigm-for-ai-written-software-gp9</guid>
      <description>&lt;h1&gt;
  
  
  Vibe Coding Bible: Rethinking Software Architecture for AI-Generated Code
&lt;/h1&gt;

&lt;p&gt;For the last year I noticed something consistent while working with AI-generated code.&lt;/p&gt;

&lt;p&gt;The more I used AI to write code, the more my systems started to break in a very specific way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;small changes caused unexpected side effects
&lt;/li&gt;
&lt;li&gt;refactoring became increasingly risky
&lt;/li&gt;
&lt;li&gt;context grew until it became difficult to manage
&lt;/li&gt;
&lt;li&gt;AI sometimes “helped” by breaking nearby modules
&lt;/li&gt;
&lt;li&gt;fixing one thing often broke something else
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point I stopped thinking of this as a prompt engineering issue.&lt;/p&gt;

&lt;p&gt;It felt more like a &lt;strong&gt;fundamental mismatch in the programming model itself&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The core mismatch
&lt;/h2&gt;

&lt;p&gt;Most software architecture today is built around one assumption:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;humans are the primary authors of code&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We expect that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;humans can understand the system over time
&lt;/li&gt;
&lt;li&gt;humans can safely refactor large dependency graphs
&lt;/li&gt;
&lt;li&gt;humans can maintain mental models of complexity
&lt;/li&gt;
&lt;li&gt;humans can coordinate changes across modules
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This works reasonably well when humans are the main drivers of development.&lt;/p&gt;

&lt;p&gt;But with LLMs involved, a different behavior emerges:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;every interaction effectively starts from a partial or reconstructed context&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even if the full codebase exists, the model operates with limited visibility at any given moment.&lt;/p&gt;

&lt;p&gt;As systems grow, this leads to predictable patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;increasing coupling
&lt;/li&gt;
&lt;li&gt;fragile refactoring
&lt;/li&gt;
&lt;li&gt;hidden dependencies
&lt;/li&gt;
&lt;li&gt;loss of global consistency
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The idea behind Vibe Coding Bible
&lt;/h2&gt;

&lt;p&gt;This led me to a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if we design software assuming AI is the primary code author, and humans are system designers?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That shift changes many assumptions.&lt;/p&gt;

&lt;p&gt;Some familiar practices start to behave differently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;flexible interfaces become harder to reason about
&lt;/li&gt;
&lt;li&gt;deep abstraction layers introduce fragility
&lt;/li&gt;
&lt;li&gt;refactoring increases cognitive cost
&lt;/li&gt;
&lt;li&gt;shared mutable structures amplify unexpected behavior
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Core principle: nailed interfaces
&lt;/h2&gt;

&lt;p&gt;The central idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;interfaces should not evolve&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once defined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;they are never modified
&lt;/li&gt;
&lt;li&gt;they are never extended
&lt;/li&gt;
&lt;li&gt;they are never refactored
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If requirements change, we do not modify the interface.&lt;/p&gt;

&lt;p&gt;We create a new block with a new interface.&lt;/p&gt;

&lt;p&gt;Even if it feels redundant.&lt;/p&gt;

&lt;p&gt;Because AI makes duplication cheap — but coupling remains expensive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Block structure
&lt;/h2&gt;

&lt;p&gt;Every unit of code is a &lt;strong&gt;block&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;interface.py&lt;/code&gt; → immutable contract
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;implementation.py&lt;/code&gt; → AI-generated logic
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests.py&lt;/code&gt; → optional generated tests
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the interface is frozen forever&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No exceptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tree instead of graph
&lt;/h2&gt;

&lt;p&gt;Most real-world systems naturally evolve into dependency graphs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modules depend on each other
&lt;/li&gt;
&lt;li&gt;dependencies spread in multiple directions
&lt;/li&gt;
&lt;li&gt;small changes produce system-wide effects
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In AI-heavy development, this becomes especially unstable.&lt;/p&gt;

&lt;p&gt;So instead we enforce a simpler structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;strict tree hierarchy
&lt;/li&gt;
&lt;li&gt;level-based imports only
&lt;/li&gt;
&lt;li&gt;no cross-branch dependencies
&lt;/li&gt;
&lt;li&gt;no lateral coupling
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not elegant.&lt;/p&gt;

&lt;p&gt;But it is predictable.&lt;/p&gt;

&lt;p&gt;And predictability matters more than flexibility when AI writes most of the code.&lt;/p&gt;




&lt;h2&gt;
  
  
  No refactoring rule
&lt;/h2&gt;

&lt;p&gt;In this model:&lt;/p&gt;

&lt;p&gt;If something is wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;we do not refactor it
&lt;/li&gt;
&lt;li&gt;we replace it
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If behavior changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;we do not extend existing modules
&lt;/li&gt;
&lt;li&gt;we create new ones
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an interface no longer fits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;we do not modify it
&lt;/li&gt;
&lt;li&gt;we define a new block
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first this feels inefficient.&lt;/p&gt;

&lt;p&gt;But the cost model shifts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;writing new code is cheap
&lt;/li&gt;
&lt;li&gt;managing coupling is expensive
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we optimize for regeneration instead of evolution.&lt;/p&gt;




&lt;h2&gt;
  
  
  What changes for developers
&lt;/h2&gt;

&lt;p&gt;In this model, developers stop being:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;refactorers
&lt;/li&gt;
&lt;li&gt;dependency graph managers
&lt;/li&gt;
&lt;li&gt;large-codebase navigators
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system decomposers
&lt;/li&gt;
&lt;li&gt;interface designers
&lt;/li&gt;
&lt;li&gt;constraint engineers
&lt;/li&gt;
&lt;li&gt;AI operators
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The job shifts from writing code to shaping boundaries.&lt;/p&gt;




&lt;h2&gt;
  
  
  Migration strategy
&lt;/h2&gt;

&lt;p&gt;Existing systems are not migrated directly.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;freeze problematic modules
&lt;/li&gt;
&lt;li&gt;stop modifying legacy code
&lt;/li&gt;
&lt;li&gt;build new AI-native blocks alongside it
&lt;/li&gt;
&lt;li&gt;gradually shift functionality over time
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Legacy code becomes background context, not something to constantly fix.&lt;/p&gt;




&lt;h2&gt;
  
  
  This is not a universal rule
&lt;/h2&gt;

&lt;p&gt;This is an experiment.&lt;/p&gt;

&lt;p&gt;It may not apply to all systems.&lt;/p&gt;

&lt;p&gt;Some domains may still require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;complex shared state
&lt;/li&gt;
&lt;li&gt;deep optimization
&lt;/li&gt;
&lt;li&gt;tightly coupled systems
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in many AI-heavy workflows, traditional assumptions start to break down.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I’m writing this
&lt;/h2&gt;

&lt;p&gt;I call this experiment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Vibe Coding Bible&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is not a finished framework.&lt;/p&gt;

&lt;p&gt;It is a set of assumptions I am testing in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related projects
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Programming paradigm for AI-written software:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/evgeniykormin86-stack/Programming-Paradigm-for-AI-Written-Software" rel="noopener noreferrer"&gt;https://github.com/evgeniykormin86-stack/Programming-Paradigm-for-AI-Written-Software&lt;/a&gt;  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Incident-driven AI system (Golden Armada):&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/evgeniykormin86-stack/golden_armada" rel="noopener noreferrer"&gt;https://github.com/evgeniykormin86-stack/golden_armada&lt;/a&gt;  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;The question I’m exploring is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What does software architecture look like when AI becomes the primary programmer?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is one possible answer.&lt;/p&gt;

&lt;p&gt;Not the final one.&lt;/p&gt;

&lt;p&gt;But a starting point.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
