<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zhanwei Wang</title><link>https://zhanwei.wang/en/posts/</link><description>Recent content on Zhanwei Wang</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 08 May 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://zhanwei.wang/en/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>We Built Ourselves an AI Coding Workbench — Using GitHub Actions as the Sandbox</title><link>https://zhanwei.wang/en/posts/ai-coding-workbench-on-gha/</link><pubDate>Fri, 08 May 2026 00:00:00 +0800</pubDate><guid>https://zhanwei.wang/en/posts/ai-coding-workbench-on-gha/</guid><description>&lt;h2 id="how-it-started"&gt;How it started&lt;/h2&gt;
&lt;p&gt;Over the last year or two, our team has been doing more and more coding work with AI. We started by running CLIs like Claude Code locally, and quickly hit a practical problem: &lt;strong&gt;every agent task I kicked off held my laptop hostage&lt;/strong&gt;. The agent was building, running tests, editing files, thinking about the next step; meanwhile I wanted to do something else, and the CPU fan started screaming. Forget about running five agents on five unrelated things at once.&lt;/p&gt;</description></item><item><title>"All Tests Pass" Doesn't Mean "Requirements Are Met" — Why AI-Assisted Development Is Often Suspiciously Green</title><link>https://zhanwei.wang/en/posts/green-but-wrong/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0800</pubDate><guid>https://zhanwei.wang/en/posts/green-but-wrong/</guid><description>&lt;p&gt;Many teams that delegate long-running tasks to AI collaborators keep running into the same uncanny ending:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The task wraps up. CI is fully green.&lt;/li&gt;
&lt;li&gt;The test report shows hundreds of new specs, beautiful coverage, smooth flow.&lt;/li&gt;
&lt;li&gt;A few days later, the product ships, and the first real user walks through a core flow — only to trigger a bug that should have been covered but wasn&amp;rsquo;t.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You go back to the code and find: that &amp;ldquo;covered&amp;rdquo; test was actually just a status-code probe; that &amp;ldquo;edge case handler&amp;rdquo; was a &lt;code&gt;console.warn&lt;/code&gt; followed by &lt;code&gt;return&lt;/code&gt;; that &amp;ldquo;complete feature&amp;rdquo; is missing a database table, a cookie, a middleware — but none of those gaps make any test fail.&lt;/p&gt;</description></item><item><title>Cost and Performance Optimization for Claude Code Skills: 6 Principles from a Real Session</title><link>https://zhanwei.wang/en/posts/skill-cost-optimization/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0800</pubDate><guid>https://zhanwei.wang/en/posts/skill-cost-optimization/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This article is based on a week-long optimization effort across three production Skills — &lt;code&gt;prd-analysis&lt;/code&gt;, &lt;code&gt;system-design&lt;/code&gt;, and &lt;code&gt;autoforge&lt;/code&gt; — from token-level measurement to actual code changes. All numbers come from real JSONL session files, with inflation factors corrected.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="why-skill-cost-deserves-its-own-treatment"&gt;Why skill cost deserves its own treatment&lt;/h2&gt;
&lt;p&gt;Generic &amp;ldquo;LLM cost reduction&amp;rdquo; articles usually talk about context pruning, cache warmup, and model downgrading. These apply to Skills too — but the Skill execution environment has several &lt;strong&gt;structural differences&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>When Documentation Stops Rotting: From Karpathy's LLM Wiki to Software Engineering Documentation</title><link>https://zhanwei.wang/en/posts/when-documentation-stops-rotting/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0800</pubDate><guid>https://zhanwei.wang/en/posts/when-documentation-stops-rotting/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Humans write the original documents and make decisions. LLMs handle synthesis, updates, and consistency checks. Documentation is no longer a static artifact that rots the moment it&amp;rsquo;s written — it becomes a living knowledge base continuously maintained by LLMs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="an-age-old-problem"&gt;An age-old problem&lt;/h2&gt;
&lt;p&gt;Every software engineer has experienced this: you join a project, open the docs, and find the README still describing a module deleted six months ago, API docs with fields that don&amp;rsquo;t match the code at all, and architecture diagrams showing a design from two versions back. You ask a colleague, who says, &amp;ldquo;Don&amp;rsquo;t bother with the docs — just read the code.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Frontend-Driven Development in the Vibe Coding Era</title><link>https://zhanwei.wang/en/posts/vibe-coding-frontend-driven-development/</link><pubDate>Mon, 09 Mar 2026 10:00:00 +0800</pubDate><guid>https://zhanwei.wang/en/posts/vibe-coding-frontend-driven-development/</guid><description>&lt;p&gt;When AI becomes a routine tool in development, how should we change the way we work?&lt;/p&gt;
&lt;h2 id="the-evolution-of-three-development-models"&gt;The evolution of three development models&lt;/h2&gt;
&lt;p&gt;Before discussing frontend-driven development, here are three different development models and how they&amp;rsquo;ve evolved:&lt;/p&gt;
&lt;h3 id="1-backend-driven-development-the-traditional-way"&gt;1. Backend-driven development (the traditional way)&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Product requirements → Backend designs API (1-2 weeks) → Frontend builds pages (2 weeks) → Integration
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;A real pain point&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Last year I worked on an e-commerce admin system where the team followed this model. By the time the frontend received the API documentation, we were already in week three of the development cycle. I spent two weeks implementing the order management module according to the docs. When we demoed it to the product manager, she frowned: &amp;ldquo;Why can&amp;rsquo;t the order list be filtered by status? Users definitely need this.&amp;rdquo;&lt;/p&gt;</description></item></channel></rss>