Chapter 8 of 17 · 11 min read
Vibe Code The First Useful System
From The One-Person Company by Wrotebook
Vibe coding is not a license to pretend you are a software company.
That is the first correction.
The loud version says you can now build anything. Describe the app. Watch the model write the code. Patch errors as they appear. Ship the product. Charge money. Repeat.
Convenient. Also incomplete.
That story is attractive because it removes the hard part. It turns software into output. But useful software is not output. Useful software is a working arrangement between a person, a problem, a process, and a tool.
The code is only one witness.
Ask the wrong question and vibe coding becomes a slot machine. You keep prompting until the interface looks plausible. You add features because they are easy to ask for. You connect services because the tutorial said you can. You stack a dashboard on top of a database on top of an automation on top of a half-understood API. Then you call the result a platform.
It is not a platform.
It is a fragile pile with a login screen.
The solo founder has to be more severe than that. AI gives you leverage, but leverage applied to confusion multiplies confusion. If you do not understand the workflow, the model cannot save you. It can only generate artifacts around your ignorance.
So the rule is simple: build the first useful system before you build the product.
A system is smaller than a product. It has a job. It starts with an input. It ends with a usable output. It has a person who depends on it. It has a failure mode you can see.
That is where vibe coding earns its place.
Not as magic. As compression.
You can now turn a clearly understood workflow into working software faster than before. You can create an internal tool, a small portal, a data cleaner, a quote generator, a report builder, a lead triage assistant, a content scheduler, a customer follow-up tracker, a research intake form, a booking workflow, a renewal reminder system.
You can do that without becoming a full-time engineer.
But you still have to become the adult in the room.
You have to decide what the system should do. You have to test whether it does it. You have to keep it small enough that you can understand the consequences when it breaks.
That is the difference between vibe coding as leverage and vibe coding as cosplay.
Consider the founder who wants to build “an AI operations platform for consultants.”
Good phrase. Bad starting point.
What does it mean? Proposal generation? Client onboarding? Meeting notes? Invoice reminders? Project status? Knowledge base? Scope management? Follow-up emails? Sales pipeline? Delivery templates? All of it?
“All of it” is usually the confession.
It means the founder has not chosen the pain.
The model will still cooperate. It will produce a homepage. It will invent modules. It will create a sidebar with Projects, Clients, Tasks, Documents, Automations, Analytics, Settings. It will make the thing look like a business.
But the look is the trap. Software interfaces are excellent at laundering vagueness. A sidebar makes uncertainty feel architected. A dashboard makes missing judgment feel operational. A settings page makes premature complexity feel mature.
Strip it down.
A consultant loses time after sales calls turning messy notes into a clean proposal. That is a workflow.
Input: call notes, client name, service type, price range, constraints, promised next step.
Output: a draft proposal with scope, deliverables, timeline, assumptions, exclusions, and follow-up email.
Human judgment: the consultant reviews it before sending.
Failure mode: bad scope, invented promises, wrong pricing, missing exclusions.
Now there is something to build.
Not a platform. A proposal drafting system.
The first version can be ugly. In fact, ugly may be evidence of discipline. A form. A text box. A button. A generated draft. A place to edit. A way to copy or export. Maybe a saved history. Maybe not.
The point is not to impress the market. The point is to compress a repeated piece of work into a reliable loop.
This is where many solo founders get exposed. They claim to want speed. But when speed arrives, they spend it on decoration. They ask for account settings before they have one valuable output. They ask for team permissions when there is no team. They ask for analytics before there is usage. They ask for integrations before the manual workflow has proved itself.
That is not ambition. It is evasion.
The founder is avoiding the plain question: does this system make the work better?
Vibe coding should begin with a workflow brief, not a product prompt.
A product prompt says: “Build me a SaaS app for consultants that uses AI to automate proposals.”
A workflow brief says: “Build a simple internal web app where I paste discovery call notes and client details. The app should generate a proposal draft using a fixed structure: summary, problem, recommended scope, deliverables, timeline, assumptions, exclusions, fee options, and next-step email. It should not send anything automatically. It should show the generated proposal in an editable area. It should save each draft locally with date and client name. Keep the interface plain.”
The second prompt is less glamorous. It is also more serious.
It contains boundaries. It names the input. It defines the output. It blocks automation where human review matters. It constrains the interface. It says what not to do.
That last part matters. AI coding tools are eager. Eagerness is not competence. If you do not set limits, the model will often add complexity in the name of helpfulness. Authentication. Multiple roles. Database tables. Admin screens. Notification systems. Styling frameworks. Deployment assumptions. A dozen files you did not ask for and do not understand.
The founder then becomes dependent on a system they cannot interrogate.
That is a bad trade.
The first useful system should be small enough to hold in your head. You should know the pages. You should know the data fields. You should know where the prompt lives. You should know what happens when you click the button. You should know what external services are being called. You should know what data is stored. You should know how to test the main path.
If you cannot explain the system without hand-waving, it is too large.
This does not mean you need to become a professional developer before you ship anything. That is the opposite mistake. The old gatekeeping story said software belonged to people who could write every line from scratch. That story is weaker now. AI has changed the cost of translation between intention and code.
But intention is still your job.
A useful vibe coding session has a rhythm.
First, describe the workflow in plain language.
Not the app category. Not the market positioning. The actual work.
“When X arrives, I need to do Y, so that Z happens.”
“When a lead fills out my form, I need to classify whether they are a fit, draft a personal reply, and create a follow-up task.”
“When I finish a client call, I need to turn notes into action items, assign owners, and produce a summary the client can approve.”
“When a customer sends a support message, I need to identify the issue type, suggest a response, and flag anything risky for manual review.”
That sentence is the spine. Everything else answers to it.
Second, list the inputs and outputs.
Inputs are not vibes. They are fields, files, messages, records, URLs, transcripts, uploaded documents, selections, dates, prices, quantities, names. If the system needs them, name them. If the user will not reliably have them, rethink the flow.
Outputs are not “insights.” That word hides too much. Outputs are drafts, decisions, tables, checklists, labels, alerts, summaries, invoices, emails, reports, tickets, cleaned records, schedules, recommendations with reasons.
If the output cannot be inspected, it cannot be trusted.
Third, define the human checkpoint.
This is where the hype merchants get slippery. They sell “automation” as if removing the person is always the win. Sometimes it is. Often it is reckless.
A solo business runs on trust. You do not hand the machine your customer relationship because it can produce fluent paragraphs. You decide where speed is useful and where judgment is required.
The system may draft the refund response. You approve it.
The system may score the lead. You decide whether to take the call.
The system may summarize the contract. You check the terms.
The system may recommend a price. You own the offer.
This is not weakness. This is operational control.
Fourth, build only the main path.
The main path is the one thing the system must do to be useful. Not the edge cases. Not the future version. Not the features you saw in another product. The main path.
Paste notes. Generate proposal. Edit. Save.
Upload CSV. Clean records. Review flagged rows. Export.
Enter client details. Generate onboarding checklist. Mark complete.
If the main path works, you have something. If the main path does not work, every secondary feature is camouflage.
Fifth, test with hostile examples.
Most founders test like defense attorneys. They feed the system clean input, then celebrate the answer. That proves almost nothing.
You need to cross-examine the system.
Give it messy notes. Missing fields. Contradictory details. Strange formatting. A client who asks for something outside scope. A price below your minimum. A support request with anger in it. A transcript where the important point appears near the end. A CSV with blank rows and duplicate names.
Then watch.
Does it ask for missing information or invent it?
Does it preserve constraints or ignore them?
Does it confuse similar clients?
Does it produce confident nonsense?
Does it fail visibly or quietly?
Quiet failure is the dangerous one. A broken button is obvious. A wrong recommendation wrapped in polished language is not. That is why AI-generated workflow software needs tests that look like real life, not demos.
You do not need an elaborate testing department. You need a founder’s test bench.
Create ten examples. Five normal. Five ugly. Save the inputs. Save the expected behavior. Run them after every major change. If the proposal tool starts dropping exclusions, you need to know. If the lead triage tool starts recommending calls with bad-fit leads, you need to know. If the report builder starts inventing metrics, you need to know before a customer sees it.
Testing is not bureaucracy. It is the price of using speed responsibly.
Sixth, debug the cause, not just the symptom.
Vibe coding makes superficial debugging easy. Error appears. Paste error into model. Apply patch. Error disappears. The founder feels productive.
But sometimes the visible error is not the real problem. The code breaks because the data model is confused. The output is bad because the prompt is vague. The prompt is vague because the workflow is undefined. The workflow is undefined because the offer is not clear.
You can fix syntax all day and never fix the business.
When a system misbehaves, ask which layer failed.
Did the user provide the right input?
Did the interface collect it cleanly?
Did the prompt instruct the model with enough structure?
Did the code pass the data correctly?
Did the output format make review easy?
Did the human checkpoint exist?
Did the system store or expose anything it should not?
This is how a founder uses AI like an operator, not a tourist.
The goal is not to understand every technical detail. The goal is to understand enough of the system’s behavior to make responsible decisions. You do not need to rebuild the engine to drive. You do need to know which pedal stops the car.
There is another reason to keep the first system small: small systems teach faster.
A small tool shows you where your assumptions are wrong. Maybe the proposal draft saves time, but only after you add better scope options. Maybe the lead triage score is less useful than a simple “why this lead is risky” note. Maybe customers do not want an automated report; they want a cleaner intake process. Maybe the workflow you thought was painful happens only twice a month.
Good. That is information.
A bloated platform hides this. Too many features create too many explanations. Usage is low because onboarding is weak. Or because positioning is unclear. Or because the dashboard is confusing. Or because the wrong market saw it. Or because the product solves a problem no one cares about.
A small workflow has fewer places to hide.
It either helps or it does not.
That is why the first useful system is often internal before it is commercial. Use it yourself. Use it for one client. Use it manually behind the scenes. Let the customer experience the result before you expose the machinery.
This is not dishonest. It is disciplined. Customers do not buy your architecture. They buy relief from a problem. If your internal tool helps you deliver faster, cleaner, or more reliably, it is already part of the business.
Later, you can decide whether to productize it.
But productization is a separate burden. It requires onboarding, permissions, security, billing, support, documentation, uptime, data handling, edge cases, and customer trust. Those are not decorations. They are obligations.
The vibe coding crowd often skips this distinction. They build a tool that works for them once, then call it SaaS. But software used by strangers is different from software used by its maker. Strangers do not know your assumptions. They will click things out of order. They will paste bad data. They will expect recovery. They will want privacy. They will forget what they did yesterday. They will blame you when the system loses their work.
That is fair. You invited them in.
So do not invite them too early.
A one-person company can move fast because it has fewer meetings, fewer committees, fewer internal politics. But it cannot move so fast that it sells experiments as infrastructure. Trust is not optional. Reliability is not a corporate luxury. It is the thin line between leverage and liability.
Build the workflow. Use it. Test it. Tighten it. Then decide whether it deserves to become a product.
The first useful system should leave you with three assets.
First, a clearer process. You should understand the work better after building the tool than before. If the build did not force sharper thinking, you probably automated around the problem instead of through it.
Second, a reusable asset. The system should save time or improve quality more than once. A one-off script may still be useful, but a workflow tool earns its keep by surviving repetition.
Third, a better commercial question. Not “Can I build this?” That question is now cheap. The better question is “Who needs this badly enough, often enough, and with enough trust in me to pay for it?”
That question belongs to the business, not the code.
Vibe coding is powerful because it lets a solo founder turn operational judgment into software without waiting for permission. But it is dangerous when it flatters the founder into confusing generated complexity with progress.
The old bottleneck was access to builders.
The new bottleneck is knowing what is worth building.
So start where the evidence is strongest. Start with a workflow you can see. A problem you have touched. An output you can judge. A failure you can detect. A scope small enough that you cannot hide inside it.
Do not build the platform first.
Build the first useful system.
Then make it prove itself.