Write Before You Build: How Novel Writing Principles Transform Vibe Coding Results

Bryon Spahn

3/26/202617 min read

MacBook Pro near white open book
MacBook Pro near white open book

The Rough Draft Problem

"It works… mostly. I just need to fix a few things." — Every vibe coder after their third hour of prompt loops.

Picture Marcus, a mid-market operations manager at a regional logistics company. He's not a developer. Never has been. But he's been watching his competitors roll out internal tools at a pace that makes his IT backlog look embarrassing. So he opens Cursor, types a prompt, and three minutes later has a functioning dashboard. He grins. He iterates. He adds a feature. Then another. An hour later, the app technically works — but it's a maze of conflicting logic, half-formed UI patterns, and backend routes that were never properly planned. The AI was happy to comply with every request. It just didn't know the whole story.

This is the paradox at the heart of vibe coding in 2025: the tools have never been more powerful, and the results have never been more inconsistently good. Modern AI coding assistants — Cursor, Bolt, Lovable, GitHub Copilot, Replit Agent, and others — are capable of generating rough-draft quality applications with startling speed when given quality prompts. The gap between idea and prototype has collapsed. But the gap between prototype and production-grade, maintainable software? That one's widened for a lot of people, precisely because the ease of generation masks the absence of a structured process.

The solution, surprisingly, has less to do with engineering and more to do with writing. Specifically: the discipline that novelists, journalists, and technical authors have practiced for centuries — the art of structured iteration.

This article makes the case that adopting a writing-process mindset when working with vibe coding tools is one of the most practical and immediately impactful shifts a builder can make. It introduces the CRAFT Framework — a five-phase methodology borrowed directly from creative writing craft — and shows how applying it to AI-assisted development produces cleaner code, fewer dead ends, and applications that actually do what you intended when you started.

What Is Vibe Coding, and Why Is It Messy?

The term 'vibe coding' emerged colloquially to describe the practice of building software primarily through natural language prompts to an AI coding assistant, with the developer steering by intent and feel rather than line-by-line specification. The word 'vibe' is telling — it captures both the informal energy of the approach and its central weakness: it relies on momentum and intuition more than structure and foresight.

In practice, vibe coding often looks like this: a builder has an idea, describes it in a prompt, reviews the AI-generated output, notices a gap, adds another prompt to fill it, reviews again, notices another gap, and continues the loop until the application feels approximately right. The AI is a skilled, tireless collaborator — but it has no persistent understanding of your intent beyond what you've told it in this session. Every prompt is, to varying degrees, the AI's first introduction to your project.

This is not a flaw in the tools. It is a structural reality that fundamentally shapes how they should be used. And yet, the overwhelming majority of vibe coding guidance focuses on prompt quality in isolation — how to phrase a single instruction to get a better response — without addressing the broader architecture of the building process itself.

The result is that even experienced users of these tools frequently find themselves in one of three failure modes:

The Feature Spiral: Each new prompt adds capability without considering integration, resulting in an application that is wide but shallow — many features, none of them well-connected.

The Revision Trap: After generating a substantial codebase, the builder realizes a foundational assumption was wrong. Rolling back or refactoring AI-generated code is often harder than starting over.

The Drift Problem: Over a long build session, the AI's understanding of the application's purpose and constraints drifts. Later outputs contradict earlier ones in ways that aren't immediately obvious.

Each of these failure modes has a direct analog in bad writing — and each has a remedy in writing craft.

How Novelists Think: The Writing Process as a Development Model

The craft of writing long-form narrative — novels, screenplays, technical manuals, investigative journalism — is fundamentally a discipline of managing complexity over time. A novelist working on a 90,000-word manuscript faces a challenge not unlike a developer building a mid-complexity application: there are too many interdependent elements to hold in working memory simultaneously, the end state evolves as you approach it, and early decisions constrain later options in ways that aren't obvious until you're deep in the work.

Professional writers solve this through structured process. Not rigid process — good writers know when to deviate from an outline — but disciplined process. They plan before they draft. They draft before they revise. They revise iteratively rather than trying to perfect each sentence before moving on. And critically, they distinguish between phases of the work: the generative phase (where quantity and momentum matter) and the refinement phase (where quality and precision matter). Conflating the two is a well-documented productivity trap that writing instructors have warned against for decades.

The parallels to vibe coding are nearly one-to-one:

Outlining → Application architecture and prompt scaffolding

First draft → Rough-pass generation with speed over perfection

Developmental editing → Feature coherence and logic review

Line editing → Code quality, naming conventions, and UI polish
Proofreading → Testing, edge case review, and deployment readiness

The key insight is that treating AI coding tools as draft-generation engines — powerful but imprecise on the first pass — and then applying structured refinement layers, produces dramatically better results than trying to prompt your way to perfection in a single pass.

"The first draft is just you telling yourself the story." — Terry Pratchett. In vibe coding, the first run is just you telling the AI what you're building. Revision is where the real product is made.

Introducing the CRAFT Framework

Axial ARC developed the CRAFT Framework to give builders and business technologists a practical, phase-gated approach to AI-assisted development that mirrors professional writing process. CRAFT stands for:

C — Conceptualize (The Outline)

R — Rough Draft (The First Pass)

A — Articulate (The Developmental Edit)

F — Fine-Tune (The Line Edit)

T — Test & Transmit (The Final Review)

Each phase has a distinct purpose, a specific set of prompting behaviors, and a clear exit criterion before moving to the next. Critically, CRAFT is not a waterfall process — you will loop within phases, and occasionally revisit earlier phases. But the discipline is in knowing which phase you are in at any given moment, and prompting accordingly.

C — CONCEPTUALIZE: The Outline

Before a single line of code is generated, the Conceptualize phase asks you to do what every good novelist does before sitting down to write: build the map.

In practice, this means creating what we call a Project Brief Prompt — a structured natural language document that you will use as the foundation for every subsequent interaction with your AI coding tool. The Project Brief Prompt is not a prompt in the traditional sense; it is more like a constitution for your application. It defines:

Purpose: What problem does this application solve, and for whom? Be specific. 'A tool to manage inventory' is a genre. 'A lightweight web app for a 12-person warehouse team to track inbound shipments, flag discrepancies, and generate a daily summary email' is a story.

Scope Boundaries: What is explicitly OUT of scope for v1? Defining what you are not building is as important as defining what you are. AI tools, like enthusiastic junior developers, will fill scope vacuums with assumptions.

User Stories: Write 3-7 core user stories in plain language. 'As a warehouse supervisor, I want to see today's pending shipments on a single screen so I don't have to check multiple systems.' These become your compass when the AI drifts.

Technical Constraints: Preferred stack, hosting environment, performance expectations, integration points. Even if you're non-technical, 'it needs to work in a browser, connect to our existing Google Sheets data, and be usable on a phone' is enough to steer effectively.

Aesthetic Direction: For applications with user interfaces, include a brief description of the visual tone. 'Clean, minimal, dark mode preferred, no unnecessary decoration' saves enormous revision time.

The Project Brief Prompt serves a second critical function: it gives the AI a persistent context document that you can reference in every subsequent prompt. 'Per the project brief, add a shipment flagging feature' is far more effective than trying to re-explain your application's purpose from scratch each session.

CRAFT Pro Tip: Spend 30-45 minutes on the Conceptualize phase before touching any coding tool. Builders who skip this step consistently spend 3-5x longer in revision than those who don't.

Conceptualize Phase Prompt Pattern

Use this template to generate your Project Brief Prompt with AI assistance:

"I am building [application description]. The primary users are [user types]. The core problem it solves is [problem statement]. It should integrate with [existing systems]. It should NOT include [out of scope items] in v1. The technical environment is [constraints]. Help me write a detailed Project Brief Prompt that I can use as a persistent context document for all subsequent development prompts."

Review the output, refine it until it accurately represents your vision, and save it. This document is your outline. Everything else follows from it.

R — ROUGH DRAFT: The First Pass

The Rough Draft phase is where vibe coding earns its name — and where most builders spend most of their time, often to their detriment. The principle here, drawn directly from writing craft, is: generate fast, generate broadly, and resist the urge to perfect.

In writing, the enemy of the first draft is the internal editor — the voice that makes you stop, revise, reconsider, and polish before you've finished a single chapter. First-draft paralysis produces thin, over-polished fragments rather than a coherent whole. The same dynamic plays out in AI-assisted development when builders stop to perfect each component before the application's skeleton is complete.

The Rough Draft phase has one job: get a working skeleton of your application into existence. This means:

Generating the core data structures or schema first. Ask the AI to propose a data model based on your Project Brief Prompt before generating any UI or logic. This is the equivalent of establishing your characters before writing their dialogue.

Building the application frame before filling in features. Get a working shell — navigation, basic routing, placeholder components — before adding functionality. This surfaces structural problems early, when they're cheap to fix.

Using 'scaffold prompts' rather than 'feature prompts.' Instead of 'add user authentication with email and password, remember-me functionality, and password reset,' try 'scaffold a user authentication module — stub out the components, don't implement logic yet.' Scaffolding first, implementation second.

Accepting rough output. In this phase, naming conventions, code elegance, and UI polish are explicitly deferred. If the logic works and the structure is sound, the Rough Draft has done its job.

The Rough Draft phase typically produces 40-60% of the application's final functionality in a fraction of the total build time. The temptation to declare victory here is the single most common mistake in vibe coding projects. The application works, roughly. But it is a first draft, and first drafts are not products.

CRAFT Pro Tip: End every Rough Draft session by asking the AI: 'Review what we've built against the Project Brief Prompt. Identify the three most significant gaps between what exists and what the brief requires.' This keeps you honest before you start adding features.

A — ARTICULATE: The Developmental Edit

In publishing, developmental editing is the phase where a manuscript is evaluated for its architecture — plot coherence, character consistency, pacing, thematic unity. It is not about fixing sentences; it is about asking whether the story holds together as a whole. Line-level editing happens later. First, does the structure work?

The Articulate phase applies this discipline to your application. Having generated a rough-draft skeleton, you now systematically evaluate whether the application's components are coherent, consistent, and correctly connected. This is the most underutilized phase in vibe coding workflows, and its absence is the primary reason AI-generated applications degrade in quality as they grow.

Articulate-phase work includes:

Logic Audits: Ask the AI to walk through each user story from your Project Brief Prompt and confirm that the current implementation supports it end-to-end. 'Trace the complete path a warehouse supervisor would take to flag a discrepancy, from entry to database update to notification.' This surfaces broken connections that feature-level testing misses.

State and Data Flow Review: For applications with meaningful state management, ask the AI to document how data flows between components. 'Generate a data flow diagram for this application in plain language.' Inconsistencies in this diagram reveal architectural problems before they become load-bearing.

Naming and Convention Consistency: Ask the AI to audit variable names, function names, component names, and API routes for consistency. 'Review the codebase for naming inconsistencies and propose a standardized convention.' This is developmental editing for code — ensuring the internal language of your application is coherent.

Redundancy and Dead Code: AI-generated code accumulates redundancy quickly, especially after multiple iterative prompt sessions. Ask explicitly: 'Identify any duplicate functions, unused variables, or redundant logic in the current codebase.'

Edge Case Mapping: Before implementing polish, map the edge cases for your core user flows. 'What happens if a user submits the shipment form with an empty required field? What if the API call fails? What if two users are editing the same record simultaneously?' Document these, even if you don't solve all of them in this phase.

The Articulate phase is inherently unglamorous. You are not building new features; you are auditing what exists. But this work is the difference between an application that scales gracefully and one that becomes unmaintainable after three months.

CRAFT Pro Tip: Before entering the Articulate phase, export your current codebase to a fresh context window and paste your Project Brief Prompt. Ask the AI to evaluate the codebase against the brief as an outside reviewer. Fresh context reveals drift that accumulated context obscures.

F — FINE-TUNE: The Line Edit

Line editing is where a manuscript transforms from structurally sound to genuinely good. Every sentence is scrutinized. Word choice tightened. Rhythm adjusted. Redundant phrases cut. The line editor is not asking 'does this chapter work?' — that was developmental editing. The line editor is asking 'is this sentence doing its job as well as it possibly can?'

The Fine-Tune phase applies this precision to your application's implementation. With the architecture confirmed and the logic audited, you now work through the application component by component, improving quality at the implementation level.

Fine-Tune work includes:

UI Polish and Accessibility: Review each user-facing component. 'Audit the shipment entry form for accessibility — label associations, keyboard navigation, focus states, and color contrast.' This level of detail is rarely generated well in rough-draft prompts.

Performance Optimization: Identify expensive operations and optimize them. 'Review the shipment list component. Are there unnecessary re-renders, unoptimized queries, or large data fetches that could be paginated or cached?'

Error Handling and User Feedback: AI-generated code frequently has minimal error handling. 'Add appropriate error states, loading indicators, and user-facing messages to all async operations in this module.' This single prompt category transforms rough-draft applications into polished ones.

Security Hardening: Input validation, API key exposure, authentication edge cases. 'Review this module for common security vulnerabilities — XSS risks, unvalidated inputs, exposed credentials, or missing authorization checks.'

Code Documentation: Ask the AI to add inline documentation for complex functions and generate a README that accurately describes the application's architecture, setup, and usage. This is your application's prose — the words that make it legible to future contributors.

A note on scope discipline in the Fine-Tune phase: this is where feature creep most commonly derails projects. The application is working well, you have positive momentum, and it is tempting to add 'just one more thing' before declaring it done. Resist this. New features should be treated as new chapters — return to the Conceptualize phase, update the Project Brief Prompt, and run through the full CRAFT cycle for the addition. Do not mix fine-tuning with feature development.

CRAFT Pro Tip: Create a 'parking lot' document alongside your Project Brief Prompt. Every new feature idea that emerges during Fine-Tune gets written there, not implemented. After your first release, review the parking lot and decide what makes it into v2.

T — TEST & TRANSMIT: The Final Review

A manuscript that never leaves the author's desk helps no one. A proofreader doesn't care how hard the book was to write — they care whether it is ready to be read. The Test and Transmit phase applies this standard to your application. It is the gate between development and deployment, between what you built and what your users experience.

Unlike traditional software testing frameworks, which can be prohibitively complex for non-developer builders, the Test and Transmit phase in the CRAFT Framework is structured around functional user stories — the same ones you defined in Conceptualize. Each user story becomes a test case:

Happy Path Testing: Execute each user story from end to end under ideal conditions. Document whether it works as described in the Project Brief Prompt.

Failure Mode Testing: For each user story, identify the most likely failure scenario and test it deliberately. What happens when the data is wrong? When a required service is unavailable? When a user does something unexpected?

Cross-Device and Cross-Browser Review: For web applications, test on at least two browsers and a mobile device. AI-generated CSS frequently has responsive breakpoints that look fine in development but break in the field.

Data Integrity Review: Manually verify that all data operations — creates, reads, updates, deletes — perform correctly and that no data is silently dropped, duplicated, or corrupted.

Deployment Readiness: Confirm that environment variables are externalized, API keys are not in source code, and the application runs cleanly from a fresh installation. Ask the AI: 'Review this codebase for deployment readiness. Identify any hardcoded credentials, missing environment configurations, or missing dependencies.'

'Transmit' encompasses not just deployment but handoff — the documentation, onboarding guides, and operational runbooks that allow other people to use, maintain, and extend what you built. A well-documented application is a complete one.

For organizations using CRAFT in team environments, the Test and Transmit phase should include a structured peer review — ideally by someone who was not involved in the build — using the Project Brief Prompt as the evaluation standard. Does the application do what the brief said it would? If yes, ship it. If not, return to the relevant phase and close the gap.

The 90-Day CRAFT Adoption Roadmap

Shifting from unstructured vibe coding to CRAFT-based development doesn't require a wholesale process overhaul. It requires deliberate practice, applied to real projects, over about three months. Here is a realistic adoption pathway:

Days 1-30: Build the Habit of Conceptualization

The primary goal of the first month is simple: never start a vibe coding session without a Project Brief Prompt. This single discipline, consistently applied, will produce measurable improvements in output quality without requiring changes to your toolchain or workflow. For teams, create a shared Project Brief Prompt template and require it for all AI development work. Conduct a retrospective at the end of the month: how many projects had drift issues? How many times did the team need to restart because of foundational misalignment? These are your baseline metrics.

Days 31-60: Introduce Phase Gates

In the second month, introduce explicit phase transitions into your workflow. Before moving from Rough Draft to Articulate, require a brief review against the Project Brief Prompt. Before moving from Fine-Tune to Test, require a peer review of the core user stories. The goal is not to slow down development — it is to identify problems at the stage where they are cheapest to fix. Track how many issues are caught in Articulate that would previously have made it to production. This data builds the organizational case for the CRAFT approach.

Days 61-90: Scale and Standardize

In the third month, formalize CRAFT as your team's standard for AI-assisted development. Document your Project Brief Prompt template, your phase-gate checklists, and your parking lot process. Begin applying CRAFT to existing applications — run the Articulate phase on your most-used internal tools and document what you find. Most teams discover significant technical debt in AI-generated applications at this stage, which is itself a valuable finding. Use it to build the case for ongoing maintenance investment in the tools your team has built.

Case Studies: CRAFT in Practice

Regional Healthcare Administration: From Prototype to Production

A regional healthcare administration office had used a vibe coding tool to build an internal scheduling assistant. The tool worked well for about six weeks after launch, then began experiencing cascading failures as edge cases accumulated. A review of the codebase revealed the classic rough-draft failure pattern: no schema validation, inconsistent state management, and a feature set that had been added reactively with no architectural coherence. The office engaged Axial ARC to apply a retrospective CRAFT review — essentially running the Articulate and Fine-Tune phases on a codebase that had been deployed without them. Within four weeks, the scheduling tool was stable, documented, and had been extended with three features from the parking lot. Total remediation cost: significantly less than a rebuild. Key lesson: CRAFT can be applied retroactively, but the earlier it's adopted, the more cost-effective it is.

Manufacturing SMB: Building the Habit Before Building the App

A regional manufacturing company's operations director wanted to build a supplier performance dashboard using an AI coding tool. Having read about common vibe coding failure patterns, his team spent their first session exclusively on the Conceptualize phase — building a Project Brief Prompt with five detailed user stories, a defined out-of-scope list, and an explicit data model draft. The Rough Draft phase took two sessions. The Articulate phase caught four data flow inconsistencies before they were built into the UI. The Fine-Tune phase added proper error handling and mobile responsiveness. The application went to internal production in week five. Three months later, it had not required a single emergency patch. The operations director's assessment: 'We spent more time planning than we usually do, and finished faster than we ever have.'

Professional Services Firm: The Parking Lot Pays Off

A professional services firm used CRAFT to build a client intake and proposal tracking tool. During the Fine-Tune phase, five new feature requests emerged from stakeholders reviewing the nearly-complete application. Under previous workflows, these requests would have been incorporated immediately, extending the build timeline significantly. Instead, the project lead applied the parking lot discipline — documenting each request without implementing it. The application shipped on schedule. The parking lot became the v2 feature list. Both the initial release and the follow-on version were cleaner and more coherent than anything the team had previously built with AI assistance.

Addressing Common Objections

"This seems like it would slow me down."

The Conceptualize phase adds 30-45 minutes at the start of a project. The Articulate phase adds a review session after the rough draft. But builders who adopt CRAFT consistently report lower total build times, because they spend less time in revision cycles, less time debugging foundational issues, and less time explaining to the AI what they're actually building. The time investment front-loads work that would otherwise accumulate as debt. It doesn't add time — it moves it.

"I'm a non-developer. This framework seems technical."

CRAFT was specifically designed to be tool-agnostic and non-developer friendly. The Project Brief Prompt is written in plain language. The user stories are business narratives, not technical specifications. The phase gates are documented in plain language checklists. The framework's power comes not from technical depth but from structured thinking — which is a universal skill. Non-developer builders are often better at the Conceptualize phase than developers, because they think in user needs rather than implementation details.

"What if my project changes significantly during development?"

CRAFT anticipates this. When a significant change occurs, the discipline is to return to the Project Brief Prompt and update it before generating any new code. This keeps the document — and the AI's context — current. Think of it like a novel whose outline has changed: you update the outline before writing new chapters, not after. Projects change; CRAFT accommodates change. It simply requires that changes be conscious and documented rather than reactive and informal.

"I'm using an AI coding tool with persistent memory. Does this still apply?"

Yes — arguably more so. Persistent memory in AI coding tools is powerful, but it accumulates context across sessions in ways that can introduce drift over time. The Project Brief Prompt and phase-gate disciplines of CRAFT provide a canonical reference that overrides accumulated drift. Even with persistent memory, explicitly reorienting the AI at the start of each session with the Project Brief Prompt is a worthwhile practice. Treat it as the author's note to the AI: 'Here is what we are building and why. Everything else follows from this.'

Where Axial ARC Fits In

At Axial ARC, we describe ourselves as capability builders, not dependency creators. That ethos shapes how we approach AI-assisted development engagements. Our goal is not to become your permanent development resource — it is to give your team the frameworks, habits, and skills to build better on your own.

The CRAFT Framework is one of the ways we do that. We use it in our own internal tool development, we teach it to clients who are building AI-assisted applications for the first time, and we apply it retrospectively to applications that were built without it when teams need to stabilize and extend what they have.

We also recognize that CRAFT is not always sufficient on its own. For organizations building mission-critical applications, managing regulated data, or integrating AI-generated tools into complex enterprise environments, there are infrastructure, security, and compliance dimensions that require expert review. In about 40% of engagements, our honest advice is that a team needs to address foundational gaps — in their data architecture, their security posture, or their integration landscape — before investing heavily in application development. We'd rather tell you that up front than help you build on an unstable foundation.

For teams that are ready to build, CRAFT provides the structure to build well. For teams that need a more comprehensive advisory conversation, we are ready for that, too.

Interested in applying the CRAFT Framework to your next AI-assisted development project? Axial ARC offers hands-on workshops, project-level advisory engagements, and structured code reviews grounded in CRAFT methodology. Visit axialarc.com/contact to start the conversation.

Conclusion: The Builder as Author

The most powerful shift in vibe coding is not a better prompt or a faster tool. It is a different self-conception. The builders who get the best results from AI coding assistants are the ones who think of themselves not as users of the tool, but as authors using it — people with a story to tell and a discipline for how to tell it well.

Novelists don't publish first drafts. They outline, draft, develop, refine, and review. They know that the generative phase and the refinement phase require different mental modes, and they don't confuse one for the other. They have a bias toward completion before perfection, and a bias toward structure before momentum.

The CRAFT Framework brings these disciplines to AI-assisted development. It doesn't require you to become a developer. It requires you to become a thoughtful builder — one who respects the process, trusts the iteration, and understands that the quality of what you ship is a direct function of the rigor you applied before you shipped it.

Vibe coding gave the world a remarkable tool. CRAFT gives you a way to use it well.

Resilient by design. Strategic by nature.