{"id":227669,"date":"2026-06-02T06:19:56","date_gmt":"2026-06-02T06:19:56","guid":{"rendered":"https:\/\/www.9senses.ai\/ns-lab-the-coding-rollercoaster\/"},"modified":"2026-07-31T06:52:30","modified_gmt":"2026-07-31T06:52:30","slug":"the-coding-rollercoaster","status":"publish","type":"post","link":"https:\/\/www.9senses.ai\/de\/the-coding-rollercoaster\/","title":{"rendered":"The Coding Rollercoaster"},"content":{"rendered":"<p>Recently, I needed to convert an Excel-based tool into something more robust, and I decided to build a React.js application with the help of Claude Opus. Within less than four hours, I had a flawlessly working web application, just based on Claude&#8217;s analysis of the Excel structure and content. I was obviously super-happy, praising a tool that helped me do something that would have cost me at least $10,000 if I had hired an offshore developer to build it, not counting the numerous hours of back and forth during debugging I would have spent.<\/p>\n<p>The next two days, however, I spent coaching Claude Opus debugging the positioning of headers and footers in the PDF output of that new tool. I was frustrated and ready to throw in the towel. Had I done it myself or hired a freelancer, it would have taken half an hour at best.<\/p>\n<p>Since I started using AI to develop software, these ups and downs have become an essential part of my life.<\/p>\n<p>What I want to unpack here is why the experience swings so violently between miracle and misery &#8211; because the reasons are structural, not bad luck &#8211; and what actually changes once you stop expecting the tool to behave like a consistent colleague and start treating it like what it is.<\/p>\n<h2>The miracle is real &#8211; and so is the misery<\/h2>\n<p>Let&#8217;s begin with the good half of my story, because dismissing it would be a mistake. The four-hour React build was not a fluke or a toy. AI genuinely collapses the cost of the work most developers find tedious: reading an unfamiliar data structure, scaffolding an application, wiring up boilerplate, translating intent into a first working draft. In that mode it is not a little faster than a human &#8211; it is faster by an order of magnitude, and often cheaper than you can quite believe.<\/p>\n<blockquote class=\"ns-obj ns-obj--quote\"><p>AI gets you 80% to an MVP; the last 20% requires patience, learning deeply or hiring engineers.<\/p><cite class=\"ns-quote-cite\">Addy Osmani, Director Google Cloud AI, 2026<\/cite><\/blockquote>\n<p>What the miracle of quick success quietly trains you to do: it teaches you to trust. And the tedious two-day stretch to fix something seemingly obvious (the size of a logo and its positioning) is not the worst flaw. I remember days where I was inattentive after a good moment and the AI model destroyed more than it fixed, by taking shortcuts, covering up mistakes, and creating bloated code with patches over patches. The effect: I reverted every change made that day and grudgingly accepted that a lot of work was wasted.<\/p>\n<p>In all these cases the results were presented with conviction, and only my scrutiny stopped this from bleeding into the codebase. &#8220;Now I have the full picture&#8221; is only one of the famous misleading sentences an AI model uses, suggesting confidence when there is none.<\/p>\n<p>Here&#8217;s the first thing to internalize: the high and the low are not separate experiences. The high <em>creates<\/em> the conditions for the low. The smoother the early wins, the less you scrutinize &#8211; and the harder the eventual wall hits.<\/p>\n<h2>The key issue: nothing about AI output is stable<\/h2>\n<aside class=\"ns-obj ns-obj--aside ns-obj--right ns-obj--c1 ns-obj--fmt-inverted\" style=\"width:59%\"><div class=\"ns-obj-body\"><h3>AI writing code: <br \/>strengths and weaknesses<\/h3>\n<p>The story in the introduction points straight to where AI fails most when coding &#8211; and it comes down to one thing: how much solid example code it had to learn from.<\/p>\n<p>Think of it as the market for developers. If you want someone to build a straightforward React app, there&#8217;s no shortage of candidates. Post on any freelance platform and you&#8217;ll have a stack of qualified people, with references, within hours. But if you need someone to fix a bug in one particular PDF-generation library, you can search for days &#8211; and you&#8217;ll mostly turn up people who claim they can solve it, and very few who can prove it.<\/p>\n<p>LLMs embody exactly this reality. Point one at a common problem in a common tool, where it has absorbed a vast swath of examples, and it will likely deliver solid code, fast. Push it into a niche, a boundary case, or a thorny debugging session, and the ground falls away. It doesn&#8217;t stop and tell you it&#8217;s out of its depth &#8211; it keeps generating with the same confidence as before, improvising, hallucinating a plausible fix, or quietly patching over the problem to give you what you asked for: something that looks like it works.<\/p>\n<p>That&#8217;s the whole pattern in one line: <a href=\"\/de\/a-confident-confabulator\/\">AI is weakest exactly where there is the least knowledge to draw from<\/a> &#8211; and it never sounds any less sure of itself when it gets there.<\/p><\/div><\/aside>\n<p>To understand the swings, you have to drop the intuition that you are working with a colleague who has a consistent skill level. You are not.<\/p>\n<p>A Large Language Model does not have a fixed competence the way a person does. Each response is generated fresh, shaped by a cascade of probabilistic choices over the context it currently holds. The same model, given the same problem, can land on an elegant solution one session and flail through ten broken attempts the next &#8211; not because it &#8220;knows&#8221; less, but because this particular draw of the deck went differently. The fluency stays constant whether it is on solid ground or improvising; the reliability underneath does not.<\/p>\n<p>AI is most reliable where its training data is densest &#8211; common frameworks, popular libraries, well-trodden patterns. As soon as there is less available knowledge, the output silently shifts from recall to invention. The general React scaffold sits in the dense center of what the model has seen a million times, the PDF formatting bug in the sparse periphery. That is not a coincidence; it is the pattern. The tasks that feel small to you are often the ones sitting exactly where the model is weakest.<\/p>\n<h2>Today is not like any other day<\/h2>\n<figure class=\"ns-obj ns-obj--media ns-obj--right\" style=\"width:40%\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.9senses.ai\/wp-content\/uploads\/2026\/04\/2026_Brett-Jordan_CrypticWriting-1024x768.jpg\" class=\"ns-media-img\" alt=\"Image by Brett Jordan on Unsplash.com\" srcset=\"https:\/\/www.9senses.ai\/wp-content\/uploads\/2026\/04\/2026_Brett-Jordan_CrypticWriting-980x735.jpg 980w, https:\/\/www.9senses.ai\/wp-content\/uploads\/2026\/04\/2026_Brett-Jordan_CrypticWriting-480x360.jpg 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n<p><strong>The model itself is a moving target.<\/strong> You might assume that picking a specific model locks in a known quantity. It does not. Providers run fleets of servers with different hardware and quantization levels, and they silently change routing, default reasoning effort, system prompts, and caching. Between March and April 2026, a wave of developers reported that Claude&#8217;s Sonnet and Opus models had gotten noticeably worse &#8211; one engineering director audited 6,852 of her own sessions and over 234,000 tool calls and showed the model&#8217;s reasoning depth collapsing &#8211; and the provider&#8217;s own postmortem confirmed real causes: a change that lowered the default reasoning effort (later reverted), a session-handling bug that made the model forgetful and repetitive, and a verbosity-trimming prompt tweak that degraded answers. The weights hadn&#8217;t rotted &#8211; the models themselves and the API were confirmed unaffected &#8211; but the experience genuinely degraded, for reasons no user could see. So part of a &#8220;bad day&#8221; may have nothing to do with you and how you prompted the model. It is the machinery around it, shifting under your feet like quicksand.<\/p>\n<p>Under this lens, volatility stops looking like bad luck. It is the expected behavior of a probabilistic system whose reliability is unevenly distributed and whose infrastructure shifts daily.<\/p>\n<h2>The numbers behind AI coding<\/h2>\n<p>The unevenness is measurable. AI is measurably <em>good<\/em> at the routine layer of coding &#8211; and measurably worse than humans at the deep layer. Let&#8217;s start with the good half, because it&#8217;s real. An Apiiro analysis of AI-assisted development by large enterprises found that the tools sharply cut the standard failure modes: simple syntax mistakes dropped by around three-quarters and routine logic bugs by roughly 60%. AI really does reduce the pain.<\/p>\n<p>One layer down, the picture inverts. A few numbers on that:<\/p>\n<p>In Veracode&#8217;s 2025 <em>GenAI Code Security Report<\/em>, which put more than a hundred models through standardized security tasks, <strong>about 45% of the generated code samples introduced a vulnerability from the OWASP Top 10<\/strong> &#8211; the most common, best-documented web flaws there are, things like SQL injection and cross-site scripting. These are not exotic edge cases the model couldn&#8217;t have known about; they are the failures every security course teaches first. The weakness clustered by language, too: Java code failed roughly seven times out of ten.<\/p>\n<p>The second is that this is not improving on its own. When Veracode re-ran the exercise for its March 2026 update, <strong>the pass rate had barely moved &#8211; hovering around 55%<\/strong> even as the same models posted higher and higher scores on coding-skill benchmarks. That gap is the single most important number here: the models kept getting visibly <em>better at coding<\/em> while staying flat on <em>writing safe code<\/em>. Capability and safety are not the same axis, and only one of them was climbing.<\/p>\n<p>The third is what all this accumulates into. A 2026 analysis of AI-authored commits across thousands of public repositories tracked how much unresolved technical debt was surviving in the codebase over time, and found it climbing from a few hundred lingering issues in early 2025 into the <strong>hundreds of thousands within about a year<\/strong>. This is the slow cost, the one you don&#8217;t feel on any single good day: volume generated fast, with the deeper problems left quietly in place.<\/p>\n<p>Underneath all three sits a human number that ties the section to the rest of this piece. By one 2026 industry survey, <strong>58% of developers said they trust AI output without testing it.<\/strong> That is the mechanism by which the findings above actually reach production. The defects are only half the problem; the misplaced confidence is the other half.<\/p>\n<p>Sources: Apiiro enterprise code analysis, 2026 (routine-error reduction); Veracode 2025 GenAI Code Security Report and its March 2026 update (OWASP vulnerability and pass-rate figures); a 2026 analysis of AI-authored commits across public repositories (technical-debt accumulation); 2026 developer survey (trust-without-testing figure). Figures are approximate and methodology varies between studies.<\/p>\n<h2>Three ways of coding with AI<\/h2>\n<p>When developers run into this volatility, we see three responses. Only one of them is sustainable.<\/p>\n<aside class=\"ns-obj ns-obj--aside ns-obj--full ns-obj--c3 ns-obj--split\"><div class=\"ns-obj-body\"><div class=\"ns-obj-col ns-obj--fmt-normal\"><h3>The Believer<\/h3>\n<p>The Believer is seduced by the good days. After enough four-hour miracles, they stop reading the output, accept fixes they don&#8217;t understand, and let AI-generated code flow into the codebase on trust. They ship fast and feel productive &#8211; right up until a confident, plausible, wrong change introduces a defect nobody caught, because nobody was really looking. The Believer mistakes fluency for correctness, and the bill arrives later, in production.<\/p><\/div><div class=\"ns-obj-col ns-obj--fmt-normal\"><h3>The Quitter<\/h3>\n<p>The Quitter is broken by the bad days. After the two-day formatting bug, they conclude the tool is fundamentally unreliable and either abandon it or relegate it to trivial tasks. They are reacting to something real &#8211; the volatility is maddening &#8211; but they over-fit to the outlier. By treating the worst session as the verdict, they walk away from the order-of-magnitude gains that are equally real. They throw out the four-hour miracle to avoid the two-day slog.<\/p><\/div><div class=\"ns-obj-col ns-obj--fmt-normal\"><h3>The Pilot<\/h3>\n<p>The Pilot treats the volatility as information and builds a practice around it. They keep their hand on the controls at all times: reading the code, distrusting fixes that look suspiciously easy, watching for the tell-tale shortcuts &#8211; silenced errors, deleted tests, invented libraries, hardcoded values that fake a passing result. When an agent starts flailing, they don&#8217;t argue it into compliance over twenty messages; they start a fresh session, switch models, or &#8211; crucially &#8211; recognize the task can&#8217;t be done with AI.<\/p><\/div><\/div><\/aside>\n<aside class=\"ns-obj ns-obj--aside ns-obj--right ns-obj--c1 ns-obj--fmt-inverted\" style=\"width:34%\"><div class=\"ns-obj-body\"><h3>How to code better with AI<\/h3>\n<p>A few ground rules for coding successfully using AI models:<\/p>\n<p><strong>Don&#8217;t let a good streak lower your guard.<\/strong> The most dangerous moment is right after a run of flawless output, because that is when you stop reading. Review AI-generated code to the same standard as human code &#8211; the same tests, the same scrutiny &#8211; regardless of how smooth the session has been.<\/p>\n<p><strong>Suspect the easy fix.<\/strong> When a hard problem resolves suspiciously fast, check whether it was actually solved or merely hidden. A bug that &#8220;disappears&#8221; the moment a test is weakened or an exception is swallowed has not been fixed.<\/p>\n<p><strong>Treat the model as a moving target.<\/strong> Pin versions where you can. Keep sessions short and start fresh when quality drops &#8211; a long, polluted context degrades output on its own. Before assuming the failure is yours, glance at the provider&#8217;s status page. Keep a fallback model ready to switch to.<\/p>\n<p><strong>Match the tool to the task.<\/strong> Quality across the leading models has largely converged, so the bigger lever is routing, not loyalty. Send the hard, ambiguous, multi-step work to a frontier model; run everyday traffic on a cheaper daily driver; and lean on an integrated assistant or a terminal agent depending on whether you&#8217;re doing inline edits or large autonomous changes. The cost of integration friction usually dwarfs the model-quality difference for typical work.<\/p>\n<p><strong>Keep human judgment as the final integrating function.<\/strong> The AI can write the code, propose the fix, and explain its reasoning with great fluency. What it cannot reliably tell you is whether the result is actually correct, actually secure, and actually right for your specific case &#8211; especially out in the periphery where your trickiest problems live. That judgment is still, as it has always been, yours.<\/p><\/div><\/aside>\n<p>When I code with AI, I no longer expect a smooth ride, and that single adjustment changed my relationship with these tools more than any prompt technique ever did. The four-hour miracle and the two-day formatting bug are not the good and bad versions of the tool. They are the same tool, behaving exactly as a fluent, probabilistic, inconsistent system behaves &#8211; great in the dense center, and shallow on the edges, and quietly shifting underneath you the whole time.<\/p>\n<p>The developers who thrive with AI are not the ones who found the perfect model or the magic prompt. They are the ones who stopped being surprised by the swing, kept their hands on the controls, and learned to fly the thing on the good and bad days.<\/p>","protected":false},"excerpt":{"rendered":"<p>AI can hand you a $10,000 application in four hours &#8211; and then take two days to fix a problem a junior developer would have solved over lunch. The volatility isn&#8217;t a flaw you can tune away. It&#8217;s the texture of the work, and learning to ride it is the actual skill.<\/p>","protected":false},"author":15,"featured_media":225135,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ns_references":"<h3>Research and Industry Reports<\/h3>\r\n<p><em>Anthropic. (2026, April 23). An update on recent Claude Code quality reports.<\/em><\/p>\r\n<p><em>Apiiro. (2025). Research on security risks in AI-generated code.<\/em><\/p>\r\n<p><em>Veracode. (2025). GenAI Code Security Report.<\/em><\/p>\r\n\r\n<h3>Commentary<\/h3>\r\n<p><em>Laurenzo, S. (2026, March). Public audit of 6,852 Claude Code sessions and over 234,000 tool calls.<\/em><\/p>\r\n<p><em>Osmani, A. (2026, January). The 80% problem in agentic coding. addyosmani.com.<\/em><\/p>","ns_references_title":"References and further reading","footnotes":""},"categories":[47],"tags":[],"class_list":["post-227669","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":{"tag_line":"From novice to expert and back in one day","about":"We examine why AI-assisted software development oscillates between extraordinary productivity and maddening dead-ends, why that volatility is intrinsic rather than incidental, and how to build a working practice that absorbs it instead of being derailed by it.","tldr":"The same model, on the same task, does not perform consistently - and the swing is largest exactly where you can least afford it. Treat AI as a fast, brilliant, and unreliable collaborator: keep the speed, distrust the output, and let human judgment remain the integrating function. Match the model and the tool to the task rather than staying loyal to one.","ai_support":"The original ideas, structure, and much of the language are human-created, but AI was used to develop, enrich, or rework portions of the content \u2014 for example, researching sources, rewriting sections for clarity, or expanding on arguments."},"_links":{"self":[{"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/posts\/227669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/comments?post=227669"}],"version-history":[{"count":16,"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/posts\/227669\/revisions"}],"predecessor-version":[{"id":227826,"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/posts\/227669\/revisions\/227826"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/media\/225135"}],"wp:attachment":[{"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/media?parent=227669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/categories?post=227669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.9senses.ai\/de\/wp-json\/wp\/v2\/tags?post=227669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}