Skip to content
Part 1 of 1010% through the series
1
Part 1February 3, 202618 min read

How I Stopped Vibe Coding and Built a System That Actually Ships

From chaos to governance in AI-assisted development

The story of how unstructured AI coding nearly derailed an enterprise project, and the system that emerged to fix it. A candid look at what happens when you let AI code without guardrails.

I'm going to tell you something that might sound impossible: I'm the co-founder and Chief Operating Officer of a luxury furniture and fixtures company, and I have built an enterprise-grade piece of software - a full-stack platform with dozens of features, multiple database environments, role-based access control, real-time updates, and integrations with third-party APIs - entirely by myself, with no prior experience building software. I've spent my career on the design side - years of professional UI and UX work - so I know exactly what good software should look and feel like. I just never built any of it. And yet I ship with remarkably few bugs.

To be specific: I have no QA team. No senior engineer reviewing my code. No one catching my mistakes before they ship. My technical starting point was HTML, CSS, some basic PHP, and enough MySQL to run simple queries. That's it. Everything else - the TypeScript, the React components, the API architecture, the database design - I learned by building this platform with AI. But the AI isn't what made it work. What made it work is the system I built around the AI, and it took months of painful failure to get there.

This is the story of how I got here, what I learned, and why the way most people use AI coding tools is setting them up for failure.


The Vibe Coding Trap

If you've been anywhere near the AI development conversation in the past year, you've heard the term "vibe coding." The idea is simple and seductive: describe what you want, let the AI build it, and just... go with the vibes. Ship fast, iterate faster, don't overthink it.

I tried that. It works; right up until it doesn't.

Here's what vibe coding actually looks like on a real project. Day one, you're flying. Features materializing out of thin air. You feel like a wizard. Day five, things start getting weird. The AI writes code that contradicts what it wrote three days ago. Day ten, you push a "working" feature to production and discover it breaks two other things. Day twenty, you're spending more time fixing AI-generated bugs than you would have spent writing the code yourself.

The fundamental problem isn't that AI is bad at coding. It's that AI has no memory, no standards, and no accountability --- unless you build those things yourself.

That's what I did. And it changed everything.


Where It Started: Just Me and a Chat Window

When I started building Limn Systems, an enterprise platform for the furniture and design industry, I was doing what everyone else does. I'd open Claude Code, describe what I wanted, and start building.

The early days were exhilarating. I was putting together features in hours that would have taken a traditional developer days or weeks. Database schemas, API routes, frontend components: they just appeared.

But then I started noticing patterns. Bad patterns.

The AI would use one approach for database queries in one file and a completely different approach in another. It would claim features were "complete" when critical pieces were missing. It would make changes that silently broke things in parts of the codebase it wasn't looking at. Worst of all, when I'd start a new session, all the context about what we'd built and why was just... gone.

I was shipping fast, but I was also spending enormous amounts of time firefighting. Debugging issues that shouldn't have existed. Re-explaining decisions that had already been made. Watching the AI confidently make the same mistake for the third time.

Something had to change.


The First Insight: AI Needs Rules, Not Just Instructions

The turning point came when I realized something that seems obvious in retrospect: telling an AI what to build is not the same as telling it how to build things in your system.

Every codebase has patterns. How you structure database queries. How you handle authentication. How components are organized. What naming conventions you use. In a team of human developers, these patterns live in people's heads, in code reviews, in tribal knowledge. With AI, there's no tribal knowledge. Every session starts from scratch.

So I started writing rules down. Not vague guidelines, but specific, enforceable rules with examples of what's right and what's wrong. And not just writing them down, but building a system where the AI was required to read and follow them at the start of every session.

This was the first layer of what eventually became a much larger system, and even this simple step cut my bug rate dramatically. The AI stopped using three different patterns for the same operation. It stopped making "creative" architectural decisions that contradicted established patterns. It started being consistent.

But consistency wasn't enough.


The Second Insight: Trust Nothing, Verify Everything

Even with rules in place, I kept hitting a particular failure mode: the AI would claim work was done when it wasn't. Not maliciously (AI doesn't lie intentionally). But it would say "I've added the component to all five pages" when it had actually added it to three. It would say "the build passes" without running the build. It would say "I verified the database schema" without querying the database.

This taught me something important about working with AI: claims without proof are worthless.

So I built a verification system. Every claim the AI makes has to be backed by a specific command that proves it. Created a file? Show me the ls output. Added code to a component? Show me the grep result. Changed the database? Run the query and show me the output. Build passes? Run the build and show me exit code zero.

This sounds tedious, and it is, but it's orders of magnitude less tedious than discovering in production that a feature doesn't actually work. The verification system caught problems that I never would have found through manual review, because I was asking the AI to prove things I would have just trusted a human developer to have done.


The Third Insight: Mistakes Should Make the System Stronger

Despite rules and verification, bugs still slipped through. That's inevitable. But what I noticed was that the same categories of bugs kept appearing. The AI would make a change to a value that appeared in thirty places across the codebase but only update three of them. It would build a backend feature but forget to wire it up to the frontend. It would create a component but never actually render it on any page.

Each of these failures taught me something, and I realized I needed a way to capture those lessons permanently. Not just for me, but for the AI itself.

So I built an incident tracking system. When a bug gets through that the system should have caught, it triggers a structured process: document what happened, figure out why it was missed, and then create new rules and automated checks that prevent that specific failure mode from ever happening again.

The key insight is that this isn't a passive log. Each incident creates prevention at multiple levels: new rules the AI must follow, new automated checks that run before code is committed, new reminders that surface in relevant contexts, and persistent memory that carries lessons across sessions.

Over time, the system literally learns from its mistakes. The same bug can't slip through twice because the first occurrence created the defenses that catch the second.


The Fourth Insight: Context is Everything (and It's Always Disappearing)

One of the hardest problems in AI-assisted development is context management. AI models have limited context windows; they can only "see" a certain amount of information at once. In a long coding session, earlier instructions get pushed out as new information comes in. The AI starts forgetting rules, making decisions that contradict earlier ones, or re-exploring code it already looked at.

This problem is invisible until it bites you. You're three hours into a complex feature implementation, the AI has been doing great work, and then suddenly it starts violating patterns it was following perfectly an hour ago. What happened? Context degradation. The earlier instructions have been pushed out of the window.

I solved this with a combination of approaches. Session state tracking persists critical information across context boundaries. Specialized sub-processes handle exploration-heavy tasks in isolated contexts so they don't pollute the main working context. Automated hooks detect when context is getting large and warn about potential degradation.

The result is that long sessions no longer degrade in quality. The AI maintains awareness of project rules, current task state, and past decisions regardless of how long the session runs.


The Fifth Insight: Automate the Guardrails

Writing rules is great. Having the AI read them is better. But the real power comes from automation: hooks and checks that run automatically at key points in the development process, catching violations before they become problems.

Think of it like a series of gates. Before the AI can edit certain types of files, automated checks remind it about relevant rules. Before code is committed, a pattern scanner validates compliance with dozens of established patterns. Before code is pushed to the remote repository, a full verification suite runs. At the start of every session, the system automatically loads context from previous sessions and surfaces relevant lessons from past mistakes.

None of these gates require my intervention. They run automatically, silently enforcing quality standards that would be impossible for a single person to monitor manually.

This is where the system starts feeling less like "a person using an AI tool" and more like "a person with an AI development team," one that has quality assurance built into its DNA.


The Sixth Insight: Study What Others Are Doing, Then Do It Better

I regularly review articles and tips from other developers using AI coding tools. What I've found is that most people are solving the same problems I solved months ago, and many of them are solving them less rigorously.

I see articles about prompt engineering tricks that work for simple projects but fall apart at scale. I see tips about using system prompts that address one or two failure modes but miss dozens of others. I see developers celebrating shipping speed without acknowledging the technical debt they're accumulating.

Occasionally, though, I find genuinely good ideas: approaches I hadn't considered, or perspectives that challenge my assumptions. When that happens, I have a structured process for evaluating the idea against my existing system, identifying gaps, and implementing improvements.

This continuous improvement loop means the system is always getting better. Not just from my own experience, but from the collective experience of the entire AI development community.


Where the System Is Now

Today, my development system is nothing like where it started. What began as a few rules in a text file has evolved into a comprehensive protocol system with:

  • Canonical rules covering everything from database patterns to security requirements to UI consistency standards, each one forged from a real production incident --- codified in a configuration system that the AI reads on every session, including a conventions config that makes the entire infrastructure portable across projects
  • Twenty-one verification types that require proof for every claim --- file existence, code presence, build success, schema accuracy, coupling integrity, and dozens more --- enforced automatically, not manually
  • Eleven lifecycle hooks that fire at key moments (session start, file edit, pre-commit, context compression) to inject reminders, block violations, and maintain quality without any manual effort
  • Twenty-eight structured commands for every phase of development --- planning, implementation, debugging, committing, deploying --- each one mandatory, not advisory
  • Persistent memory across sessions through a three-database architecture: a code knowledge graph for structure, a data layer for relationships, and a session memory database for observations, decisions, and failures
  • Multi-level verification that requires proof for every claim, not just trust
  • Incident response that turns every bug into systemic improvement at five defense layers simultaneously
  • Quality scoring that evaluates work across multiple dimensions before it ships, using specialized AI agents tuned to different model tiers for cost-effective adversarial review (available with Pro)
  • Context management that prevents quality degradation in long sessions through subagent isolation, token budgets, and recovery protocols
  • A knowledge graph with twelve free core MCP tools (seventy-two total across all tiers) that understands the codebase as an interconnected system of relationships, not just a collection of files, enabling impact analysis, coupling detection, and domain-aware context
  • Continuous improvement through systematic review of industry best practices

The result? I ship enterprise-grade features as a solo founder faster than many teams, and with fewer bugs. Not because I'm a better developer --- because the system enforces quality standards that no individual, human or AI, could maintain manually.


The Uncomfortable Truth About AI Development

Here's what most people don't want to hear: AI doesn't eliminate the need for engineering discipline. It amplifies whatever discipline you bring to the table.

If you bring chaos (no standards, no verification, no accountability), AI will generate chaos at unprecedented speed. You'll ship fast and break things faster.

If you bring structure (clear rules, automated checks, systematic verification, continuous improvement), AI will build quality at unprecedented speed. You'll ship fast and the things you ship will actually work.

The difference isn't the AI. It's the system around the AI.

Vibe coding is fun. It's exciting. It makes you feel productive. But it's building on sand. What I've built is more like building on bedrock; it took more effort to establish the foundation, but everything built on top of it is solid.


What's Next

This is the first article in a ten-part series where I'll dive deeper into specific aspects of this system. Coming up:

  • The Protocol System: How structured commands turn AI from a chatbot into a development partner with repeatable, auditable processes
  • Memory That Persists: How to build a knowledge system that makes AI actually learn from mistakes across sessions
  • The Verification Mindset: Why "trust but verify" is wrong and what to do instead
  • Automated Enforcement: Building hooks and gates that catch problems before you even see them
  • The Incident Loop: How every bug makes your system permanently stronger
  • Planning Like an Architect: Why AI needs a blueprint before writing a single line of code, and how blast radius analysis prevents cascading failures
  • Context Is the Bottleneck: Managing AI's most precious and most fragile resource --- its working memory --- through subagent isolation, token budgets, and recovery protocols
  • Solo Worker, Enterprise Quality: The economics of AI-assisted development and why small teams can now compete with large ones
  • The Knowledge Graph: Teaching AI to understand your codebase as a living system of relationships, not just a collection of files

The system I've been describing has become Massu AI, an open-source AI engineering governance platform. The free core is genuinely powerful on its own --- twelve core MCP tools, thirty-one workflow commands, eleven lifecycle hooks, and a three-database architecture give you the protocols, verification, memory, and enforcement described in this article. You can install it today and start governing your AI code immediately. When you're ready for the full suite --- quality analytics, cost intelligence, knowledge indexing, and all seventy-two tools across eighteen categories --- tiered plans unlock additional capabilities as you scale. Throughout this series, I'll reference specific features so you can see exactly how each principle is implemented in real, working software.

Because the meta-lesson here isn't about my particular setup. It's about the fact that the system around the AI matters more than the AI itself.

If you're building with AI and fighting fires every day, you don't need a better model. You need a better system. And now you can install one --- for free.


This is Part 1 of a 10-part series on building enterprise software with AI:

  1. How I Stopped Vibe Coding and Built a System That Actually Ships (this article)
  2. The Protocol System: How I Turned AI From a Chatbot Into a Development Partner
  3. Memory That Persists: How I Made AI Actually Learn From Its Mistakes
  4. The Verification Mindset: Why "Trust But Verify" Is Wrong When Building With AI
  5. Automated Enforcement: Building Hooks and Gates That Catch Problems Before You Even See Them
  6. The Incident Loop: How Every Bug Makes Your AI Development System Permanently Stronger
  7. Planning Like an Architect: Why AI Needs a Blueprint Before Writing a Single Line of Code
  8. Context Is the Bottleneck: Managing AI's Most Precious and Most Fragile Resource
  9. Solo Worker, Enterprise Quality: The New Economics of AI-Assisted Development
  10. The Knowledge Graph: Teaching AI to Understand Your Codebase as a Living System

I'm the Co-founder and COO of Limn, where we create luxury furniture and fixtures for large-scale architectural and building projects. Alongside the physical work, we design the systems required to manage a complex, global lifecycle --- from development and production to shipping and final delivery. The governance system I built for Limn's software is now Massu AI, an open-source AI engineering governance platform.

Imagined in California. Designed in Milan. Made for you.

Here, I share what I've learned about making AI development actually work in the real world.

Have questions or want to share your own AI development setup? I'd love to hear from you in the comments.

This system is Massu AI

72 MCP tools across four tiers, 31 workflow commands, and 11 lifecycle hooks --- core tools free, no account required. Install the governance system described in this article and stop vibe coding today.