Articles / Vibe Coding Reddit: The Code That Only Looks Finished
vibe coding
Vibe Coding Reddit: The Code That Only Looks Finished
Finn ·
Reddit is not split into believers and skeptics about vibe coding. Across the eight discussion threads Google ranked for this query in September 2026, the reports that failed and the reports that worked describe the same defect: generated code that runs, looks finished, and does not do what it claims. The check that catches it is to remove what the feature depends on and confirm it breaks.
Remove the dependency, then watch the feature fail
Name the mechanism the feature claims to use: a database, an external API, a sign-in provider, a cache, a state machine. Take it away. Unset the environment variable, point the host at a dead port, log out, delete the record. Run the feature again and read the output. It passes when it breaks and the error names the missing thing. It fails when it still shows you data. If the fallback turns out to be deliberate, the check has still told you something true: the feature is not reaching the dependency, and what you do about that is a product decision.
I reduced the pattern to one file and ran it on September 9, 2026. It reproduces what a commenter described in r/PinoyProgrammer: code that cannot reach the datastore and quietly serves literals instead. The plans below are invented for the demonstration.
async function readFromDatabase() {
const url = process.env.DATABASE_URL;
if (!url) throw new Error("DATABASE_URL is not set");
const res = await fetch(url);
return res.json();
}
export async function getPlans() {
try {
return await readFromDatabase();
} catch {
// the "helpful" fallback that keeps the page rendering
return [{ name: "Starter", price: 19 }, { name: "Pro", price: 49 }];
}
}
Two runs, one output:
$ DATABASE_URL="http://127.0.0.1:9/plans" node plans.mjs
[{"name":"Starter","price":19},{"name":"Pro","price":49}]
$ node plans.mjs # variable unset, no database anywhere
[{"name":"Starter","price":19},{"name":"Pro","price":49}]
Both runs print two plans and there is no database behind either one. Rendered in a page, that is a correct-looking pricing table with nothing underneath. Remove the fallback and the second command stops on DATABASE_URL is not set, which is the answer you were looking for. The fallback that makes a demo look good is the thing hiding the missing mechanism.
The test suite the agent writes for you also passes
A standard reply in these threads is to make the model generate tests and require them to pass. u/YellowBeaverFever, in r/ProgrammerTIL on November 23, 2025: "It's still on you to verify every single line of code. And you better have it generate a suite of unit tests that all pass."
The suite is worth having and it does not catch this failure. Written against the same code, a test asserts the shape of the answer, never its origin:
const plans = await getPlans();
if (!Array.isArray(plans) || plans.length === 0) throw new Error("no plans");
if (typeof plans[0].price !== "number") throw new Error("bad shape");
Run with no database configured at all, that file printed PASS: getPlans returns 2 plans. A green suite over zero data. The suite earns its keep when one test asserts the dependency: write a value to a store you control, read it back, and let the test fail when the connection is gone.
A state machine that is a global variable and a database read that is a literal array are the same bug.
Two reports, one signature
u/simoncpu described the pattern for databases in r/PinoyProgrammer on November 15, 2025: the model "will sometimes cheat by hard coding JSON data instead of telling you it doesn't know how to handle the DB", so a beginner "might be impressed that the LLM produced working code when it's actually just hard coded JSON exposed on the frontend".
u/lpshred hit it in architecture. The r/gamedev post-mortem of April 23, 2026 records forty hours over two months on a Godot metroidvania, and the moment its author asked the agent for an adversarial review of its own refactor: "The state machine was basically a global variable the player script would check. None of the logic or functionality made it into the state machine. It was all still in the player script."
A state machine that is a global variable and a database read that is a literal array are the same bug. The name was delivered, the mechanism was not. Running the feature does not expose it, because it runs. Skimming the diff rarely does either, because the code looks like the thing it is named after. Taking away what the name implies exposes it immediately.
What these threads actually disagree about
Almost nobody here argues that models cannot write code. The argument is about the size of the unit you hand over.
The reports that work name a bounded one. u/simoncpu again: "It works surprisingly well if you do it at the function level." u/kaiken1987, in r/ProgrammerTIL, keeps it "under 20 lines I can easily read it and understand it to tell that it's junk". u/abs1337, explicit that the result "wasn't fully vibe coded", shipped an internal app with Claude Code by giving each feature "a fully reviewed .md file with feature specs" and never letting it auto-accept edits.
The reports that fail name an unbounded one. u/wjd1991, a fifteen-year engineer building a game outside their domain, wrote in r/webdev on December 26, 2025 that "getting the most basic version of a product ready was fine, but as soon as the logic became even mildly complex it totally went to shit". u/lpshred, after building a pipeline of MCP servers, agent personas and milestones around the problem, concluded that "the agents can't handle more than 2-3 scripts at a time".
Twenty lines and three scripts are rules two people reached in their own stacks, not measured limits, and another model or codebase moves them. The shape of the rule survives the move: the right unit is however much you can falsify in one sitting. If you cannot say what would prove the feature is faking it, the unit is too big whatever its line count.
Where to read, and where the answers are not
r/vibecoding is the first result Google returns here. On September 9, 2026, its top-of-month feed gave fifty entries, and forty-six of them were link or media posts rather than text: memes, screenshots, showcases. That community is entertaining, and it is not where the debugging knowledge sits.
What changes a decision is in the threads where somebody is annoyed enough to be specific: r/webdev, r/programming, r/gamedev, r/ProgrammerTIL. Filter on one question. Does the post name the stack, the task, and the step where it broke? The r/gamedev post-mortem names Godot, GDScript, Replit, Cursor, Continue, Cline and the exact refactor that exposed the shortcut. A screenshot of a working page names nothing, which is the reading error covered on the review side in Base44 reviews: the star rating is a timestamp, not a verdict.
One note on this reading: I pulled each thread's public feed that same day, up to sixty entries per thread. Those feeds are not ordered by score, so this is a sample of what the threads contain, not a measurement of majority opinion.
Before the prototype turns into the product
u/Sharlinator, in r/programming on February 6, 2026: "Unfortunately, nothing is as permanent as a quick prototype." The demo that passed on hardcoded plans becomes the pricing page, and nobody goes back to remove the fallback. So run the dependency check on every feature touching money, accounts or customer records before anyone else sees it, then again after each refactor, since the shortcut in the post-mortem arrived through a refactor that appeared to work. Keep the code where you can read a whole diff, the argument in Lovable alternatives: start with the repo you already own. Vetting the platform underneath is a separate job with its own list, in Is Base44 legit? The 7 checks before you pay.
FAQ
Does the check work on a frontend-only feature? Yes, with a different lever. Log out, clear local storage, or block the request in your browser's network tab, then reload. If the list still renders, it is baked into the bundle.
Is a fallback ever the right answer? Yes, when it is a deliberate product decision the interface admits: a cached copy labelled as stale, a documented empty state, a queued write. The defect is the silent substitution presenting invented records as real ones.
Can I build a product this way without knowing the language? The clearest answer here is the one u/lpshred reached after building an elaborate agent pipeline to avoid the question: "You can't use AI to make up for not knowing GDScript or Godot." One person's outcome on one stack, worth weighing before you commit months to the same bet.
Did this article help?
Get the best articles, carefully selected to save you time.
OpenClaw and Hermes Agent are both MIT-licensed AI agents you host yourself, and their own documentation disagrees about where the safety boundary sits. OpenClaw puts it at the gateway: authenticate to it and you are trusted with everything it reaches. Hermes puts it around the command, inside a container. Pick by which of those you can live with.
Yes. The terms of service on base44.com name Wix.com Ltd. as the company you are contracting with, and the footer of the pricing page carries the same copyright: Base44 has belonged to Wix since June 2025. Legitimacy is settled. Reversibility is not, and that is the check worth running before you enter a card. Here it is in seven steps.
A pivot is often just the polite word we use with investors when the first company is dead and we have decided to build another one. And that is fine. Not because failure is noble, but because luck needs exposure: every market you enter, every product you ship and every channel you test is one more surface where something unexpected can land.
A bad news email subject line should identify the affected service, order or request. For an operational change, include the change and date: "Your Pro plan rises to $29/month at your 12 November renewal". For a sensitive personal decision, a neutral subject naming the request can be more appropriate. Put the explanation and next steps in the body.
Cold email agencies sell three different products under one name: a lead generation retainer where they own the list and the sending, an infrastructure package that rents you domains and warmed mailboxes, and a done with you sprint that sets up your stack and leaves. The pay structure tells you which one you are buying, and the guaranteed meeting count is the one to refuse.

ReadyToPost
Your AI community manager: it writes your posts, answers comments and DMs, tracks results. You approve, that's all.

Mira Ceti
What if you truly felt at home? An interior-architecture studio that rethinks apartments, with AI as backup.
The essentials, by email.
What works, what does not, what I would do differently. Sent when I have something useful to say.