{
    "archive_path": "archive/1769963772.584645",
    "base_url": "atmoio.substack.com/p/after-two-years-of-vibecoding-im",
    "basename": "after-two-years-of-vibecoding-im",
    "bookmarked_date": "2026-02-01 16:36",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/atmoio.substack.com/p/after-two-years-of-vibecoding-im",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=atmoio.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": null
    },
    "domain": "atmoio.substack.com",
    "downloaded_at": "2026-02-01T16:36:18.786904+00:00",
    "downloaded_datestr": "2026-02-01 16:36",
    "extension": "",
    "hash": "A8R94MZK8X17WFXC6ESM",
    "history": {
        "archive_org": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://web.archive.org/save/https://atmoio.substack.com/p/after-two-years-of-vibecoding-im"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2026-02-01T16:36:51.174038+00:00",
                "index_texts": null,
                "output": "ArchiveError: Failed to find \"content-location\" URL header in Archive.org response.",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:49.614310+00:00",
                "status": "failed"
            }
        ],
        "dom": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--proxy-server=socks5://tor-socks-proxy:9150",
                    "--disable-features=DarkMode",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--disable-sync",
                    "--window-size=1440,2000",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--user-data-dir=/data/personas/Default/chrome_profile",
                    "--profile-directory=Default",
                    "--dump-dom",
                    "https://atmoio.substack.com/p/after-two-years-of-vibecoding-im"
                ],
                "cmd_version": "131.0.6778",
                "end_ts": "2026-02-01T16:36:38.321569+00:00",
                "index_texts": null,
                "output": "output.html",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:23.295040+00:00",
                "status": "succeeded"
            }
        ],
        "favicon": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--max-time",
                    "60",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://www.google.com/s2/favicons?domain=atmoio.substack.com"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2026-02-01T16:36:22.967690+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:18.823385+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://atmoio.substack.com/p/after-two-years-of-vibecoding-im"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2026-02-01T16:36:23.120042+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:22.990083+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [
            {
                "cmd": [
                    "(internal) archivebox.extractors.htmltotext",
                    "./{singlefile,dom}.html"
                ],
                "cmd_version": "0.8.5rc51",
                "end_ts": "2026-02-01T16:36:44.743781+00:00",
                "index_texts": [
                    "(https://substackcdn.com) After two years of vibecoding, I'm back to writing by hand (https://substackcdn.com/bundle/theme/main.4664b3b7101dc7b31c22.css) (https://fonts.gstatic.com/s/robotoslab/v36/BngMUXZYTXPIvIBgJJSb6ufN5qWr4xCC.woff2) (https://substackcdn.com/bundle/static/css/97276.571613c3.css) (https://substackcdn.com/bundle/static/css/56442.4e098ec2.css) (https://substackcdn.com/bundle/static/css/20852.9cd7f82f.css) (https://substackcdn.com/bundle/static/css/88577.8d59a919.css) (https://substackcdn.com/bundle/static/css/56265.fe848d77.css) (https://substackcdn.com/bundle/static/css/71385.bded94a0.css) (https://substackcdn.com/bundle/static/css/41203.79811c0b.css) (https://substackcdn.com/bundle/static/css/96998.600b6fbf.css) (https://substackcdn.com/bundle/static/css/63601.6f1e1281.css) (https://substackcdn.com/bundle/static/css/7424.f1c74731.css) (https://substackcdn.com/bundle/static/css/93278.4c47f367.css) (https://substackcdn.com/bundle/static/css/main.aba729d8.css) (https://substackcdn.com/bundle/static/css/7424.f1c74731.css) (https://substackcdn.com/bundle/static/css/96998.600b6fbf.css) (https://substackcdn.com/bundle/static/css/41203.79811c0b.css) (https://substackcdn.com/bundle/static/css/71385.bded94a0.css) (https://substackcdn.com/bundle/static/css/56265.fe848d77.css) (https://substackcdn.com/bundle/static/css/88577.8d59a919.css) (https://substackcdn.com/bundle/static/css/56442.4e098ec2.css) (https://substackcdn.com/bundle/static/css/86379.813be60f.css) (https://substackcdn.com/bundle/static/css/63601.6f1e1281.css) (https://substackcdn.com/bundle/static/css/93278.4c47f367.css) (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im) (https://substackcdn.com/image/fetch/$s_!VIrF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Ffavicon.ico) (https://substackcdn.com/image/fetch/$s_!eZvL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Ffavicon-16x16.png) (https://substackcdn.com/image/fetch/$s_!FqpN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Ffavicon-32x32.png) (https://substackcdn.com/image/fetch/$s_!tNDz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Ffavicon-48x48.png) (https://substackcdn.com/image/fetch/$s_!D18d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-57x57.png) (https://substackcdn.com/image/fetch/$s_!K7ii!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-60x60.png) (https://substackcdn.com/image/fetch/$s_!liOF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-72x72.png) (https://substackcdn.com/image/fetch/$s_!ITrq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-76x76.png) (https://substackcdn.com/image/fetch/$s_!VBKv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-114x114.png) (https://substackcdn.com/image/fetch/$s_!34eE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-120x120.png) (https://substackcdn.com/image/fetch/$s_!IT3T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-144x144.png) (https://substackcdn.com/image/fetch/$s_!Z79K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-152x152.png) (https://substackcdn.com/image/fetch/$s_!bDSo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-167x167.png) (https://substackcdn.com/image/fetch/$s_!k68B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-180x180.png) (https://substackcdn.com/image/fetch/$s_!a8s7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d87515-52be-4d6d-b045-85a860f4175f%2Fapple-touch-icon-1024x1024.png) (/feed) (Mo Bitar) (https://substackcdn.com/bundle/theme/main.4664b3b7101dc7b31c22.css) (https://substackcdn.com/bundle/static/css/async/18027.83b1a8e5.css) (https://substackcdn.com/bundle/static/css/async/7047.1b6d4a88.css) (https://substackcdn.com/bundle/static/css/async/58911.2028d23f.css) (https://substackcdn.com/bundle/static/css/async/33357.8db3c09e.css)   (/) (Mo Bitar)      (/) Mo Bitar              Subscribe Sign in         (Close)     (User) (User's avatar)     Discover more from Mo Bitar Passionate about software. Working on Shape, a radically simple workspace for teams: https://shape.work. Also blogging at https://mo.io  (Enter your email...)  Subscribe  By subscribing, I agree to Substack's (https://substack.com/tos) Terms of Use , and acknowledge its (https://substack.com/ccpa#personal-data-collected) Information Collection Notice and (https://substack.com/privacy) Privacy Policy .      Already have an account? Sign in     After two years of vibecoding, I'm back to writing by hand (https://substack.com/@atmoio) (Mo) (Mo's avatar)         (https://substack.com/@atmoio) Mo   Jan 26, 2026          96                  55      7             Share        Most people\u2019s journey with AI coding starts the same: you give it a simple task. You\u2019re impressed. So you give it a large task. You\u2019re even more impressed. You open X and draft up a rant on job displacement. If you\u2019ve persisted past this point: congratulations, you understand AI coding better than 99% of people. (https://substackcdn.com/image/fetch/$s_!Mwtn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbc2a288-45bf-4d42-b61d-07f5678d260f_1536x1024.png) () ()                   Serious engineers using AI to do real work and not just weekend projects largely also follow a predictable development arc. Still amazed at the big task you gave it, you wonder if you can keep giving it bigger and bigger tasks. Maybe even that haunting refactor no one wants to take on? But here\u2019s where the curtain starts to crinkle. On the one hand, you\u2019re amazed at how well it seems to understand you. On the other hand, it makes frustrating errors and decisions that clearly go against the shared understanding you\u2019ve developed. You quickly learn that being angry at the model serves no purpose, so you begin to internalize any unsatisfactory output. \u201cIt\u2019s me. My prompt sucked. It was under-specified.\u201d  \u201cIf I can specify it, it can build it. The sky\u2019s the limit,\u201d you think. So you open Obsidian and begin drafting beefy spec docs that describe the feature in your head with impressive detail. Maybe you\u2019ve put together a full page of a prompt, and spent half an hour doing so. But you find that spec-driven development doesn\u2019t work either. In real life, design docs and specs are  living  documents that evolve in a volatile manner through discovery and implementation. Imagine if in a real company you wrote a design doc in 1 hour for a complex architecture, handed it off to a mid-level engineer (and told him not to discuss the doc with anyone), and took off on vacation.  Not only does an agent not have the ability to evolve a specification over a multi-week period as it builds out its lower components, it also makes decisions upfront that it later doesn\u2019t deviate from. And most agents simply surrender once they feel the problem and solution has gotten away from them (though this rarely happens anymore, since agents will just force themselves through the walls of the maze.) What\u2019s worse is code that agents write looks plausible and impressive while it\u2019s being written and presented to you. It even looks good in pull requests (as both you and the agent are well trained in what a \u201cgood\u201d pull request looks like). It\u2019s not until I opened up the full codebase and read its latest state cover to cover that I began to see what we theorized and hoped was only a diminishing artifact of earlier models: slop. It was pure, unadulterated slop. I was bewildered. Had I not reviewed every line of code before admitting it? Where did all this...gunk..come from? In retrospect, it made sense. Agents write units of changes that look good in isolation. They are consistent with themselves and your prompt. But respect for the whole, there is not. Respect for structural integrity there is not. Respect even for neighboring patterns there was not. The AI had simply told me a good story. Like vibewriting a novel, the agent showed me a good couple paragraphs that sure enough made sense and were structurally and syntactically correct. Hell, it even picked up on the idiosyncrasies of the various characters. But for whatever reason, when you read the whole chapter, it\u2019s a mess. It makes no sense in the overall context of the book and the preceding and proceeding chapters. After reading months of cumulative highly-specified agentic code, I said to myself: I\u2019m not shipping this shit. I\u2019m not gonna charge users for this. And I\u2019m not going to promise users to protect their data with this. I\u2019m not going to lie to my users with this. So I\u2019m back to writing by hand for most things. Amazingly, I\u2019m faster, more accurate, more creative, more productive, and more efficient than AI, when you price  everything  in, and not just code tokens per hour.   You can follow me on X  (https://x.com/atmoio) @atmoio , where I post a few times a week about agentic coding.  You can watch the video counterpart to this essay on YouTube:     Thanks for reading! Subscribe for free to receive new posts and support my work.  (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im) () (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im) (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im) () (subscribe-widget-preamble) (Type your email...)   Subscribe              (https://substack.com/profile/192589080-martin-kedmenec) (Martin Kedmenec) (Martin Kedmenec's avatar)      (https://substack.com/profile/227477219-ryan-machado) (Ryan Machado) (Ryan Machado's avatar)      (https://substack.com/profile/107403903-miroslav-valcicak) (Miroslav Valcicak) (Miroslav Valcicak's avatar)      (https://substack.com/profile/289382029-abolfazl) (Abolfazl) (Abolfazl's avatar)      (https://substack.com/profile/2533945-hugo-dias) (Hugo Dias) (Hugo Dias's avatar)        96 Likes \u2219(https://substack.com/note/p-185837386/restacks?utm_source=substack&utm_content=facepile-restacks) 7 Restacks           96                  55      7             Share           Discussion about this post Comments Restacks            (User) (User's avatar)    (Write a comment...)        (https://substack.com/profile/336851952-verdi?utm_source=comment) (Verdi) (Verdi's avatar)       (https://substack.com/profile/336851952-verdi?utm_source=substack-feed-item) Verdi      (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im/comment/205509459) (Jan 26, 2026, 6:55 PM) 6d  (Jan 26, 2026, 7:00 PM) Edited        Liked by Mo           I agree and I have come to a similar realization in the past few months. The value of the time gained on throwing some tasks at the LLM can't be ignored and I will still use it but I've gone from being \"100% all-in vibecoding\" to a much more measured stance. Maybe < 40% use. For these reasons:  - You cannot get away from the tech debt models produce  - Over time, these subtle issues compound into a codebase the LLM itself finds difficult to navigate and work in  - Simultaneously, you, the dev has lost the inherent and deep insight connection into the code where you *cannot* troubleshoot without using AI and it's a self-reinforcing loop.  - You, the dev, become 0% productive when in the train or airplane because you forget how to write some algo or syntax and you lack the codebase's mental model              Like (14)      Reply        Share        (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im/comment/205509459) 3 replies by Mo and others     (https://substack.com/profile/21894706-gregory-forche?utm_source=comment) (Gregory Forch\u00e9) (Gregory Forch\u00e9's avatar)       (https://substack.com/profile/21894706-gregory-forche?utm_source=substack-feed-item) Gregory Forch\u00e9           (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im/comment/205523129) (Jan 26, 2026, 7:20 PM) 6d         Liked by Mo           Great post!  Couple of comments:  --  the idea that 'all you need to do is specify' has been wrongly internalized by many.   a) there's another name for it: it's called \"waterfall\".  we know what happened there.  b) the entire structure of interaction is plan-then-execute.  This is NOT how software development actually works (though, people can be excused for not being conscious of how they had been doing it before AI).  There is a huge amount of improvisational work in a larger unfolding situation.  The linear flow from plan to execution is frequently incompatible with any nontrivial development effort   c) software development - like anything else that is 'work' as we have come to understand it - is not merely a collection of tasks that neatly decompose just because we want them to.  Basically, I see you are observing these things in your work.  Check out my substack if you are interested as I am trying to share out some compatible perspectives - would love some eyeballs / feedback.               Like (11)      Reply        Share        (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im/comment/205523129) 2 replies by Mo and others     (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im/comments) 53 more comments...     Top Latest Discussions              (https://atmoio.substack.com/p/there-is-no-skill-in-ai-coding) There is no skill in AI coding  (https://atmoio.substack.com/p/there-is-no-skill-in-ai-coding) Andrej Karpathy posted one of the most sober takes on agentic coding in recent times.  Jan 28 \u2022 (https://substack.com/@atmoio) Mo         5                  5      2                    ()       (https://atmoio.substack.com/p/i-hope-you-hold-on-to-your-humanity) I hope you hold on to your humanity  (https://atmoio.substack.com/p/i-hope-you-hold-on-to-your-humanity) And resist corporate AI narratives  1 hr ago \u2022 (https://substack.com/@atmoio) Mo         1                                          ()              Ready for more? (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im) () (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im) (https://atmoio.substack.com/p/after-two-years-of-vibecoding-im) () (subscribe_footer) (Type your email...)   Subscribe              \u00a9 2026 Mo \u00b7  (https://substack.com/privacy) Privacy \u2219  (https://substack.com/tos) Terms \u2219  (https://substack.com/ccpa#personal-data-collected) Collection notice  (https://substack.com/signup?utm_source=substack&utm_medium=web&utm_content=footer)       Start your Substack (https://substack.com/app/app-store-redirect?utm_campaign=app-marketing&utm_content=web-footer-button) Get the app  (https://substack.com) Substack is the home for great culture    Cookie Policy We use cookies to improve your experience, for analytics, and for marketing. You can accept, reject, or manage your preferences. See our (https://substack.com/tos) privacy policy . Manage Reject Accept                               This site requires JavaScript to run correctly. Please (https://enable-javascript.com/) turn on JavaScript or unblock scripts      "
                ],
                "output": "htmltotext.txt",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:44.688693+00:00",
                "status": "succeeded"
            }
        ],
        "media": [
            {
                "cmd": [
                    "/usr/local/bin/yt-dlp",
                    "--restrict-filenames",
                    "--trim-filenames",
                    "128",
                    "--write-description",
                    "--write-info-json",
                    "--write-annotations",
                    "--write-thumbnail",
                    "--no-call-home",
                    "--write-sub",
                    "--write-auto-subs",
                    "--convert-subs=srt",
                    "--yes-playlist",
                    "--continue",
                    "--no-abort-on-error",
                    "--ignore-errors",
                    "--geo-bypass",
                    "--add-metadata",
                    "--format=(bv*+ba/b)[filesize<=750m][filesize_approx<=?750m]/(bv*+ba/b)",
                    "--skip-download",
                    "--cache-dir=/data/yt-dlp-cache/",
                    "--cookies=/data/yt-dlp-cache/cookies.txt",
                    "--proxy=socks5://tor-socks-proxy:9150",
                    "--no-playlist",
                    "https://atmoio.substack.com/p/after-two-years-of-vibecoding-im"
                ],
                "cmd_version": "2024.10.7",
                "end_ts": "2026-02-01T16:36:49.546506+00:00",
                "index_texts": [],
                "output": "ArchiveError: Failed to save media",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:44.990660+00:00",
                "status": "failed"
            }
        ],
        "mercury": [
            {
                "cmd": [
                    "/home/archivebox/.npm/bin/postlight-parser",
                    "https://atmoio.substack.com/p/after-two-years-of-vibecoding-im"
                ],
                "cmd_version": "2.2.3",
                "end_ts": "2026-02-01T16:36:44.668351+00:00",
                "index_texts": null,
                "output": "mercury/",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:41.691439+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/home/archivebox/.npm/bin/readability-extractor",
                    "/tmp/tmpg1rry6bn",
                    "https://atmoio.substack.com/p/after-two-years-of-vibecoding-im"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-02-01T16:36:41.485828+00:00",
                "index_texts": [
                    "Most people\u2019s journey with AI coding starts the same: you give it a simple task. You\u2019re impressed. So you give it a large task. You\u2019re even more impressed.You open X and draft up a rant on job displacement.If you\u2019ve persisted past this point: congratulations, you understand AI coding better than 99% of people.Serious engineers using AI to do real work and not just weekend projects largely also follow a predictable development arc.Still amazed at the big task you gave it, you wonder if you can keep giving it bigger and bigger tasks. Maybe even that haunting refactor no one wants to take on?But here\u2019s where the curtain starts to crinkle.On the one hand, you\u2019re amazed at how well it seems to understand you. On the other hand, it makes frustrating errors and decisions that clearly go against the shared understanding you\u2019ve developed.You quickly learn that being angry at the model serves no purpose, so you begin to internalize any unsatisfactory output.\u201cIt\u2019s me. My prompt sucked. It was under-specified.\u201d  \u201cIf I can specify it, it can build it. The sky\u2019s the limit,\u201d you think.So you open Obsidian and begin drafting beefy spec docs that describe the feature in your head with impressive detail. Maybe you\u2019ve put together a full page of a prompt, and spent half an hour doing so.But you find that spec-driven development doesn\u2019t work either. In real life, design docs and specs are living documents that evolve in a volatile manner through discovery and implementation. Imagine if in a real company you wrote a design doc in 1 hour for a complex architecture, handed it off to a mid-level engineer (and told him not to discuss the doc with anyone), and took off on vacation.Not only does an agent not have the ability to evolve a specification over a multi-week period as it builds out its lower components, it also makes decisions upfront that it later doesn\u2019t deviate from. And most agents simply surrender once they feel the problem and solution has gotten away from them (though this rarely happens anymore, since agents will just force themselves through the walls of the maze.)What\u2019s worse is code that agents write looks plausible and impressive while it\u2019s being written and presented to you. It even looks good in pull requests (as both you and the agent are well trained in what a \u201cgood\u201d pull request looks like).It\u2019s not until I opened up the full codebase and read its latest state cover to cover that I began to see what we theorized and hoped was only a diminishing artifact of earlier models: slop.It was pure, unadulterated slop. I was bewildered. Had I not reviewed every line of code before admitting it? Where did all this...gunk..come from?In retrospect, it made sense. Agents write units of changes that look good in isolation. They are consistent with themselves and your prompt. But respect for the whole, there is not. Respect for structural integrity there is not. Respect even for neighboring patterns there was not.The AI had simply told me a good story. Like vibewriting a novel, the agent showed me a good couple paragraphs that sure enough made sense and were structurally and syntactically correct. Hell, it even picked up on the idiosyncrasies of the various characters. But for whatever reason, when you read the whole chapter, it\u2019s a mess. It makes no sense in the overall context of the book and the preceding and proceeding chapters.After reading months of cumulative highly-specified agentic code, I said to myself: I\u2019m not shipping this shit. I\u2019m not gonna charge users for this. And I\u2019m not going to promise users to protect their data with this.I\u2019m not going to lie to my users with this.So I\u2019m back to writing by hand for most things. Amazingly, I\u2019m faster, more accurate, more creative, more productive, and more efficient than AI, when you price everything in, and not just code tokens per hour.You can follow me on X @atmoio, where I post a few times a week about agentic coding.You can watch the video counterpart to this essay on YouTube:"
                ],
                "output": "readability/",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:38.625629+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://atmoio.substack.com/p/after-two-years-of-vibecoding-im"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2026-02-01T16:36:38.538586+00:00",
                "index_texts": null,
                "output": "After two years of vibecoding, I'm back to writing by hand",
                "pwd": "/data/archive/1769963772.584645",
                "schema": "ArchiveResult",
                "start_ts": "2026-02-01T16:36:38.481316+00:00",
                "status": "succeeded"
            }
        ],
        "wget": []
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": "ArchiveError: Failed to find \"content-location\" URL header in Archive.org response.",
        "dom": "output.html",
        "favicon": "favicon.ico",
        "git": null,
        "media": "ArchiveError: Failed to save media",
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "After two years of vibecoding, I'm back to writing by hand",
        "warc": null,
        "wget": null
    },
    "link_dir": "/data/archive/1769963772.584645",
    "newest_archive_date": "2026-02-01T16:36:49.614310+00:00",
    "num_failures": 2,
    "num_outputs": 7,
    "oldest_archive_date": "2026-02-01T16:36:18.823385+00:00",
    "path": "/p/after-two-years-of-vibecoding-im",
    "schema": "Link",
    "scheme": "https",
    "snapshot_abid": "snp_01KGD0ZPQ1DB61F98A0154EJAS",
    "snapshot_id": "796e95a6-ef5f-48e2-9205-b0310a474959",
    "sources": [
        "/data/sources/1769963770-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1769963772.584645",
    "title": "After two years of vibecoding, I'm back to writing by hand",
    "url": "https://atmoio.substack.com/p/after-two-years-of-vibecoding-im"
}