<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software Craft on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/tags/software-craft/</link><description>Recent content in Software Craft on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 13 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/tags/software-craft/index.xml" rel="self" type="application/rss+xml"/><item><title>Writing code by hand again — the architecture debt seven months of AI coding left behind</title><link>https://ice-ice-bear.github.io/posts/2026-05-13-writing-code-by-hand/</link><pubDate>Wed, 13 May 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-05-13-writing-code-by-hand/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post Writing code by hand again — the architecture debt seven months of AI coding left behind" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;A developer spent seven months building a &lt;a class="link" href="https://kubernetes.io/" target="_blank" rel="noopener"
 &gt;Kubernetes&lt;/a&gt; dashboard with &lt;a class="link" href="https://www.anthropic.com/claude" target="_blank" rel="noopener"
 &gt;Claude&lt;/a&gt;, then announced they were &lt;a class="link" href="https://blog.k10s.dev/im-going-back-to-writing-code-by-hand/" target="_blank" rel="noopener"
 &gt;&amp;ldquo;going back to writing code by hand.&amp;rdquo;&lt;/a&gt; The interesting part is that they did not &lt;em&gt;abandon&lt;/em&gt; AI coding — they measured exactly what AI is good and bad at, using seven months of codebase as the instrument, and distilled the measurement into five rules. This post reads that retrospective next to the bigger picture: the &lt;a class="link" href="https://en.wikipedia.org/wiki/Vibe_coding" target="_blank" rel="noopener"
 &gt;vibe coding&lt;/a&gt; discourse, the &lt;a class="link" href="https://metr.org/" target="_blank" rel="noopener"
 &gt;METR&lt;/a&gt; productivity study, the &lt;a class="link" href="https://addyo.substack.com/p/the-70-problem-hard-truths-about" target="_blank" rel="noopener"
 &gt;70% problem&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 Start["7 months of vibe coding &amp;lt;br/&amp;gt; (k10s dashboard)"]
 Start --&gt; Velocity["the velocity illusion &amp;lt;br/&amp;gt; features feel cheap"]
 Velocity --&gt; Debt["invisible debt accumulates"]
 Debt --&gt; God["God Object &amp;lt;br/&amp;gt; 1690-line Model struct"]
 Debt --&gt; Scope["scope creep &amp;lt;br/&amp;gt; GPU tool to k8s clone"]
 Debt --&gt; Race["data races &amp;lt;br/&amp;gt; works 99% of the time"]
 Debt --&gt; Pos["positional data &amp;lt;br/&amp;gt; magic index ra[3]"]
 God --&gt; Wall["render failure &amp;lt;br/&amp;gt; reading the code for the first time"]
 Scope --&gt; Wall
 Race --&gt; Wall
 Pos --&gt; Wall
 Wall --&gt; Rules["five rules &amp;lt;br/&amp;gt; architecture by hand first"]&lt;/pre&gt;&lt;h2 id="what-seven-months-revealed"&gt;What seven months revealed
&lt;/h2&gt;&lt;p&gt;The original author built &lt;a class="link" href="https://blog.k10s.dev/" target="_blank" rel="noopener"
 &gt;k10s&lt;/a&gt; — a GPU-aware Kubernetes terminal dashboard — on top of &lt;a class="link" href="https://github.com/charmbracelet/bubbletea" target="_blank" rel="noopener"
 &gt;Bubble Tea&lt;/a&gt;, a Go &lt;a class="link" href="https://en.wikipedia.org/wiki/Text-based_user_interface" target="_blank" rel="noopener"
 &gt;TUI&lt;/a&gt; framework that borrows &lt;a class="link" href="https://guide.elm-lang.org/architecture/" target="_blank" rel="noopener"
 &gt;The Elm Architecture&lt;/a&gt;. Bubble Tea manages all state through three methods — &lt;code&gt;Init&lt;/code&gt; / &lt;code&gt;Update&lt;/code&gt; / &lt;code&gt;View&lt;/code&gt; — and a single &lt;code&gt;Model&lt;/code&gt; struct. The structure itself is clean. The problem was what AI stacked &lt;em&gt;on top of&lt;/em&gt; that structure over seven months.&lt;/p&gt;
&lt;p&gt;The moment that finally made the author stop and read the code was mundane: they switched from the pods view back to the GPU fleet view, and nothing rendered. That was when they stopped throwing prompts and actually started reading the generated code — and what they found is the body of this retrospective.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The God Object&lt;/strong&gt; — all state had collapsed into a single 1,690-line &lt;code&gt;Model&lt;/code&gt; struct. Scattered across that file were nine &lt;code&gt;= nil&lt;/code&gt; assignments, every one a manual cleanup that fires on view switches. Miss one and the previous view&amp;rsquo;s &amp;ldquo;ghost data&amp;rdquo; lingers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope creep&lt;/strong&gt; — a GPU-focused tool sprawled into a general Kubernetes clone. In the author&amp;rsquo;s words: &amp;ldquo;vibe-coding made everything feel cheap.&amp;rdquo; The velocity metric points at success while complexity piles up invisibly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Positional data fragility&lt;/strong&gt; — resources were flattened into &lt;code&gt;[]string&lt;/code&gt; arrays, so a column&amp;rsquo;s identity depended on magic indices like &lt;code&gt;ra[3]&lt;/code&gt; for &amp;ldquo;Alloc.&amp;rdquo; Add a column and sort functions silently break.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrency data races&lt;/strong&gt; — background &lt;a class="link" href="https://go.dev/tour/concurrency/1" target="_blank" rel="noopener"
 &gt;goroutines&lt;/a&gt; mutated UI state directly with no synchronization, producing occasional display corruption. The textbook &amp;ldquo;works 99% of the time.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keybinding conflicts&lt;/strong&gt; — the same key did different things across views (&lt;code&gt;s&lt;/code&gt; for autoscroll in one place, shell access in another). Understanding behavior meant tracing through a 500-line &lt;code&gt;Update&lt;/code&gt; function.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The common thread is clear: none of these are &lt;em&gt;feature bugs&lt;/em&gt;. They are all &lt;em&gt;architecture debt&lt;/em&gt;. The author&amp;rsquo;s one-line diagnosis compresses it — &lt;strong&gt;&amp;ldquo;AI writes features, not architecture. The longer you let it drive without constraints, the worse the wreckage gets.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="five-rules-salvaged-from-the-wreckage"&gt;Five rules salvaged from the wreckage
&lt;/h2&gt;&lt;p&gt;The five prescriptions the author lands on are a concretization of &amp;ldquo;do not delegate architecture to AI.&amp;rdquo;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;#&lt;/th&gt;
 &lt;th&gt;Rule&lt;/th&gt;
 &lt;th&gt;Debt it prevents&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Write architecture explicitly before code; encode ownership rules in &lt;a class="link" href="https://docs.anthropic.com/en/docs/claude-code/memory" target="_blank" rel="noopener"
 &gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;God Object&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Enforce view isolation — separate structs implementing a consistent interface&lt;/td&gt;
 &lt;td&gt;God Object, keybinding conflicts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Define scope boundaries in advance&lt;/td&gt;
 &lt;td&gt;scope creep&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;Use typed structs instead of positional arrays&lt;/td&gt;
 &lt;td&gt;positional data fragility&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;Keep all state mutations on the main event loop — background tasks send messages only&lt;/td&gt;
 &lt;td&gt;data races&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Rule 1 is the load-bearing one. &lt;code&gt;CLAUDE.md&lt;/code&gt; is a project memory file &lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; reads every session, and the author&amp;rsquo;s proposal is to treat it not as a &amp;ldquo;style guide&amp;rdquo; but as a constitution. If a human decides up front — and writes down — which module owns which state and what falls outside scope, the AI fills in features only inside those boundaries. Rule 5 — keep every mutation on the event loop — is actually the pattern Bubble Tea intended in the first place. The AI knew that pattern and still took the &amp;ldquo;just works&amp;rdquo; shortcut of touching state directly from a goroutine. So the rules are not new inventions; they are &lt;strong&gt;the work of restoring good practices that AI does not follow by default back into explicit constraints&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="this-is-not-one-persons-anecdote"&gt;This is not one person&amp;rsquo;s anecdote
&lt;/h2&gt;&lt;p&gt;What makes the original post worth reading is that it is a clean case study of a much larger pattern. The same story keeps recurring elsewhere with different data.&lt;/p&gt;
&lt;p&gt;When &lt;a class="link" href="https://en.wikipedia.org/wiki/Andrej_Karpathy" target="_blank" rel="noopener"
 &gt;Andrej Karpathy&lt;/a&gt; coined &lt;a class="link" href="https://x.com/karpathy/status/1886192184808149383" target="_blank" rel="noopener"
 &gt;vibe coding&lt;/a&gt; in February 2025, the warning was already baked into the definition — &amp;ldquo;forget that the code even exists,&amp;rdquo; &amp;ldquo;I don&amp;rsquo;t read the diffs anymore.&amp;rdquo; &lt;a class="link" href="https://simonwillison.net/2025/Mar/19/vibe-coding/" target="_blank" rel="noopener"
 &gt;Simon Willison&lt;/a&gt; drew a hard line between that and &lt;em&gt;responsible&lt;/em&gt; AI-assisted programming. His golden rule: &lt;strong&gt;&amp;ldquo;I won&amp;rsquo;t commit any code if I couldn&amp;rsquo;t explain exactly what it does.&amp;rdquo;&lt;/strong&gt; Where the k10s author landed after seven months is exactly that golden rule — except they got there not through theory but through a 1,690-line God Object.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://addyo.substack.com/p/the-70-problem-hard-truths-about" target="_blank" rel="noopener"
 &gt;Addy Osmani&lt;/a&gt;&amp;rsquo;s &lt;a class="link" href="https://addyo.substack.com/p/the-70-problem-hard-truths-about" target="_blank" rel="noopener"
 &gt;70% problem&lt;/a&gt; is another cross-section of the same phenomenon. AI gets a project to 70% fast, but the remaining 30% — edge cases, error handling, architectural thinking — demands genuine engineering expertise. Osmani&amp;rsquo;s core line — &amp;ldquo;coding speed was never software development&amp;rsquo;s primary bottleneck&amp;rdquo; — is the exact same statement as the k10s retrospective&amp;rsquo;s &amp;ldquo;velocity illusion.&amp;rdquo; When the velocity gauge is green, the complexity-debt gauge is invisibly going red.&lt;/p&gt;
&lt;p&gt;The most counterintuitive data point is &lt;a class="link" href="https://metr.org/" target="_blank" rel="noopener"
 &gt;METR&lt;/a&gt;&amp;rsquo;s &lt;a class="link" href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" target="_blank" rel="noopener"
 &gt;July 2025 randomized controlled trial&lt;/a&gt;. Sixteen experienced developers working on open-source repos averaging 22,000+ stars were randomly assigned 246 real issues, AI-permitted or AI-prohibited. The result: the AI group was &lt;strong&gt;19% slower&lt;/strong&gt;. More striking is the perception gap — developers expected a 24% speedup going in, and &lt;em&gt;even after experiencing the slowdown&lt;/em&gt; still believed AI had sped them up by 20%. The k10s author&amp;rsquo;s &amp;ldquo;velocity illusion,&amp;rdquo; reproduced in a controlled experiment. (METR explicitly cautioned that this is a snapshot of one specific context — experienced developers on familiar codebases — not a universal law.)&lt;/p&gt;
&lt;p&gt;Quality metrics point the same direction. &lt;a class="link" href="https://www.coderabbit.ai/" target="_blank" rel="noopener"
 &gt;CodeRabbit&lt;/a&gt;&amp;rsquo;s December 2025 analysis reported that AI co-authored code had 1.7x more major issues and 2.74x more security vulnerabilities than human-written code. &lt;a class="link" href="https://www.gitclear.com/" target="_blank" rel="noopener"
 &gt;GitClear&lt;/a&gt; found code refactoring dropped from 25% to under 10% through 2024 while code duplication quadrupled — precisely the macro version of the &amp;ldquo;positional data&amp;rdquo; and &amp;ldquo;God Object&amp;rdquo; seen in k10s. The July 2025 incident where a &lt;a class="link" href="https://en.wikipedia.org/wiki/Replit" target="_blank" rel="noopener"
 &gt;Replit&lt;/a&gt; agent deleted a production database against explicit instructions, and the &lt;a class="link" href="https://lovable.dev/" target="_blank" rel="noopener"
 &gt;Lovable&lt;/a&gt; security flaw where 170 of 1,645 apps allowed unauthorized personal data access — these are the invoices for the &amp;ldquo;don&amp;rsquo;t read the diffs&amp;rdquo; posture.&lt;/p&gt;
&lt;h2 id="so-is-going-back-to-hand-coding-the-answer"&gt;So is going back to hand-coding the answer
&lt;/h2&gt;&lt;p&gt;Careful here. The k10s retrospective&amp;rsquo;s conclusion is not &amp;ldquo;drop AI.&amp;rdquo; The author is rewriting the project in &lt;a class="link" href="https://www.rust-lang.org/" target="_blank" rel="noopener"
 &gt;Rust&lt;/a&gt; and &lt;em&gt;still uses AI&lt;/em&gt; — just after designing the architecture by hand first and encoding concrete directives in &lt;code&gt;CLAUDE.md&lt;/code&gt;. This is not surrender; it is &lt;strong&gt;repositioning the steering wheel&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Fairness requires the data on the other side too. Per Osmani&amp;rsquo;s &lt;a class="link" href="https://addyo.substack.com/p/the-70-problem-hard-truths-about" target="_blank" rel="noopener"
 &gt;knowledge paradox&lt;/a&gt;, experienced developers benefit &lt;em&gt;more&lt;/em&gt; from AI — because they use it to accelerate work they already understand. Even METR&amp;rsquo;s 19% slowdown is the result of a specific condition — experienced developers on familiar codebases — not a general law across all contexts. The fact that 25% of &lt;a class="link" href="https://www.ycombinator.com/" target="_blank" rel="noopener"
 &gt;Y Combinator&lt;/a&gt;&amp;rsquo;s Winter 2025 batch had 95% AI-generated codebases means early velocity is, in some contexts, real value. The problem is not speed itself but the &lt;strong&gt;asymmetry between speed and debt&lt;/strong&gt; — speed is visible immediately, debt shows up late.&lt;/p&gt;
&lt;p&gt;It is no accident that tools like &lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt;, &lt;a class="link" href="https://cursor.com/" target="_blank" rel="noopener"
 &gt;Cursor&lt;/a&gt;, and &lt;a class="link" href="https://github.com/features/copilot" target="_blank" rel="noopener"
 &gt;GitHub Copilot&lt;/a&gt; increasingly emphasize explicit context files (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;.cursorrules&lt;/code&gt;), planning modes, and diff-review workflows. The tool makers know &amp;ldquo;fully give in to the vibes&amp;rdquo; is not a production strategy. The k10s author&amp;rsquo;s five rules are, in fact, one individual rediscovering through seven months of pain the workflow these tools &lt;em&gt;recommend but do not enforce&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;The biggest lesson to salvage from the k10s retrospective is not the five rules themselves but &lt;em&gt;how&lt;/em&gt; they were derived. The author measured the limits of AI coding not through a Twitter argument or a benchmark but through a 1,690-line wound in their own codebase. And the key point is that the measurement overlaps almost exactly with &lt;a class="link" href="https://en.wikipedia.org/wiki/Andrej_Karpathy" target="_blank" rel="noopener"
 &gt;Karpathy&lt;/a&gt;&amp;rsquo;s original definition, &lt;a class="link" href="https://simonwillison.net/2025/Mar/19/vibe-coding/" target="_blank" rel="noopener"
 &gt;Willison&lt;/a&gt;&amp;rsquo;s golden rule, &lt;a class="link" href="https://addyo.substack.com/p/the-70-problem-hard-truths-about" target="_blank" rel="noopener"
 &gt;Osmani&lt;/a&gt;&amp;rsquo;s 70% problem, and &lt;a class="link" href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" target="_blank" rel="noopener"
 &gt;METR&lt;/a&gt;&amp;rsquo;s RCT — the same conclusion, reached independently, by a different route.&lt;/p&gt;
&lt;p&gt;The shared diagnosis comes out like this. AI is strong &lt;em&gt;locally&lt;/em&gt; — it fills in one feature inside clear boundaries fast and accurately. What AI is weak at is &lt;em&gt;global&lt;/em&gt; — system-level invariants like which module owns what, what falls outside scope, where state is allowed to mutate. And the danger of vibe coding is that this weakness is &lt;em&gt;not immediately visible&lt;/em&gt;. The feature works in the demo, the velocity gauge is green, and the debt sends its invoice in month nine as &amp;ldquo;nothing renders.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;So the title &amp;ldquo;writing code by hand&amp;rdquo; is a bit of rhetoric. The real prescription is not a return to hand-coding but a &lt;strong&gt;resetting of the delegation boundary&lt;/strong&gt; — humans set architecture and invariants explicitly (in &lt;code&gt;CLAUDE.md&lt;/code&gt;, in advance), and feature implementation is delegated to AI inside those boundaries. To rewrite Willison&amp;rsquo;s golden rule: it is not about refusing to commit &lt;em&gt;features&lt;/em&gt; you cannot explain, it is about refusing to hand AI &lt;em&gt;architecture decisions&lt;/em&gt; you cannot explain. Seven months of wreckage was an expensive tuition, but the content of that lesson was already the consensus the whole discourse had reached by other routes — speed was not the bottleneck, and it never was.&lt;/p&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;The original post and direct context&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.k10s.dev/im-going-back-to-writing-code-by-hand/" target="_blank" rel="noopener"
 &gt;I&amp;rsquo;m Going Back to Writing Code by Hand&lt;/a&gt; — the retrospective this post is built around&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.k10s.dev/" target="_blank" rel="noopener"
 &gt;k10s blog&lt;/a&gt; — the author&amp;rsquo;s GPU-aware Kubernetes dashboard project&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/charmbracelet/bubbletea" target="_blank" rel="noopener"
 &gt;Bubble Tea&lt;/a&gt; — the Go TUI framework k10s is built on&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://guide.elm-lang.org/architecture/" target="_blank" rel="noopener"
 &gt;The Elm Architecture&lt;/a&gt; — the &lt;code&gt;Init&lt;/code&gt;/&lt;code&gt;Update&lt;/code&gt;/&lt;code&gt;View&lt;/code&gt; pattern Bubble Tea borrows&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.anthropic.com/en/docs/claude-code/memory" target="_blank" rel="noopener"
 &gt;CLAUDE.md / Claude Code memory&lt;/a&gt; — the project memory file the author proposes treating as a constitution&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The vibe coding discourse&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://x.com/karpathy/status/1886192184808149383" target="_blank" rel="noopener"
 &gt;Andrej Karpathy&amp;rsquo;s original tweet&lt;/a&gt; — the source of the term &amp;ldquo;vibe coding&amp;rdquo; (Feb 2025)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://simonwillison.net/2025/Mar/19/vibe-coding/" target="_blank" rel="noopener"
 &gt;Not all AI-assisted programming is vibe coding&lt;/a&gt; — Simon Willison, &amp;ldquo;I won&amp;rsquo;t commit code I can&amp;rsquo;t explain&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://addyo.substack.com/p/the-70-problem-hard-truths-about" target="_blank" rel="noopener"
 &gt;The 70% Problem&lt;/a&gt; — Addy Osmani, AI coding&amp;rsquo;s final 30% and the knowledge paradox&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Vibe_coding" target="_blank" rel="noopener"
 &gt;Vibe coding (Wikipedia)&lt;/a&gt; — etymology, incident timeline, criticism&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Data and incidents&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" target="_blank" rel="noopener"
 &gt;Measuring the Impact of Early-2025 AI on Experienced Developers&lt;/a&gt; — METR RCT, 19% slowdown for experienced developers&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.coderabbit.ai/" target="_blank" rel="noopener"
 &gt;CodeRabbit&lt;/a&gt; · &lt;a class="link" href="https://www.gitclear.com/" target="_blank" rel="noopener"
 &gt;GitClear&lt;/a&gt; — sources for AI co-authored code quality and duplication metrics&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.ycombinator.com/" target="_blank" rel="noopener"
 &gt;Y Combinator&lt;/a&gt; — source of the Winter 2025 95% AI-generated codebase statistic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; · &lt;a class="link" href="https://cursor.com/" target="_blank" rel="noopener"
 &gt;Cursor&lt;/a&gt; · &lt;a class="link" href="https://github.com/features/copilot" target="_blank" rel="noopener"
 &gt;GitHub Copilot&lt;/a&gt; — AI coding tools evolving toward explicit context and planning modes&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Replit" target="_blank" rel="noopener"
 &gt;Replit&lt;/a&gt; · &lt;a class="link" href="https://lovable.dev/" target="_blank" rel="noopener"
 &gt;Lovable&lt;/a&gt; — platforms that hosted notable vibe coding incidents&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.rust-lang.org/" target="_blank" rel="noopener"
 &gt;Rust&lt;/a&gt; — the language the k10s author chose for the rewrite&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>