<?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: Arsene Muyen Lee</title>
    <description>The latest articles on DEV Community by Arsene Muyen Lee (@arsene_muyenlee_b6090d8d).</description>
    <link>https://dev.to/arsene_muyenlee_b6090d8d</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%2F3692161%2F687c59e7-b09d-4169-b6ce-3627b41b6196.png</url>
      <title>DEV Community: Arsene Muyen Lee</title>
      <link>https://dev.to/arsene_muyenlee_b6090d8d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arsene_muyenlee_b6090d8d"/>
    <language>en</language>
    <item>
      <title>What 963 Commits Taught Me About the 'Vibe to Prod' Gap</title>
      <dc:creator>Arsene Muyen Lee</dc:creator>
      <pubDate>Sun, 04 Jan 2026 05:53:28 +0000</pubDate>
      <link>https://dev.to/arsene_muyenlee_b6090d8d/what-963-commits-taught-me-about-the-vibe-to-prod-gap-9ca</link>
      <guid>https://dev.to/arsene_muyenlee_b6090d8d/what-963-commits-taught-me-about-the-vibe-to-prod-gap-9ca</guid>
      <description>&lt;p&gt;&lt;strong&gt;Why AI-assisted coding is 10% of shipping software&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;I built the core of a media authenticity app in a weekend.&lt;/p&gt;

&lt;p&gt;Firebase Auth. Cryptographic signing. Camera integration. Claude helped me write Go handlers. Cursor generated React components. The demo was &lt;em&gt;chef's kiss&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I felt like a god.&lt;/p&gt;

&lt;p&gt;Then I tried to deploy it. That's when I discovered what 963 commits of pain looks like.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 90% Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Here's what tutorials show you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Idea → Code → "It works!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what production actually requires:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Idea → Code → Tests → Security → CI/CD → Infrastructure → Deploy → Monitor → Iterate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That arrow between "Code" and "Tests"? It took me &lt;strong&gt;963 commits&lt;/strong&gt; and nearly a year to cross.&lt;/p&gt;

&lt;p&gt;I'm not exaggerating. Here's my actual git history.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Journey (From My Git Log)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Commit #1: The Euphoria
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fb5f2ea Initial project structure
8750a5c Implement core backend with cryptographic proof system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two commits. Core functionality done. I felt invincible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Commits #3-12: The Reality Check
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;f7d4886 Add Docker build and Cloud Build configuration
a965146 Add Docker build and Cloud Build configuration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wait, why are there two commits for the same thing? Because the first one didn't work.&lt;/p&gt;

&lt;p&gt;Then came the GitHub Actions saga:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8d21a90 Fix GitHub Actions: Add CLOUDSDK_CORE_PROJECT env var
383e76a Fix GitHub Actions: Use google-github-actions/auth@v2
8159c3f Fix GitHub Actions: Add export_default_credentials
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three separate commits just to get authentication working in CI. Each one felt like victory. Each one revealed another problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Milestone That Mattered
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;23be044 ✅ Complete CI/CD pipeline working!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See that emoji? That's not decoration. That's relief. That commit represented weeks of wrestling with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service account permissions&lt;/li&gt;
&lt;li&gt;Docker layer caching&lt;/li&gt;
&lt;li&gt;Environment variable injection&lt;/li&gt;
&lt;li&gt;Secrets management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code itself? Maybe 200 lines. The debugging? Countless hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Gaps AI Won't Vibe Through
&lt;/h2&gt;




&lt;h3&gt;
  
  
  Gap #1: CI/CD Is a Special Hell
&lt;/h3&gt;

&lt;p&gt;AI can write your GitHub Actions workflow. It cannot debug why your workflow passes locally but fails in CI with a cryptic &lt;code&gt;PERMISSION_DENIED&lt;/code&gt; error at 11pm when you just want to ship.&lt;/p&gt;

&lt;p&gt;My repo has &lt;strong&gt;30+ commits&lt;/strong&gt; with "fix" and "CI" in the message. Each one taught me something documentation didn't.&lt;/p&gt;




&lt;h3&gt;
  
  
  Gap #2: Infrastructure Is Not Code
&lt;/h3&gt;

&lt;p&gt;"Just use Terraform" they say. "Pulumi is easy" they say.&lt;/p&gt;

&lt;p&gt;Sure. But first you need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up GCP/AWS accounts and billing&lt;/li&gt;
&lt;li&gt;Configure service accounts with correct IAM roles (not too few, not too many)&lt;/li&gt;
&lt;li&gt;Create Artifact Registry for Docker images&lt;/li&gt;
&lt;li&gt;Maintain separate dev/prod environments that don't accidentally cross&lt;/li&gt;
&lt;li&gt;Wire up secrets management without committing &lt;code&gt;.env&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;Configure custom domains and SSL certificates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each bullet is a rabbit hole. None of them ship features.&lt;/p&gt;




&lt;h3&gt;
  
  
  Gap #3: Security Is Invisible Until It Isn't
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;c8b4a6d feat: Complete integration test infrastructure with production-ready authentication
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That single commit message hides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JWT validation that actually validates&lt;/li&gt;
&lt;li&gt;Firebase Auth token verification&lt;/li&gt;
&lt;li&gt;Rate limiting (because someone &lt;em&gt;will&lt;/em&gt; try to hammer your API)&lt;/li&gt;
&lt;li&gt;Security headers: CORS, CSP, HSTS&lt;/li&gt;
&lt;li&gt;Dependency vulnerability scanning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this was "vibed." All of it was required before I could sleep at night.&lt;/p&gt;




&lt;h3&gt;
  
  
  Gap #4: Cross-Platform Is Cross-Painful
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5841cdb fix iPad create proof crash issue
e2b3ec8 android and universal link fixes
c7ff253 android fix like and bookmark
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The app worked on my iPhone. And my Android test device.&lt;/p&gt;

&lt;p&gt;iPads? Different aspect ratios broke the UI. Different memory constraints caused crashes. Different logs to hunt through.&lt;/p&gt;

&lt;p&gt;"Works on my device" is the new "works on my machine."&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Actually Extracted
&lt;/h2&gt;

&lt;p&gt;After 963 commits, I did something I should have done earlier: I separated my business logic from everything else.&lt;/p&gt;

&lt;p&gt;The "everything else" turned out to be around 15,000 lines of infrastructure code. A year of debugging distilled into config files and workflows.&lt;/p&gt;

&lt;p&gt;Here's what's in there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions pipelines&lt;/strong&gt; with security scanning (gosec, Trivy, govulncheck) — because I got tired of finding vulnerabilities in prod&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pulumi infrastructure&lt;/strong&gt; for Cloud Run, Firebase, and networking — because clicking through GCP console doesn't scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment separation&lt;/strong&gt; that actually separates dev from prod — learned this one the expensive way&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firebase Auth integration&lt;/strong&gt; that handles edge cases — the "happy path" documentation doesn't mention&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured logging with Zap&lt;/strong&gt; — because &lt;code&gt;fmt.Println&lt;/code&gt; stops being funny in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health checks and graceful shutdown&lt;/strong&gt; — for when Cloud Run decides to kill your container mid-request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker builds with layer caching&lt;/strong&gt; — because 15-minute builds break your flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-commit hooks&lt;/strong&gt; — to catch the problems I kept committing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The GitHub Actions workflows have comments explaining why certain approaches don't work. Those comments are my debugging sessions, preserved in code.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Math
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;What I Expected&lt;/th&gt;
&lt;th&gt;What It Actually Took&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core features&lt;/td&gt;
&lt;td&gt;1 weekend&lt;/td&gt;
&lt;td&gt;1 weekend&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD pipeline&lt;/td&gt;
&lt;td&gt;2 hours&lt;/td&gt;
&lt;td&gt;3 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure&lt;/td&gt;
&lt;td&gt;A few days&lt;/td&gt;
&lt;td&gt;2 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security hardening&lt;/td&gt;
&lt;td&gt;Add it later&lt;/td&gt;
&lt;td&gt;2 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;Manual is fine&lt;/td&gt;
&lt;td&gt;1 week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring&lt;/td&gt;
&lt;td&gt;Console.log&lt;/td&gt;
&lt;td&gt;1 week&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Weekend project → 2+ months to ship properly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unless you start with production infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Repo
&lt;/h2&gt;

&lt;p&gt;I open-sourced the whole thing: &lt;strong&gt;&lt;a href="https://github.com/muyen/vibe-to-prod" rel="noopener noreferrer"&gt;vibe-to-prod&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's the production infrastructure from my actual app with the business logic stripped out. Go backend, Next.js frontend, Pulumi IaC, GitHub Actions CI/CD, Firebase auth.&lt;/p&gt;

&lt;p&gt;Will it save you 963 commits? No. You'll have your own debugging sessions, your own 2am "why doesn't this work" moments. That's how you actually learn this stuff.&lt;/p&gt;

&lt;p&gt;But maybe it saves you the first 200.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The commit that started this: &lt;code&gt;fb5f2ea Initial project structure&lt;/code&gt;. The commit count when I wrote this article: 963. The number of times I Googled "GitHub Actions PERMISSION_DENIED": countless.&lt;/em&gt;&lt;/p&gt;

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