{
    "archive_path": "archive/1790978741.21681",
    "base_url": "ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting",
    "basename": "the-fallacy-of-vibe-coding-why-prompting",
    "bookmarked_date": "2026-10-02 22:05",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=ninchiai.substack.com",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting.html"
    },
    "domain": "ninchiai.substack.com",
    "extension": "",
    "hash": "186MSB1EMPZ93YMWHDVW",
    "history": {
        "archive_org": [],
        "dom": [],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=ninchiai.substack.com"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-02T22:07:11.096020+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1790978741.21681",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-02T22:07:10.490770+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-02T22:07:11.729857+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1790978741.21681",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-02T22:07:11.104364+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [],
        "media": [],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-10-02T22:07:20.907185+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1790978741.21681",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-02T22:07:17.505594+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmpzk27d465",
                    "https://ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-10-02T22:07:17.495678+00:00",
                "index_texts": [
                    "I like vibe coding. I want to say that up front because this is going to read like a complaint, and it isn\u2019t one. Describing what you want, watching an agent build it, and having something working an hour later is a real pleasure. For a solo developer or a two-person team it feels like finally having the staff you could never afford.The problem is what that hour does to your relationship with the code.When you write a system yourself, even badly, you come out the other side with a map. You know where the state lives, which function is doing too much, where the ugly workaround is and why it\u2019s there. When an agent writes it for you, you come out with a product and no map. For a while that doesn\u2019t matter. The product works. Then a bug shows up in production that the agent can\u2019t fix on the first try, or a customer asks for something that cuts across the architecture, and you discover you aren\u2019t the owner of this system. You\u2019re a spectator to a black box that happens to live in your repo.I\u2019ve watched this happen to people who are good engineers. It isn\u2019t a competence problem. It\u2019s a side effect of the workflow, and it has now been measured.Back in January, Anthropic published a randomized controlled trial on exactly this. Fifty-two developers, most of them junior, were asked to build two features with an unfamiliar async library, half with AI assistance and half without. Afterwards everyone took a quiz on the concepts they had just used. The AI group scored 17 percent lower, roughly two letter grades, and the widest gap was on debugging and tracing execution flow. They also weren\u2019t meaningfully faster. The people who delegated the whole task to the model averaged under 40 percent.The detail that matters most is what separated the AI users who did fine from the ones who didn\u2019t. The high scorers used the model to generate code and then kept asking it questions: why this approach, what happens if this fails, where does this value come from. They were still prompting. They just refused to stop at the output.That lines up with what Microsoft Research and CMU found in a survey of knowledge workers the year before: the more confidence people placed in the AI\u2019s output, the less critical thinking they reported doing. Trust the tool, stop checking the tool. Nobody decides to do this. It\u2019s the path of least resistance, and the tool is designed to be a very smooth path.What\u2019s being lost here isn\u2019t a specific stack. It\u2019s the portable stuff. The instinct for where a bug probably is before you open the file. The ability to read a stack trace and have a theory. Those are the skills that transfer between jobs and languages, and they\u2019re the ones that get you from junior to senior. They are also the first thing to go when every error message gets pasted straight into a chat window.So what do you do, short of refusing to use the tools, which is both impractical and a bad idea?The honest answer is that you have to make understanding a deliberate step rather than something you hope happens along the way. The Anthropic data says the step doesn\u2019t have to be expensive. Generation followed by a handful of real questions got people to 86 percent. The problem is that under deadline pressure the step is the first thing you skip, and there\u2019s no record of whether you skipped it.That\u2019s the gap we built Ninchi for. Ninchi doesn\u2019t verify AI-generated code. It verifies that a human understood the AI-generated code. On each code submission it asks the developer a few questions about what they\u2019re shipping, the kind a good senior would ask in review, and keeps an inspectable record of the answers. If you can explain the change, the record shows it. If you can\u2019t, you find out before production does.For a solo developer that record is mostly for you. It\u2019s the forcing function that turns \u201cthe agent handled it\u201d into \u201cI know what the agent did.\u201d For a small team it\u2019s the thing that lets you keep moving fast with agents without quietly becoming a group of people who can\u2019t maintain their own system.Vibe coding is a fine way to build. It\u2019s a terrible way to own. The difference is whether a human ever closes the loop, and that is still a choice you get to make.Discussion about this postReady for more?"
                ],
                "output": "readability",
                "pwd": "/data/archive/1790978741.21681",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-02T22:07:15.690698+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-02T22:07:15.683252+00:00",
                "index_texts": null,
                "output": "The Fallacy of Vibe Coding: Why Prompting Isn\u2019t Owning",
                "pwd": "/data/archive/1790978741.21681",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-02T22:07:15.663269+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--reject=js,mjs,woff,woff2,ttf,otf,eot,mp4,m4v,mov,webm,ogv,mkv,avi,flv",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "--timestamping",
                    "https://ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-10-02T22:07:15.650544+00:00",
                "index_texts": null,
                "output": "ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting.html",
                "pwd": "/data/archive/1790978741.21681",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-02T22:07:11.747508+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": null,
        "dom": null,
        "favicon": "favicon.ico",
        "git": null,
        "media": null,
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "The Fallacy of Vibe Coding: Why Prompting Isn\u2019t Owning",
        "warc": null,
        "wget": "ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting.html"
    },
    "link_dir": "/data/archive/1790978741.21681",
    "newest_archive_date": "2026-10-02T22:07:17.505594+00:00",
    "num_failures": 0,
    "num_outputs": 6,
    "oldest_archive_date": "2026-10-02T22:07:10.490770+00:00",
    "path": "/p/the-fallacy-of-vibe-coding-why-prompting",
    "schema": "Link",
    "scheme": "https",
    "snapshot_id": "567912cd-b5c8-4559-aa7b-af1877ed2015",
    "sources": [
        "/data/sources/1790978741-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1790978741.21681",
    "title": "The Fallacy of Vibe Coding: Why Prompting Isn\u2019t Owning",
    "updated": "2026-10-02T22:07:10.490098+00:00",
    "updated_date": "2026-10-02 22:07",
    "url": "https://ninchiai.substack.com/p/the-fallacy-of-vibe-coding-why-prompting"
}