<?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>Vibe Coding Forem: David Gallivan</title>
    <description>The latest articles on Vibe Coding Forem by David Gallivan (@david_gallivan_0d8510249e).</description>
    <link>https://vibe.forem.com/david_gallivan_0d8510249e</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%2F3572911%2F074fcfda-c19b-4e0a-9778-2ea8e050b164.png</url>
      <title>Vibe Coding Forem: David Gallivan</title>
      <link>https://vibe.forem.com/david_gallivan_0d8510249e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://vibe.forem.com/feed/david_gallivan_0d8510249e"/>
    <language>en</language>
    <item>
      <title>The Case of the Wandering Columns</title>
      <dc:creator>David Gallivan</dc:creator>
      <pubDate>Wed, 26 Nov 2025 23:46:37 +0000</pubDate>
      <link>https://vibe.forem.com/david_gallivan_0d8510249e/the-case-of-the-wandering-columns-25bo</link>
      <guid>https://vibe.forem.com/david_gallivan_0d8510249e/the-case-of-the-wandering-columns-25bo</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8v4af5ozjs756jgh52v1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8v4af5ozjs756jgh52v1.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  A Cautionary Tale for Developers Who Depend on AI a Little Too Much
&lt;/h1&gt;

&lt;p&gt;Let me tell you a story---a tale of mystery, betrayal, and one very&lt;br&gt;
uncooperative Excel spreadsheet.&lt;/p&gt;

&lt;p&gt;It all started on a perfectly normal afternoon. Birds were chirping,&lt;br&gt;
coffee was warm, and my application---poor, innocent thing---was trying&lt;br&gt;
to read data from Excel files. Yes, I know, using Excel as a data source&lt;br&gt;
is like using a cheese grater as a pillow... but that wasn't the main&lt;br&gt;
problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem
&lt;/h2&gt;

&lt;p&gt;The columns in the spreadsheet kept &lt;em&gt;moving&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Not shifting, not rearranging politely---no, these things were doing the&lt;br&gt;
Electric Slide every time someone exported the file. My parser would&lt;br&gt;
line up the data like, "Okay, column 3 is EmployeeName---got it."\&lt;br&gt;
Then the next day:\&lt;br&gt;
Column 3 is suddenly &lt;strong&gt;BudgetVariance&lt;/strong&gt;, column 10 is now&lt;br&gt;
&lt;strong&gt;EmployeeName&lt;/strong&gt;, and column 5... well, column 5 has gone missing&lt;br&gt;
entirely.&lt;/p&gt;

&lt;p&gt;My parser basically had the same expression you get when your GPS yells,&lt;br&gt;
&lt;strong&gt;"Make a U-turn! MAKE A U-TURN!"&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Tried (AKA: The AI Phase)
&lt;/h2&gt;

&lt;p&gt;Naturally, I called in backup: &lt;strong&gt;AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Together, we built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A fancy Excel parser using NuGet packages\&lt;/li&gt;
&lt;li&gt;  A CSV parser\&lt;/li&gt;
&lt;li&gt;  A backup parser for when the first two parsers got tired\&lt;/li&gt;
&lt;li&gt;  Several emotional support console logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it &lt;em&gt;worked!&lt;/em&gt;\&lt;br&gt;
Until the next spreadsheet arrived and the columns once again decided to&lt;br&gt;
practice interpretive dance.&lt;/p&gt;

&lt;p&gt;We considered switching to an API or getting a stable export format...\&lt;br&gt;
But the vendor said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"No."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And by "no," I mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Sure, we can help---but only if you pay us enough to buy a small&lt;br&gt;
island."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So AI and I kept throwing solutions at the problem like two raccoons&lt;br&gt;
frantically trying to open a locked trash can.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Breakthrough (AKA: The Part Where Human Brains Still Matter)
&lt;/h2&gt;

&lt;p&gt;After hours of trying every AI suggestion---including a few that made my&lt;br&gt;
computer visibly shake its head---I stepped back and looked at the&lt;br&gt;
problem like an engineer instead of a prompt typist.&lt;/p&gt;

&lt;p&gt;Then it hit me:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Dynamic types.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The forgotten, dusty corner of C# where magical things can happen.&lt;/p&gt;

&lt;p&gt;If the columns wanted to move around like caffeinated toddlers?\&lt;br&gt;
Fine.\&lt;br&gt;
I'd fetch values dynamically and then map those values to the model I&lt;br&gt;
already had.&lt;/p&gt;

&lt;p&gt;Let the spreadsheet do its dance---I'd catch the values mid-air.&lt;/p&gt;

&lt;p&gt;And guess what?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  It worked.\&lt;/li&gt;
&lt;li&gt;  It worked &lt;em&gt;beautifully.&lt;/em&gt;\&lt;/li&gt;
&lt;li&gt;  It was even &lt;strong&gt;faster&lt;/strong&gt; than the original parser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI: "Wow, that was clever."\&lt;br&gt;
Me: "I know."\&lt;br&gt;
Excel: "Fine, I'll stop moving columns now."\&lt;br&gt;
&lt;em&gt;(Excel was lying.)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned (AKA: The Moral of the Story)
&lt;/h2&gt;

&lt;p&gt;AI is an incredible partner.\&lt;br&gt;
It can generate code, suggest libraries, scaffold ideas, and even talk&lt;br&gt;
you through debugging your existential crisis.&lt;/p&gt;

&lt;p&gt;But here's the part everyone needs to tattoo on their brain:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;You still have to know how to code.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You still have to understand the language you're using.\&lt;br&gt;
You still need real engineering instincts.&lt;/p&gt;

&lt;p&gt;AI is trained on public code---written by millions of people who never&lt;br&gt;
encountered &lt;em&gt;your&lt;/em&gt; specific spreadsheet horror movie. It can get you&lt;br&gt;
close, but sometimes it doesn't know the trick you know because you&lt;br&gt;
actually understand C#.&lt;/p&gt;

&lt;p&gt;The only reason I found the solution?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Hey... C# has dynamics. Those could solve this."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI didn't think of it.\&lt;br&gt;
But &lt;em&gt;I&lt;/em&gt; did.\&lt;br&gt;
And when we combined forces---my experience + its suggestions---we&lt;br&gt;
solved the problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Moral
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AI is your co-pilot, not your parachute.&lt;/strong&gt;\&lt;br&gt;
You can't outsource understanding.\&lt;br&gt;
If you want to solve real problems, you and AI need to pair&lt;br&gt;
program---and &lt;em&gt;you&lt;/em&gt; need to know the language well enough to steer it in&lt;br&gt;
the right direction.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>debugging</category>
    </item>
    <item>
      <title>The Invisible Path of Vibe Coding: Why Infrastructure Must Come Before the Fun Stuff</title>
      <dc:creator>David Gallivan</dc:creator>
      <pubDate>Sun, 19 Oct 2025 17:32:37 +0000</pubDate>
      <link>https://vibe.forem.com/david_gallivan_0d8510249e/the-invisible-path-of-vibe-coding-why-infrastructure-must-come-before-the-fun-stuff-44me</link>
      <guid>https://vibe.forem.com/david_gallivan_0d8510249e/the-invisible-path-of-vibe-coding-why-infrastructure-must-come-before-the-fun-stuff-44me</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hb5zp4z4bjs41slwblb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hb5zp4z4bjs41slwblb.png" alt=" " width="400" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've ever vibe-coded your way through an app - riding that creative high as AI generates your UI in real time - you know the rush. Buttons appear, data binds instantly, the app feels alive. It's addictive.&lt;/p&gt;

&lt;p&gt;But here's the uncomfortable truth: most developers who embrace vibe coding (AI-assisted, flow-state, rapid-prototype development) fall into the same trap. They build what looks like a complete application - beautiful, interactive, even feature-rich - only to discover when it's time to deploy that the &lt;strong&gt;invisible path&lt;/strong&gt; has been completely neglected.&lt;/p&gt;

&lt;p&gt;And that's when reality hits.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  The Illusion of Progress
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;Vibe coding thrives on visible feedback. You type a prompt or tweak a line, and the screen responds instantly. You see results, get dopamine, and keep going.&lt;/p&gt;

&lt;p&gt;The problem?&lt;br&gt;
&lt;strong&gt;What you see is not what you'll deploy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Under the hood, your app might be missing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Configuration management&lt;/li&gt;
&lt;li&gt;Authentication and authorization&lt;/li&gt;
&lt;li&gt;Environment separation&lt;/li&gt;
&lt;li&gt;Observability hooks&lt;/li&gt;
&lt;li&gt;Deployment pipelines&lt;/li&gt;
&lt;li&gt;Alerting and notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These invisible systems aren't glamorous. They don't animate or sparkle. But they're what separate a demo from a dependable application.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;
&lt;h2&gt;
  
  
  The Real Foundation: Infrastructure First
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;Before you build a single page or prompt an AI to generate your UI components, establish the **foundation **that every production-ready app depends on.&lt;br&gt;
Here's a non-negotiable checklist:&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Configuration &amp;amp; Environments
&lt;/h2&gt;

&lt;p&gt;Create environment-specific settings early:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;appsettings.Development.json, 
appsettings.Staging.json, 
appsettings.Production.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Use feature flags for experimental features&lt;/li&gt;
&lt;li&gt;Keep secrets out of code (Key Vault, Secret Manager, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The goal: make your app deployable to any environment without editing code.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Logging
&lt;/h2&gt;

&lt;p&gt;Add structured logging from day one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Serilog, Application Insights, or OpenTelemetry&lt;/li&gt;
&lt;li&gt;Capture context (user, request ID, operation)&lt;/li&gt;
&lt;li&gt;Store logs centrally for correlation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Logging is how you talk to your production environment.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Monitoring
&lt;/h2&gt;

&lt;p&gt;Set up health checks and metrics before you have users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application Insights, Prometheus, or New Relic&lt;/li&gt;
&lt;li&gt;Custom telemetry for performance and usage&lt;/li&gt;
&lt;li&gt;Dashboards that visualize system behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Without monitoring, you're driving blindfolded.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Error Handling &amp;amp; Alerts
&lt;/h2&gt;

&lt;p&gt;Don't just catch exceptions - report them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Centralized exception handling middleware&lt;/li&gt;
&lt;li&gt;Automatic alerts (email, Slack, Teams, PagerDuty)&lt;/li&gt;
&lt;li&gt;Graceful user-facing messages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Errors should wake you up before they wake your users.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Notifications &amp;amp; Auditing
&lt;/h2&gt;

&lt;p&gt;Include notifications early - not as an afterthought:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System notifications for job failures, thresholds, or workflow events&lt;/li&gt;
&lt;li&gt;Audit logs for every significant user or system action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Every production system should be able to answer: "What happened, and who did it?"&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Security &amp;amp; Access
&lt;/h2&gt;

&lt;p&gt;Even prototype users deserve protection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure endpoints, API keys, and credentials&lt;/li&gt;
&lt;li&gt;Role-based access control (RBAC)&lt;/li&gt;
&lt;li&gt;Token validation and HTTPS enforcement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;It's always cheaper to build security in than bolt it on later.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  The Invisible Path: Why It's Hard to See
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Most developers don't skip infrastructure out of ignorance - they skip it because there's no visual feedback.&lt;/p&gt;

&lt;p&gt;A logging system doesn't "look" like anything.&lt;br&gt;
 Monitoring doesn't sparkle.&lt;br&gt;
 Alerts don't animate.&lt;br&gt;
 And dashboards are usually blank until something goes wrong.&lt;/p&gt;

&lt;p&gt;But these invisible systems are the backbone of trust, reliability, and scale. They're what allow your app to evolve beyond the demo phase - to survive real users, real load, and real expectations.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning Vibe into Vision
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Vibe coding isn't the enemy. In fact, it's one of the most exciting developments in modern software. The key is to direct that vibe into the right order.&lt;/p&gt;

&lt;p&gt;Here's the formula:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start with the Infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Configurations&lt;/li&gt;
&lt;li&gt;Secrets&lt;/li&gt;
&lt;li&gt;Pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Then Add the UI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let AI build the components, styles, and interactions.&lt;/li&gt;
&lt;li&gt;But make sure they sit on top of a solid foundation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Finally, Connect the Two&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hook your vibe-coded components into telemetry, authentication, and notifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's how you vibe code responsibly - with intent and architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Example: From Demo to Deployment&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Imagine building a small task tracker.&lt;/p&gt;

&lt;p&gt; You prompt your AI: "Create a Blazor page with a task list, add/edit/delete buttons, and save tasks locally."&lt;/p&gt;

&lt;p&gt;Looks great. It runs. You feel done.&lt;/p&gt;

&lt;p&gt;Now try to deploy it for real:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where will the logs go?&lt;/li&gt;
&lt;li&gt;What if the API fails?&lt;/li&gt;
&lt;li&gt;How will you know if it's down?&lt;/li&gt;
&lt;li&gt;How do you separate dev from prod data?&lt;/li&gt;
&lt;li&gt;What happens when you have 100 users instead of one?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's when the invisible path reveals itself.&lt;br&gt;
 Every shortcut you took in the name of speed becomes a rework item.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Vibe-First, Infra-Later Paradox&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Vibe coding teaches speed.&lt;br&gt;
 Production requires &lt;strong&gt;discipline&lt;/strong&gt;.&lt;br&gt;
The trick is to combine them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use vibe coding for rapid prototyping inside a predefined infrastructure template.&lt;/li&gt;
&lt;li&gt;Treat your infrastructure setup as part of your vibe toolkit — not an afterthought.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When infrastructure is invisible, failure becomes visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thought&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The next generation of developers will code side by side with AI. But if we don't teach them to see the invisible path - to value logging, monitoring, security, and observability as much as aesthetics - we'll keep producing beautiful apps that can't survive the real world.&lt;/p&gt;

&lt;p&gt;Build your foundation first.&lt;br&gt;
Then let the vibe flow.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minimalism</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
