<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="/feed.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ray Han</title>
    <link>https://ray-han.com/</link>
    <description>Ray Han&#39;s personal site and articles. Ray Han is an Engineer at ByteDance, writing on internet infrastructure, engineering leadership, and AI.</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sat, 18 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://ray-han.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Awards</title>
      <link>https://ray-han.com/fbcs_application/awards/</link>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://ray-han.com/fbcs_application/awards/</guid>
      <description>&lt;meta http-equiv=&#34;refresh&#34; content=&#34;0;url=https://ray-han.com/fbcs_application/#awards&#34;&gt;</description>
      <content:encoded><![CDATA[<meta http-equiv="refresh" content="0;url=https://ray-han.com/fbcs_application/#awards">
]]></content:encoded>
    </item>
    <item>
      <title>Innovation</title>
      <link>https://ray-han.com/fbcs_application/innovation/</link>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://ray-han.com/fbcs_application/innovation/</guid>
      <description>&lt;meta http-equiv=&#34;refresh&#34; content=&#34;0;url=https://ray-han.com/fbcs_application/#invention-and-innovation&#34;&gt;</description>
      <content:encoded><![CDATA[<meta http-equiv="refresh" content="0;url=https://ray-han.com/fbcs_application/#invention-and-innovation">
]]></content:encoded>
    </item>
    <item>
      <title>Mentoring</title>
      <link>https://ray-han.com/fbcs_application/mentoring/</link>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://ray-han.com/fbcs_application/mentoring/</guid>
      <description>&lt;meta http-equiv=&#34;refresh&#34; content=&#34;0;url=https://ray-han.com/fbcs_application/#mentoring-and-coaching&#34;&gt;</description>
      <content:encoded><![CDATA[<meta http-equiv="refresh" content="0;url=https://ray-han.com/fbcs_application/#mentoring-and-coaching">
]]></content:encoded>
    </item>
    <item>
      <title>Responsibility</title>
      <link>https://ray-han.com/fbcs_application/responsibility/</link>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://ray-han.com/fbcs_application/responsibility/</guid>
      <description>&lt;meta http-equiv=&#34;refresh&#34; content=&#34;0;url=https://ray-han.com/fbcs_application/#responsibility&#34;&gt;</description>
      <content:encoded><![CDATA[<meta http-equiv="refresh" content="0;url=https://ray-han.com/fbcs_application/#responsibility">
]]></content:encoded>
    </item>
    <item>
      <title>Building a Personalized Agent Team and Harness</title>
      <link>https://ray-han.com/articles/personalized-agent-team-harness/</link>
      <pubDate>Thu, 09 Apr 2026 00:33:09 +0800</pubDate>
      <guid>https://ray-han.com/articles/personalized-agent-team-harness/</guid>
      <description>I explain building personalized multi-agent teams overcoming single-agent limits via roles, permissions, model matching, and a two-phase Plan-Execute workflow.</description>
      <content:encoded><![CDATA[<h2 id="why">Why?</h2>
<p>When advancing complex projects with Vibe Coding, relying on a single Agent quickly hits a capability bottleneck. First, the context window fills up with low-value information, forcing task interruptions. Second, mixing different roles like search, planning, and coding in one process lowers efficiency and increases errors. Finally, security concerns arise: lacking a global plan leads to redo work, and no permission isolation risks dangerous operations.</p>
<p>An Agent Team separates roles—planning is planning, execution is execution, and reading is separated from writing—alleviating the first two problems significantly. Harness adds a layer of control: assigning permissions, matching models, managing context, and constraining behavior. However, off-the-shelf solutions rarely fit directly since each project’s tech stack, development standards, task types, and workflows differ. One-size-fits-all solutions struggle to meet real needs.</p>
<p>Fortunately, customizing your own system isn’t complicated. Open a multi-Agent-supporting IDE or CLI tool (like <code>Claude Code</code> or <code>OpenCode</code>) and follow three key steps: <strong>design architecture and roles</strong>, <strong>manage permissions, models, and context</strong>, and <strong>add a <code>Plan</code> workflow</strong>. There’s also a faster option: import a ready-made Team + Harness framework and tailor it to your project’s specific requirements.</p>
<h2 id="step-one-design-architecture-and-roles">Step One: Design Architecture and Roles</h2>
<h3 id="start-simple">Start Simple</h3>
<p>You don’t have to build a complete multi-role team from the start. Begin with a single Agent, hereafter called the <code>Builder</code>, roughly equivalent to a default Build Agent in most AI coding tools. As task complexity grows, gradually split roles as needed. Each role is effectively a Sub-agent that takes on specialized tasks delegated by the <code>Builder</code>:</p>
<ul>
<li><code>Builder</code> handles all work initially; if context or efficiency bottlenecks arise, consider splitting duties.</li>
<li>Add read-only roles <code>Explorer</code> / <code>Researcher</code>: responsible for search and information collection, offloading retrieval work from the main Agent.</li>
<li>Add <code>Coder</code>: focused on code implementation and modification to improve code quality and consistency.</li>
<li>Add <code>Planner</code>: manages planning and task breakdown for multi-file or multi-step complex tasks.</li>
<li>Extend with roles like <code>Reviewer</code> or <code>General</code> as needed for review, general assistance, or permission isolation.</li>
</ul>
<blockquote>
<p>&ldquo;The best agent architecture is the one you don&rsquo;t need to build. Start simple. Add complexity only when metrics prove it helps.&rdquo;
<em>—Reliable Data Engineering</em></p>
</blockquote>
<h3 id="core-design-principles">Core Design Principles</h3>
<ul>
<li><strong>Separate Planning and Execution</strong>: Planning (deciding what to do and task breakdown) and execution (actual coding and modification) engage different cognitive processes and should be handled by separate roles to avoid frequent context switches and errors.</li>
<li><strong>Separate Reading and Writing</strong>: The risks and costs of reading/searching information versus writing code differ sharply. Reading errors mainly waste time; writing errors can break the project. Assign retrieval tasks to read-only roles and code modification tasks to roles with permissions and review workflows.</li>
<li><strong>Separate Internal and External Searches</strong>: Internal codebase search and external internet research require different tools and strategies. Codebase search relies on project structure understanding (like <code>Glob</code>/<code>Grep</code>/<code>Read</code>), while internet search focuses on keywords, source evaluation, and info synthesis. Combining both in one role leads to bulky tools or conflicting strategies. Design and manage them separately.</li>
</ul>
<h3 id="builders-routing-decisions">Builder’s Routing Decisions</h3>
<p>The <code>Builder</code> is the team’s decision-maker, using the most capable general-purpose model (e.g., <code>Claude Opus</code>). It rarely codes directly; its core duty is routing tasks to the most suitable roles.</p>
<p>A common routing schema looks like this:</p>
<table>
	<thead>
			<tr>
					<th>Target Agent</th>
					<th>Main Function</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>Coder</code></td>
					<td>Code implementation/modification</td>
			</tr>
			<tr>
					<td><code>Explorer</code></td>
					<td>Codebase search (read-only)</td>
			</tr>
			<tr>
					<td><code>Researcher</code></td>
					<td>Web and external data research</td>
			</tr>
			<tr>
					<td><code>Reviewer</code></td>
					<td>Code review and quality control</td>
			</tr>
			<tr>
					<td><code>General</code></td>
					<td>Handle general subdividable tasks</td>
			</tr>
			<tr>
					<td><code>Builder</code></td>
					<td>Minor edits or urgent rollbacks</td>
			</tr>
	</tbody>
</table>
<p>Humans must clearly describe each Agent’s responsibilities and let the <code>Builder</code>’s underlying model decide whom to delegate. Adjust routing rules and thresholds based on performance. Over time, introduce quantitative metrics like delegation success rate, rollback count, and task completion time to iteratively optimize the division of labor.</p>
<h4 id="additional-behavioral-rules">Additional Behavioral Rules</h4>
<p>These can be initially added to the <code>Builder</code>’s prompt, with specific numbers left for the model to decide and refined later:</p>
<ul>
<li><code>Prefer Delegation</code>: When uncertain, delegate first to avoid <code>Builder</code> becoming a jack-of-all trades swamped by context details.</li>
<li><code>3-Failure-Stop</code>: Stop and ask the user after 3 consecutive failures on the same subtask; avoid infinite retries.</li>
<li><code>Plan Before Action</code>: For tasks involving more than five files or multiple steps, assign a <code>Planner</code> to create a plan first instead of rushing to finish.</li>
<li><code>Confirm Before Declaring Done</code>: Before declaring completion, verify all parts are handled, code is reviewed, and tests pass.</li>
</ul>
<h3 id="overview-of-roles">Overview of Roles</h3>
<p>Roles are realized as Sub-agents that take delegated tasks from <code>Builder</code>. There’s no fixed number of roles; if a task type occurs frequently and needs distinct capability or permissions, it’s worth creating a dedicated role:</p>
<p><strong><code>Coder</code> (coding executor)</strong>: Uses a capable, cost-effective model to implement analyzed tasks. Cannot call <code>Task</code> (no recursive delegation) or use <code>Skill</code>. Hard constraints include: cannot pass tests by deleting existing ones, cannot deliver code with <code>TODO</code> or empty functions, must run tests and report results.</p>
<p><strong><code>Explorer</code> (internal analyst)</strong>: Read-only codebase search. Tools: <code>Glob</code> / <code>Grep</code> / <code>Read</code>. Output must include a <code>Not found</code> section listing searched but unhit items explicitly.</p>
<p><strong><code>Researcher</code> (external researcher)</strong>: Read-only info gathering on the internet. Tools: web search / URL fetch / GitHub browsing. All URLs and references must appear in the final report. Search language affects quality; English is recommended due to richer, more reliable tech content. Cross-verify to avoid hallucination and misinformation.</p>
<p><strong><code>Reviewer</code> (review and quality control)</strong>: Uses code-specialized model with reasoning capabilities. Review priority: Completeness &gt; Correctness &gt; Quality. Output must be one of PASS / WARN / FAIL. Also used to review <code>Plan</code>.</p>
<p><strong>Common design for read-only roles</strong>: <code>Explorer</code>, <code>Researcher</code>, and <code>Reviewer</code> have no <code>edit</code> or <code>bash</code> permissions to isolate side effects and prevent accidental file changes during read operations.</p>
<p><strong><code>General</code> (generalist)</strong>: Has the highest allowed independent steps, full toolset, and can schedule Sub-agents. Used for tasks that are dividable but hard to categorize or cross-domain complex tasks.</p>
<p><strong><code>Compaction</code> (context compression)</strong>: Uses long-context models with reasoning enabled to decide which messages to keep.</p>
<h2 id="step-two-manage-permissions-models-and-context">Step Two: Manage Permissions, Models, and Context</h2>
<h3 id="permissions-least-privilege">Permissions: Least Privilege</h3>
<p>Each role should retain only the minimal permissions needed to perform its tasks:</p>
<table>
	<thead>
			<tr>
					<th>Role</th>
					<th>edit</th>
					<th>bash</th>
					<th>task</th>
					<th>skill</th>
					<th>web</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>Builder</code></td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
			<tr>
					<td><code>Planner</code></td>
					<td>edit only isolated <code>.plan</code> dir</td>
					<td>✓</td>
					<td>✗</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
			<tr>
					<td><code>Coder</code></td>
					<td>✓</td>
					<td>✓</td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
			</tr>
			<tr>
					<td><code>Explorer</code></td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
			</tr>
			<tr>
					<td><code>Researcher</code></td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
					<td>✓</td>
			</tr>
			<tr>
					<td><code>Reviewer</code></td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
					<td>✗</td>
			</tr>
			<tr>
					<td><code>General</code></td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
	</tbody>
</table>
<p>Many AI Agents tend to &ldquo;do as much as possible.&rdquo; If given <code>edit</code> permission, they may modify files during research; if given <code>task</code> permission, they may further delegate even simple problems. Explicitly restricting permissions ensures each role sticks to its job.</p>
<p>Typical example: If <code>Coder</code> has <code>task</code> permission, it might delegate tough problems to <code>Researcher</code> or <code>Explorer</code> instead of solving them directly. This breaks <code>Builder</code>’s routing logic, wastes tokens, and keeps <code>Builder</code> unaware. Correct practice: <code>Coder</code> handles what it can by coding; if stuck, returns the problem to <code>Builder</code>.</p>
<h3 id="model-matching">Model Matching</h3>
<p>Different tasks require different intelligence levels. The most expensive models go to tasks needing the most judgment.</p>
<table>
	<thead>
			<tr>
					<th>Tier</th>
					<th>Model Type</th>
					<th>Roles</th>
					<th>Thinking Enabled</th>
					<th>Reason</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Flagship</td>
					<td>Most powerful model</td>
					<td><code>Builder</code>, <code>Planner</code></td>
					<td>Yes, large budget</td>
					<td>Routing and planning decision quality directly impacts end-to-end efficiency</td>
			</tr>
			<tr>
					<td>Execution</td>
					<td>Cost-effective model</td>
					<td><code>Coder</code></td>
					<td>Yes, small budget</td>
					<td>Tasks are analyzed and focused on instruction compliance</td>
			</tr>
			<tr>
					<td>General</td>
					<td>Varies by complexity</td>
					<td><code>General</code></td>
					<td>Optional</td>
					<td>Tasks have fuzzy boundaries and require cross-domain coordination</td>
			</tr>
			<tr>
					<td>Search</td>
					<td>Lightweight models</td>
					<td><code>Explorer</code>, <code>Researcher</code></td>
					<td>Optional</td>
					<td>Search is deterministic, prioritizing speed, cost, and tool call success rate</td>
			</tr>
			<tr>
					<td>Long context</td>
					<td>Long window models</td>
					<td><code>Compaction</code></td>
					<td>—</td>
					<td>Needs to first comprehend large context before compressing</td>
			</tr>
	</tbody>
</table>
<p>When configuring, also consider multi-provider mixing and fallback strategies to benchmark performance, cut costs, and mitigate single points of failure.</p>
<h3 id="context-management-and-information-isolation">Context Management and Information Isolation</h3>
<p>Context is the scarcest resource; a tight context window quickly degrades model performance. Every bit of context should be used efficiently:</p>
<ol>
<li>
<p>Sub-agents communicate with <code>Builder</code> only via final messages; intermediate steps are invisible to <code>Builder</code>. <code>Builder</code> just needs “task done, result is XXX”; detailed process info is provided only on exceptions.</p>
</li>
<li>
<p><code>Compaction</code> can use three strategies simultaneously: <code>auto</code> (automatic triggers), <code>prune</code> (active trimming), and <code>reserved</code> (reserved space).</p>
</li>
</ol>
<h2 id="step-three-add-the-plan-workflow-to-handle-more-complex-tasks">Step Three: Add the <code>Plan</code> Workflow to Handle More Complex Tasks</h2>
<h3 id="why-plan-before-execution">Why Plan Before Execution?</h3>
<p>For complex tasks, invoking <code>Builder</code> directly without planning leads to four typical problems:</p>
<ol>
<li>Insufficient context window (already discussed).</li>
<li>Lack of global view: Agent changes first file, then mid-way discovers conflicts in file three, requiring rework.</li>
<li>No recoverability: interruption or context exhaustion causes progress loss; must start over.</li>
<li>No auditability: Humans don’t know Agent’s intent until after execution, risking costly misdirection.</li>
</ol>
<p>The two-phase <code>Plan-Execute</code> workflow addresses these issues. We add a dedicated <code>Planner</code> responsible for crafting structured <code>Plan</code> files.</p>
<h3 id="planner-agent">Planner Agent</h3>
<p><code>Planner</code> takes complex tasks and outputs structured <code>Plan</code> files. Plans are persisted as files, bringing four benefits:</p>
<ul>
<li>Global view isn’t lost due to context exhaustion.</li>
<li>Progress can resume after interruption.</li>
<li>Both machine and human can review and adjust plans before execution (human-in-the-loop).</li>
</ul>
<p><code>Planner</code> has read/write access restricted to a specific directory (e.g., <code>./plans/&lt;name&gt;.md</code>), physically isolating planning from execution.</p>
<h3 id="structure-of-the-plan-file">Structure of the <code>Plan</code> File</h3>
<p>The <code>Plan</code> file is a structured execution checklist with three core design points:</p>
<ul>
<li>
<p><strong>Batch Thinking</strong>: Tasks in the same batch are independent and can run in parallel; batches have dependencies and must run sequentially. Parallel execution drastically speeds things up but requires logic to identify true independence—this judgment is the <code>Planner</code>’s responsibility.</p>
</li>
<li>
<p><strong>Five Elements of a Task:</strong></p>
<ol>
<li>Assigned role: which Sub-agent executes it.</li>
<li>Description: executable task explanation including files and expectations.</li>
<li>Involved files: list of files to create, modify, or read.</li>
<li>Verification criteria: clear checks.</li>
<li>Status flags: <code>pending</code> / <code>in-progress</code> / <code>completed</code> / <code>blocked</code></li>
</ol>
</li>
<li>
<p><strong>Mandatory final verification batch</strong>: The last <code>Batch</code> must include integration tests and final review. Passing individual tasks doesn’t guarantee overall correctness—e.g., Task A changes an interface, Task B still uses old interface; each test passes alone but combined fails.</p>
</li>
</ul>
<h3 id="executing-the-plan">Executing the Plan</h3>
<p>Executing the plan is managing a state machine to drive tasks from <code>pending</code> to <code>completed</code>. A simple <code>Skill</code> can describe this.</p>
<p><strong>Core execution steps:</strong></p>
<ol>
<li>Load the <code>Plan</code> file and scan all task statuses.</li>
<li>Find the first incomplete <code>Batch</code> and start executing it.</li>
<li>For each task: mark as <code>in-progress</code> and write to file → delegate to Agent → on response update status and write immediately.</li>
<li><code>Batch gate</code>: only after all tasks in current batch finish can the next batch start.</li>
<li>Execute the final verification <code>Batch</code>.</li>
</ol>
<p><strong>Checkpoint recovery</strong>: If tasks marked <code>in-progress</code> remain on load, it means last execution was interrupted. Recovery steps:</p>
<ol>
<li>Locate interrupted tasks.</li>
<li>Assign <code>Explorer</code> to assess damage: Are files complete? Are there <code>TODO</code> placeholders? Does the project compile?</li>
<li>Based on assessment: completed → validated by <code>Reviewer</code>; partial → continued by <code>Coder</code>; damaged → fixed by <code>Coder</code>.</li>
</ol>
<p><strong>Core principle</strong>: Never assume interrupted work is done.</p>
<h3 id="additional-behavioral-rules-1">Additional Behavioral Rules</h3>
<ul>
<li><code>Scope Per Delegation</code>: No delegating to <code>Coder</code> tasks involving more than 5 files at once; split bigger tasks.</li>
<li><code>Done Means Verified</code>: Completion criterion is meeting verification checks, not just &ldquo;code written&rdquo; or &ldquo;all tasks delegated&rdquo;.</li>
<li><code>Persist Progress Eagerly</code>: Write status changes to file immediately.</li>
<li><code>Specification Drift Check</code>: After all batches, re-read Goal and Verification Criteria word by word, compare with outputs to detect any silent feature creep, missing requirements, or deviations.</li>
</ul>
<h2 id="advanced-concept-ralph-loop">Advanced Concept: Ralph Loop</h2>
<p>For even more complex projects needing long AI autonomy with clear goals, you can introduce the Ralph Loop method.</p>
<p>In March 2026, Anthropic accidentally leaked all 512,000 lines of TypeScript source code for <code>Claude Code</code>. A Korean developer, Sigrid Jin, rewrote the entire codebase from TypeScript to Python in two hours using Ralph Loop, without writing a single line manually—fully relying on Agent-driven iterative development until success.</p>
<p>Ralph Loop’s key idea: break requirements into independent items, process one per iteration, proceed only after passing validation; each iteration starts a fresh Agent context. Memory between iterations is passed through files (git history, progress files, requirement status), avoiding context degradation from long runs.</p>
<p>The flow:</p>
<ol>
<li>List all requirements, mark each as passed or failed.</li>
<li>Launch fresh Agent context and pick the highest priority unmet item.</li>
<li>Implement and validate it; if pass, mark done.</li>
<li>Append experience to progress file for next iteration’s reference.</li>
<li>Repeat until all pass or reach max iterations.</li>
</ol>
<p>Ralph Loop can be implemented as a <code>Skill</code>, invoked and driven by the <code>Builder</code> to repeatedly execute the existing Agent Team.</p>
<h2 id="summary">Summary</h2>
<p>Building an Agent Team is fundamentally architectural design, not just Prompt engineering. It’s like designing microservices or team workflows. Interestingly, once you start splitting roles, defining permissions, and designing state transitions, you realize these insights reflect how human teams work: why clear responsibility boundaries matter, why persistent workflows matter, why review and testing can’t be skipped. Agents hold up a mirror, reflecting your understanding of organizing work.</p>
]]></content:encoded>
    </item>
    <item>
      <title>AI Selection: Scenario-Distinguished Combination Strategy</title>
      <link>https://ray-han.com/articles/ai-selection-combination-strategy/</link>
      <pubDate>Sun, 22 Mar 2026 02:01:29 +0800</pubDate>
      <guid>https://ray-han.com/articles/ai-selection-combination-strategy/</guid>
      <description>Effective AI tool selection focuses on distinct workflow scenarios by matching specific tools and models, improving efficiency and cost in product development.</description>
      <content:encoded><![CDATA[<p>Many engineers and teams have already integrated AI into their everyday workflows, but when it comes to selecting tools, they still rely mostly on intuition or reputation. This often leads to fluctuating efficiency and uncontrollable costs. In a fast-iterating product market, chasing the &ldquo;best tool&rdquo; or blindly following benchmarks tends to focus attention on the tools themselves rather than the core question: what specific work scenarios do we need to accomplish?</p>
<p>A more reliable approach treats tool selection like workflow design: first break down your workflow into clear, distinct scenarios—such as daily Q&amp;A, in-depth research, coding execution, code review and merge—and then for each scenario, match the most appropriate tools and models rather than searching for a one-size-fits-all solution. This makes your decisions explainable, replaceable, and stable over the long term—even if specific products change often, the framework remains valid.</p>
<p>Therefore, I recommend a three-step process when selecting AI tools: clarify the responsibilities and boundaries of each tool → match model capabilities to tasks → design layered procurement and redundancy. The combinations below are based on my personal experience from late 2025 to early 2026.</p>
<h2 id="general-ai-assistants-qa-and-research">General AI Assistants: Q&amp;A and Research</h2>
<p>These tools don&rsquo;t interact directly with your code repositories; their roles include answering daily questions, searching information, and supporting deeper, longer-chained research. Separating them from development execution tools helps clarify later selection decisions.</p>
<table>
	<thead>
			<tr>
					<th>Tool</th>
					<th>Main Use</th>
					<th>Notes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Gemini</td>
					<td>Everyday technical Q&amp;A</td>
					<td>Globally stable access, top-tier search ability, strong hallucination control, $15/month good bang for the buck</td>
			</tr>
			<tr>
					<td>Manus</td>
					<td>In-depth research (technical reports, investment analysis)</td>
					<td>Max model is expensive, but output quality justifies cost—$1 buys a logically clear, well-sourced deep analysis</td>
			</tr>
			<tr>
					<td>Google NotebookLM</td>
					<td>Deep research (knowledge organization and summary)</td>
					<td>Uses doc libraries as knowledge sources, supports multi-turn, contextual deep Q&amp;A and synthesis</td>
			</tr>
	</tbody>
</table>
<h2 id="development-tools-idecli-execution-and-delivery">Development Tools (IDE/CLI): Execution and Delivery</h2>
<p>Once you’re in the core development workflow, you need tools that directly interact with code, repositories, and your review process. This layer determines delivery efficiency.</p>
<table>
	<thead>
			<tr>
					<th>Tool</th>
					<th>Core Positioning &amp; Notes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>OpenCode (CLI/Web UI)</td>
					<td>Open-source alternative to Claude Code; fast iteration, strong customizability, stable access. Value lies not in single-point abilities but as an easy-to-access, simple-interaction multi-agent collaboration platform</td>
			</tr>
			<tr>
					<td>GitHub Copilot (Web)</td>
					<td>Typical workflow: select repo, describe requirements, launch VM, automatically fix issues, initiate PR review, discuss changes, merge. Suited for medium-complexity, end-to-end automated tasks</td>
			</tr>
			<tr>
					<td>Zed (Editor)</td>
					<td>Lightweight IDE; can integrate OpenCode in sidebar</td>
			</tr>
			<tr>
					<td><del>Trae, VS Code + Extensions</del></td>
					<td>Deprecated</td>
			</tr>
	</tbody>
</table>
<p>OpenCode&rsquo;s key is the <a href="https://github.com/code-yeongyu/oh-my-openagent">oh-my-opencode</a> plugin, a multi-agent collaboration system with fine-grained role division. Although this design leads to frequent agent interactions, longer task chains, and high token consumption, it ensures delivery quality in complex technical scenarios. Once familiar with interaction patterns and matching models to roles, it supports hours-long, continuous autonomous technical discussions.</p>
<p>GitHub Copilot Web represents a different path: highly integrated, scenario-closed, striving for end-to-end automation. It minimizes multi-turn deep interactions and focuses on one-stop solutions from issue description to code merge. For clearly bounded medium-complexity tasks, it delivers extremely high efficiency and integrates seamlessly with GitHub&rsquo;s development review flow—experience-wise, it&rsquo;s close to contributing full code to open source projects.</p>
<p>Each has its strengths: OpenCode emphasizes control and depth, GitHub Copilot prioritizes automated closed loops. In practice, teams often use both complementarily—OpenCode for complex architectural discussions, Copilot for specific bug fixes.</p>
<h2 id="model-selection-matching-capabilities-by-scenario">Model Selection: Matching Capabilities by Scenario</h2>
<p>After fixing tools, the next step is selecting models tailored to each task scenario.</p>
<p><strong>Domain/business understanding</strong> tasks are special: they depend entirely on user-supplied context (business docs, historical code, decision records). Here pretrained model knowledge can cause hallucinations, so model choice is less sensitive—window size matters more.</p>
<p>Aside from domain understanding, typical scenarios get assigned different models and strategies:</p>
<table>
	<thead>
			<tr>
					<th>Scenario</th>
					<th>Preferred Model</th>
					<th>Secondary/Backup</th>
					<th>Key Considerations &amp; Notes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Task decomposition &amp; workflow planning</strong></td>
					<td>Claude Opus 4.6</td>
					<td>Kimi K2.5</td>
					<td>Requires very strong logic and step planning, understanding complex constraints. Opus is near perfect here.</td>
			</tr>
			<tr>
					<td><strong>Solution and code review</strong></td>
					<td>GPT 5.3-Codex</td>
					<td>Claude Opus 4.6</td>
					<td>Demands strict code quality review, vulnerability detection, and architectural judgment.</td>
			</tr>
			<tr>
					<td><strong>Comprehensive development (architecture discussion and coding)</strong></td>
					<td>Claude Opus 4.6</td>
					<td>GLM-5-Turbo</td>
					<td>Needs instruction-following and deliverable code. GLM-5-Turbo is mostly reliable but less stable.</td>
			</tr>
			<tr>
					<td><strong>Independent closed problem solving</strong></td>
					<td>GPT 5.4 Pro</td>
					<td>-</td>
					<td>Single-model single-agent, good for one-off answer tasks like implementing an algorithm without external input.</td>
			</tr>
			<tr>
					<td><strong>Simple code implementation</strong></td>
					<td>Kimi K2.5</td>
					<td>MiniMax M2.5</td>
					<td>Highly cost-effective for function filling, simple scripts, data transforms. Requires clear scope and small tasks. MiniMax is faster but rougher.</td>
			</tr>
			<tr>
					<td><strong>Search &amp; project understanding</strong></td>
					<td>Any cheap model</td>
					<td>-</td>
					<td>Focuses on combining MCP search and language server calls for live info and code semantics; model capability secondary.</td>
			</tr>
			<tr>
					<td><strong>Multi-language technical writing</strong></td>
					<td>Gemini / GPT / Claude</td>
					<td>-</td>
					<td>Styles differ: Gemini is rigorous, GPT fluent, Claude structurally clear—pick accordingly.</td>
			</tr>
			<tr>
					<td><strong>Chinese tech writing</strong></td>
					<td>Claude Opus 4.6</td>
					<td>GLM-5</td>
					<td>Greater emphasis on logic and accurate expression.</td>
			</tr>
			<tr>
					<td><strong>Development documentation writing</strong></td>
					<td>Claude Opus 4.6</td>
					<td>-</td>
					<td>Needs clear, structured expression of complex technical decisions. Opus has strongest logic.</td>
			</tr>
	</tbody>
</table>
<p>To set expectations quickly: Opus resembles an experienced senior engineer whose outputs still require end-to-end verification; GLM-5 acts like a competent but less stable engineer; Kimi K2.5 and MiniMax M2.5 are cheap interns reliable only on deterministic tasks; Claude Sonnet/Haiku have many better cost-effective Chinese market alternatives and are generally unnecessary.</p>
<h2 id="cloud-service-procurement">Cloud Service Procurement</h2>
<p>Once models and tools are chosen, the final question is procurement. Key rule: don’t put your entire budget on a single vendor; diversify purchases by task risk level and keep redundancy on critical paths.</p>
<table>
	<thead>
			<tr>
					<th>Service</th>
					<th>Monthly Fee</th>
					<th>Notes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Zhipu Coding Plan Pro</td>
					<td>¥499</td>
					<td>Provides GLM-5 and others, but SLA unstable with occasional faults</td>
			</tr>
			<tr>
					<td>Volcano Ark Coding Plan</td>
					<td>¥200</td>
					<td>Average model with delayed updates; benefits are ample quota and low latency, suited for low-cost bulk tasks</td>
			</tr>
			<tr>
					<td>GitHub Copilot Pro+</td>
					<td>$39</td>
					<td>High quota, but token consumption triples when used with Claude Opus 4.6; strict cost control required</td>
			</tr>
			<tr>
					<td>OpenCode Zen</td>
					<td>Pay-as-you-go</td>
					<td>Multi-model aggregation service, deeply integrated with OpenCode ecosystem for unified management and scheduling</td>
			</tr>
			<tr>
					<td>PPIO</td>
					<td>Pay-as-you-go</td>
					<td>Provides GLM-5 service with good latency stability; backup when Zhipu is unstable</td>
			</tr>
	</tbody>
</table>
<h2 id="conclusion">Conclusion</h2>
<p>Efficiency gains come not from chasing the strongest model but from continuously decomposing workflows and matching tools/models to scenarios. You don&rsquo;t need to get everything perfect initially—starting by separating general AI assistants and development execution tools and clearly distinguishing scenarios already beats intuition-based tool selection. Later, refine model division and procurement based on actual pain points and budget.</p>
<p>Note that using multiple tools and models involves switching costs and learning curves, so factor in adaptation time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Breaking Out of the &#34;Never-Ending&#34; Execution Trap</title>
      <link>https://ray-han.com/articles/escape-dev-execution-overload/</link>
      <pubDate>Sun, 15 Mar 2026 21:40:39 +0800</pubDate>
      <guid>https://ray-han.com/articles/escape-dev-execution-overload/</guid>
      <description>Build a public Working Principles doc covering scope, prioritized queue, reserved time, and trivial-task threshold to shift justification burden to requesters.</description>
      <content:encoded><![CDATA[<p>In internet company R&amp;D, there&rsquo;s a common archetype: the engineer drowning in demands. Back-to-back meetings all day, hundreds of unread messages, a backlog that only grows. At the end of the day, it feels like everything got touched but nothing got done. Meanwhile, the high-value long-term work you know matters — value analysis, key technical challenges, system refactoring — never gets started.</p>
<p>If this lasts a week, it&rsquo;s just a busy stretch. If it persists for months, you need to step back and solve the problem differently.</p>
<h2 id="why-this-happens">Why This Happens</h2>
<p>The internet industry moves fast, so this isn&rsquo;t a one-week problem: organizations constantly restructure and chase new growth, iteration cycles are short, and business dependencies are complex. Demands are generated faster than any individual can absorb them. The harder you chase, the further behind you fall. Eventually you&rsquo;re stuck in the weeds, unable to discover new value.</p>
<p>Since you can&rsquo;t finish everything, the real question isn&rsquo;t how to finish it all — it&rsquo;s deciding what to do and what to skip, so you can carve out time for long-term, high-value work.</p>
<p>How do you break out? My recommendation: build a working principles document. Below is what it should contain, why, and how to use it.</p>
<h2 id="how-to-do-it">How to Do It</h2>
<p>The document isn&rsquo;t complicated. Call it &ldquo;Working Principles&rdquo; or something softer like &ldquo;How to Work With [Your Name].&rdquo; Put the link in your team wiki or chat profile so anyone with a request can find it.</p>
<p><strong>Section 1: Define your scope.</strong> State what you&rsquo;re responsible for and what you&rsquo;re not. This lets requesters quickly determine whether they&rsquo;ve found the right person.</p>
<p><strong>Section 2: Prioritized short-term requests.</strong> This is what requesters care about most.</p>
<p>First, lay out your priority principles by category. For example: production incidents &gt; committed deliverables &gt; items blocking others &gt; new business requests &gt; internal optimization and exploratory work. This establishes the overall ordering.</p>
<p>Then within each category, rank by value and urgency, and place them in a table:</p>
<table>
	<thead>
			<tr>
					<th>Type</th>
					<th>Item</th>
					<th>Estimated Value</th>
					<th>Estimated Effort</th>
					<th>Urgency</th>
					<th>Requester</th>
					<th>Expected Delivery</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>…</td>
					<td>…</td>
					<td>…</td>
					<td>…</td>
					<td>…</td>
					<td>…</td>
					<td>…</td>
			</tr>
	</tbody>
</table>
<p>Four key points:</p>
<ol>
<li>The most important column is &ldquo;Estimated Value.&rdquo; If something has no value, urgency alone doesn&rsquo;t justify doing it.</li>
<li>The ordering commits to delivery sequence — items higher up will be completed before items lower down — but it does not promise that everything will eventually get done.</li>
<li>Always estimate expected delivery dates, and include some buffer, because higher-priority requests may arrive at any time.</li>
<li>When a new request comes in, re-sort according to your principles, update delivery estimates, and notify anyone affected.</li>
</ol>
<p><strong>Section 3: Reserve time for high-value work.</strong> Short-term requests carry built-in urgency. If you can never finish them, you&rsquo;ll never have time for long-term work. So the document must explicitly state when long-term work happens. Two common approaches:</p>
<ol>
<li>Block two hours every day.</li>
<li>Block one or two full days per week.</li>
</ol>
<p>Defend the time allocation as a hard floor. If high-value work falls short in a given period, make it up at the start of the next day or week.</p>
<p><strong>Section 4: Handle trivial requests on the spot.</strong> For anything solvable in under ten minutes without a context switch, just do it immediately. Ten minutes is a reference threshold — adjust to your situation, but you must have a concrete number, otherwise everything becomes &ldquo;trivial.&rdquo; For must-do-today trivial items, commit to batching them in a fixed time slot before end of day.</p>
<p>With these four sections, the document is complete.</p>
<h2 id="make-it-public">Make It Public</h2>
<p>Principles that aren&rsquo;t shared don&rsquo;t resolve conflict — they just defer it. But once the document is public, the dynamic flips. As long as the principles are reasonable, requesters will read Section 1 and self-filter, then look at Section 2 to understand your reasoning and timelines.</p>
<p>If someone insists their request is more important, they now need to argue why it should jump the queue — which means making a case against every item ranked above theirs. The burden of justification shifts to the requester, not you. This also gives you a defensible way to push back when your manager drops in something unimportant.</p>
<h2 id="applying-it">Applying It</h2>
<p>People stuck in execution mode share a common habit: they accept every request without weighing it. Their first reaction to any incoming task is &ldquo;what is this and how do I solve it&rdquo; — skipping the prior question of &ldquo;should this be done at all, and how important is it?&rdquo;</p>
<p>So for every incoming request:</p>
<ol>
<li>Invest the effort to determine exactly which section and category it falls into, and where it belongs in the order. This requires communicating around the principles you&rsquo;ve established, understanding the request deeply, and explaining the reasoning to the requester when needed.</li>
<li>Identify where the document doesn&rsquo;t fit reality, and continuously refine both the document and the principles. Turn exceptions into standard cases, and make the standard cases more effective.</li>
</ol>
<h2 id="measuring-effectiveness">Measuring Effectiveness</h2>
<p>You need a set of metrics to verify the system is actually working. I recommend three layers, from low to high:</p>
<table>
	<thead>
			<tr>
					<th>Layer</th>
					<th>What to Watch</th>
					<th>Typical Metrics</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Execution</td>
					<td>Request flow</td>
					<td>Weekly new requests, weekly resolved, backlog size, average delivery time</td>
			</tr>
			<tr>
					<td>Structure</td>
					<td>Time allocation</td>
					<td>Actual ratio of long-term vs. short-term work, trivial-task ratio, number of queue-jumps</td>
			</tr>
			<tr>
					<td>Value</td>
					<td>Value delivered</td>
					<td>What was the highest-value output each cycle, and did it come from long-term or short-term work?</td>
			</tr>
	</tbody>
</table>
<p>The three layers are progressive. But the one that truly matters is the value layer — the other two exist to diagnose which link failed when something goes wrong. Looking only at execution is misleading: high throughput might just mean you&rsquo;re rapidly processing low-value requests. Looking only at structure isn&rsquo;t enough either: spending time on long-term work doesn&rsquo;t guarantee you produced anything new.</p>
<h2 id="closing">Closing</h2>
<p>Before this document exists, you and your requesters have no shared frame of reference — every new request triggers a fresh priority negotiation from scratch. Once the document is published, disputes have a ruleset to reference, and communication shifts from repeated one-on-one explanations to collective trade-offs against a shared set of principles. The work still won&rsquo;t all get done, but the feeling of being dragged along will stop. You can step back and focus on value.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
