<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Telemetry on Tarragon</title><link>https://tarrragon.github.io/blog/tags/telemetry/</link><description>Recent content in Telemetry on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Sun, 26 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/telemetry/index.xml" rel="self" type="application/rss+xml"/><item><title>升級 trigger 的量化設計：「不夠就升 Y」需要明確的「不夠」指標</title><link>https://tarrragon.github.io/blog/report/escalation-trigger-quantification/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/report/escalation-trigger-quantification/</guid><description>&lt;h2 id="結論">結論&lt;/h2>
&lt;p>&lt;a href="../capability-gap-three-layer-escalation/">#86 三層階梯&lt;/a> 的「先 L1、不夠升 L2、再不夠升 L3」協議、最容易失敗的點是「不夠」沒量化：&lt;/p>
&lt;ul>
&lt;li>沒指標 → 永遠覺得「再觀察一下」 → &lt;a href="../external-trigger-for-high-roi-work/">#72 結構性跳過&lt;/a>&lt;/li>
&lt;li>指標模糊 → 哪天該升、哪天不該、無共識&lt;/li>
&lt;li>指標太鬆 → 永遠不升、L1 一直撐到崩&lt;/li>
&lt;li>指標太嚴 → 一個小波動就升、過度工程&lt;/li>
&lt;/ul>
&lt;p>正確設計：&lt;strong>L1 ship 時就同步定 L2 升級的 trigger 條件&lt;/strong> — 閾值、觀測窗口、決策週期、誰負責決策。不是 ship 後再想。&lt;/p>
&lt;hr>
&lt;h2 id="為什麼再觀察一下永遠不會升級">為什麼「再觀察一下」永遠不會升級&lt;/h2>
&lt;p>「ship L1 → 看效果 → 不夠就升 L2」這個 plan 在沒量化時、實際發生的是：&lt;/p>
&lt;ol>
&lt;li>L1 ship、everyone 開心&lt;/li>
&lt;li>偶爾有 user 抱怨、但「不知道是不是夠多」&lt;/li>
&lt;li>沒有明確 baseline、無法判斷「不夠」&lt;/li>
&lt;li>「再觀察一下」變固定回應&lt;/li>
&lt;li>半年過去、L2 沒 ship&lt;/li>
&lt;li>同類 capability gap 在第 N 個 feature 又發生&lt;/li>
&lt;li>「我們系統設計就這樣」變新 baseline&lt;/li>
&lt;/ol>
&lt;p>這是 &lt;a href="../external-trigger-for-high-roi-work/">#72 高 ROI 無外部觸發&lt;/a> 的具體 case — 升級是 L4（外部觸發）需要的工作、靠紀律失敗。&lt;/p>
&lt;hr>
&lt;h2 id="升級-trigger-的四元素">升級 trigger 的四元素&lt;/h2>
&lt;p>完整的升級 trigger 含四個元素：&lt;/p>
&lt;h3 id="1-metric量什麼">1. Metric（量什麼）&lt;/h3>
&lt;p>具體可量化的數字、不是模糊「使用者體驗」：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>場景&lt;/th>
 &lt;th>Bad metric&lt;/th>
 &lt;th>Good metric&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Search prefix-only&lt;/td>
 &lt;td>&amp;ldquo;user 抱怨&amp;rdquo;&lt;/td>
 &lt;td>Empty result 率（query 結果為 0 的比例）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cache miss&lt;/td>
 &lt;td>&amp;ldquo;感覺很慢&amp;rdquo;&lt;/td>
 &lt;td>P95 latency、cache hit ratio&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Retry exhaustion&lt;/td>
 &lt;td>&amp;ldquo;偶爾失敗&amp;rdquo;&lt;/td>
 &lt;td>Retry-then-fail 率&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Stale data&lt;/td>
 &lt;td>&amp;ldquo;user 困惑&amp;rdquo;&lt;/td>
 &lt;td>Manual refresh 觸發率&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Metric 必須：&lt;/p>
&lt;ul>
&lt;li>數值化（有單位、有 baseline）&lt;/li>
&lt;li>自動量測（不靠 manual 收集）&lt;/li>
&lt;li>跟 capability gap 直接相關（不是 proxy 的 proxy）&lt;/li>
&lt;/ul>
&lt;h3 id="2-threshold什麼程度算不夠">2. Threshold（什麼程度算「不夠」）&lt;/h3>
&lt;p>明確閾值、寫進 plan：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">Trigger：當 search empty result 率 &amp;gt; 15% 持續 2 週、升級 L2（C1 fallback）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">Trigger：當 L2 ship 後 fallback 觸發率 &amp;gt; 30%、升級 L3（B1 build-time tokenize）&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>閾值不是猜的、要 justify：&lt;/p>
&lt;ul>
&lt;li>從 baseline 推（現況 X、目標 Y、threshold = 中間某點）&lt;/li>
&lt;li>從業務 SLA 推（acceptable miss rate）&lt;/li>
&lt;li>從成本曲線推（升級成本 = 維持成本）&lt;/li>
&lt;/ul>
&lt;h3 id="3-window觀察多久">3. Window（觀察多久）&lt;/h3>
&lt;p>避免「一個 spike 就升」、也避免「永遠等」：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Metric 性質&lt;/th>
 &lt;th>適合 window&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>高頻 query（每天千次）&lt;/td>
 &lt;td>1-7 天&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>中頻（每天百次）&lt;/td>
 &lt;td>2-4 週&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>低頻（每天個位數）&lt;/td>
 &lt;td>1-3 月&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>偶發 incident&lt;/td>
 &lt;td>累積計數而非時間 window&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Window 太短 = noise 主導、太長 = 真問題拖太久。&lt;/p></description><content:encoded><![CDATA[<h2 id="結論">結論</h2>
<p><a href="../capability-gap-three-layer-escalation/">#86 三層階梯</a> 的「先 L1、不夠升 L2、再不夠升 L3」協議、最容易失敗的點是「不夠」沒量化：</p>
<ul>
<li>沒指標 → 永遠覺得「再觀察一下」 → <a href="../external-trigger-for-high-roi-work/">#72 結構性跳過</a></li>
<li>指標模糊 → 哪天該升、哪天不該、無共識</li>
<li>指標太鬆 → 永遠不升、L1 一直撐到崩</li>
<li>指標太嚴 → 一個小波動就升、過度工程</li>
</ul>
<p>正確設計：<strong>L1 ship 時就同步定 L2 升級的 trigger 條件</strong> — 閾值、觀測窗口、決策週期、誰負責決策。不是 ship 後再想。</p>
<hr>
<h2 id="為什麼再觀察一下永遠不會升級">為什麼「再觀察一下」永遠不會升級</h2>
<p>「ship L1 → 看效果 → 不夠就升 L2」這個 plan 在沒量化時、實際發生的是：</p>
<ol>
<li>L1 ship、everyone 開心</li>
<li>偶爾有 user 抱怨、但「不知道是不是夠多」</li>
<li>沒有明確 baseline、無法判斷「不夠」</li>
<li>「再觀察一下」變固定回應</li>
<li>半年過去、L2 沒 ship</li>
<li>同類 capability gap 在第 N 個 feature 又發生</li>
<li>「我們系統設計就這樣」變新 baseline</li>
</ol>
<p>這是 <a href="../external-trigger-for-high-roi-work/">#72 高 ROI 無外部觸發</a> 的具體 case — 升級是 L4（外部觸發）需要的工作、靠紀律失敗。</p>
<hr>
<h2 id="升級-trigger-的四元素">升級 trigger 的四元素</h2>
<p>完整的升級 trigger 含四個元素：</p>
<h3 id="1-metric量什麼">1. Metric（量什麼）</h3>
<p>具體可量化的數字、不是模糊「使用者體驗」：</p>
<table>
  <thead>
      <tr>
          <th>場景</th>
          <th>Bad metric</th>
          <th>Good metric</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Search prefix-only</td>
          <td>&ldquo;user 抱怨&rdquo;</td>
          <td>Empty result 率（query 結果為 0 的比例）</td>
      </tr>
      <tr>
          <td>Cache miss</td>
          <td>&ldquo;感覺很慢&rdquo;</td>
          <td>P95 latency、cache hit ratio</td>
      </tr>
      <tr>
          <td>Retry exhaustion</td>
          <td>&ldquo;偶爾失敗&rdquo;</td>
          <td>Retry-then-fail 率</td>
      </tr>
      <tr>
          <td>Stale data</td>
          <td>&ldquo;user 困惑&rdquo;</td>
          <td>Manual refresh 觸發率</td>
      </tr>
  </tbody>
</table>
<p>Metric 必須：</p>
<ul>
<li>數值化（有單位、有 baseline）</li>
<li>自動量測（不靠 manual 收集）</li>
<li>跟 capability gap 直接相關（不是 proxy 的 proxy）</li>
</ul>
<h3 id="2-threshold什麼程度算不夠">2. Threshold（什麼程度算「不夠」）</h3>
<p>明確閾值、寫進 plan：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">Trigger：當 search empty result 率 &gt; 15% 持續 2 週、升級 L2（C1 fallback）
</span></span><span class="line"><span class="ln">2</span><span class="cl">Trigger：當 L2 ship 後 fallback 觸發率 &gt; 30%、升級 L3（B1 build-time tokenize）</span></span></code></pre></div><p>閾值不是猜的、要 justify：</p>
<ul>
<li>從 baseline 推（現況 X、目標 Y、threshold = 中間某點）</li>
<li>從業務 SLA 推（acceptable miss rate）</li>
<li>從成本曲線推（升級成本 = 維持成本）</li>
</ul>
<h3 id="3-window觀察多久">3. Window（觀察多久）</h3>
<p>避免「一個 spike 就升」、也避免「永遠等」：</p>
<table>
  <thead>
      <tr>
          <th>Metric 性質</th>
          <th>適合 window</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>高頻 query（每天千次）</td>
          <td>1-7 天</td>
      </tr>
      <tr>
          <td>中頻（每天百次）</td>
          <td>2-4 週</td>
      </tr>
      <tr>
          <td>低頻（每天個位數）</td>
          <td>1-3 月</td>
      </tr>
      <tr>
          <td>偶發 incident</td>
          <td>累積計數而非時間 window</td>
      </tr>
  </tbody>
</table>
<p>Window 太短 = noise 主導、太長 = 真問題拖太久。</p>
<h3 id="4-decision-cadence誰何時how-決策">4. Decision cadence（誰、何時、how 決策）</h3>
<p>「達到 threshold」不該是「自動升級」、是「自動觸發 review」：</p>
<table>
  <thead>
      <tr>
          <th>元素</th>
          <th>設計</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>觸發點</td>
          <td>Threshold 達到時系統自動 alert / 開 issue</td>
      </tr>
      <tr>
          <td>決策者</td>
          <td>預先指定（feature owner / tech lead）</td>
      </tr>
      <tr>
          <td>決策週期</td>
          <td>每月 review / 每 incident review</td>
      </tr>
      <tr>
          <td>決策 output</td>
          <td>&ldquo;升級 / 不升級 + 理由&rdquo;、寫進 log</td>
      </tr>
  </tbody>
</table>
<p>關鍵：<strong>決策動作有人擁有、有頻率</strong>、不靠「想到再看」。</p>
<hr>
<h2 id="l1-ship-時就定-trigger-的範本">L1 ship 時就定 trigger 的範本</h2>
<p>寫 L1 plan 時、同時寫：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c"># L1 (ship now)</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="w"></span><span class="nt">strategy</span><span class="p">:</span><span class="w"> </span><span class="l">UX hint</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="w"></span><span class="nt">goal</span><span class="p">:</span><span class="w"> </span><span class="l">close 50%+ capability gap</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="w"></span><span class="nt">metric</span><span class="p">:</span><span class="w"> </span><span class="l">search empty-result rate</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="w"></span><span class="nt">baseline</span><span class="p">:</span><span class="w"> </span><span class="m">18</span><span class="l">% (measured pre-ship)</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="w"></span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l">&lt; 12% within 4 weeks</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="w"></span><span class="nt">review</span><span class="p">:</span><span class="w"> </span><span class="l">weekly</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="w"></span><span class="c"># L2 trigger (defined now, executes later)</span><span class="w">
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="w"></span><span class="nt">trigger_metric</span><span class="p">:</span><span class="w"> </span><span class="l">empty-result rate</span><span class="w">
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="w"></span><span class="nt">trigger_threshold</span><span class="p">:</span><span class="w"> </span><span class="l">&gt; 15% for 2 consecutive weeks AFTER L1 ship</span><span class="w">
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="w"></span><span class="nt">trigger_owner</span><span class="p">:</span><span class="w"> </span><span class="l">search team</span><span class="w">
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="w"></span><span class="nt">trigger_action</span><span class="p">:</span><span class="w"> </span><span class="l">implement client-side substring fallback (C1)</span><span class="w">
</span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="w"></span><span class="nt">trigger_eta</span><span class="p">:</span><span class="w"> </span><span class="l">within 1 sprint of trigger firing</span><span class="w">
</span></span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="w"></span><span class="c"># L3 trigger (defined now, executes later)</span><span class="w">
</span></span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="w"></span><span class="nt">trigger_metric</span><span class="p">:</span><span class="w"> </span><span class="l">fallback hit rate (after L2 ship)</span><span class="w">
</span></span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="w"></span><span class="nt">trigger_threshold</span><span class="p">:</span><span class="w"> </span><span class="l">&gt; 30% sustained for 4 weeks</span><span class="w">
</span></span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="w"></span><span class="nt">trigger_owner</span><span class="p">:</span><span class="w"> </span><span class="l">search team</span><span class="w">
</span></span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="w"></span><span class="nt">trigger_action</span><span class="p">:</span><span class="w"> </span><span class="l">implement build-time suffix tokens (B1)</span><span class="w">
</span></span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="w"></span><span class="nt">trigger_eta</span><span class="p">:</span><span class="w"> </span><span class="l">within 2 sprints of trigger firing</span></span></span></code></pre></div><p><strong>ship L1 時、L2 / L3 已經有「上膛」的 trigger</strong> — 不靠紀律、靠機制。</p>
<hr>
<h2 id="反模式">反模式</h2>
<table>
  <thead>
      <tr>
          <th>反模式</th>
          <th>後果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>「ship L1、看狀況再說」沒寫 trigger</td>
          <td>永遠不升級（<a href="../external-trigger-for-high-roi-work/">#72</a>）</td>
      </tr>
      <tr>
          <td>Metric 寫「user happiness」（不可量）</td>
          <td>無法觸發</td>
      </tr>
      <tr>
          <td>Threshold 沒 baseline justify</td>
          <td>隨意設、無法防 over/under-trigger</td>
      </tr>
      <tr>
          <td>Window 不寫</td>
          <td>Spike 主導、或永遠等</td>
      </tr>
      <tr>
          <td>Trigger 沒 owner</td>
          <td>達到 threshold 沒人 act</td>
      </tr>
      <tr>
          <td>「達到 threshold = 自動升級」</td>
          <td>缺人工 review、可能 over-react</td>
      </tr>
      <tr>
          <td>達到 threshold 後決策延遲 1+ 個月</td>
          <td>Trigger 失去 timely value</td>
      </tr>
      <tr>
          <td>L1 / L2 / L3 升級 trigger 共用同 metric</td>
          <td>升級到 L2 後 L3 trigger 沒 reset</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="何時不需要量化-trigger">何時不需要量化 trigger</h2>
<table>
  <thead>
      <tr>
          <th>情境</th>
          <th>為什麼</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>L1 已知不夠（事前已有 evidence）</td>
          <td>直接 ship L2、不用 trigger</td>
      </tr>
      <tr>
          <td>L1 是 placeholder、L2 / L3 同 PR 一起 ship</td>
          <td>沒有「升級」、是分批</td>
      </tr>
      <tr>
          <td>問題範圍小（只影響 &lt; 1% user）</td>
          <td>量化成本 &gt; 收益</td>
      </tr>
      <tr>
          <td>MVP / 探索期</td>
          <td>規則還在演化、強行 trigger 可能卡死探索</td>
      </tr>
      <tr>
          <td>Internal tool、used by &lt; 10 人</td>
          <td>直接問 user、不需 metric</td>
      </tr>
  </tbody>
</table>
<p>五類共通：<strong>量化的成本 &gt; 量化的收益</strong>。其他情境必量。</p>
<hr>
<h2 id="跟其他抽象層原則的關係">跟其他抽象層原則的關係</h2>
<table>
  <thead>
      <tr>
          <th>原則</th>
          <th>關係</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="../capability-gap-three-layer-escalation/">#86 Capability gap 三層階梯</a></td>
          <td>#86 講升級階梯、本卡講升級 trigger 設計</td>
      </tr>
      <tr>
          <td><a href="../external-trigger-for-high-roi-work/">#72 高 ROI 無外部觸發</a></td>
          <td>沒 trigger 升級就是高 ROI 無觸發、本卡是補上 trigger 的方法</td>
      </tr>
      <tr>
          <td><a href="../incremental-shipping-criteria/">#76 分批 ship</a></td>
          <td>分批 ship 的「下輪」需要 trigger、本卡定 trigger</td>
      </tr>
      <tr>
          <td><a href="../verification-timeline-checkpoints/">#68 驗收的時間軸</a></td>
          <td>Trigger 是 ship 後 checkpoint 的具體形式</td>
      </tr>
      <tr>
          <td><a href="../two-occurrence-threshold/">#42 2 次門檻</a></td>
          <td>升級 trigger 通常是「N 次失敗」累積、跟 #42 同骨</td>
      </tr>
      <tr>
          <td><a href="../pattern-honest-progress-ui/">#62 誠實進度 UI</a></td>
          <td>Trigger metric 公開 = 誠實進度的數據版本</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="套用到當前-search-planning-case">套用到當前 search planning case</h2>
<p>D + C1 ship 時、應同步定：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c"># D + C1 (ship together)</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="w"></span><span class="nt">strategy</span><span class="p">:</span><span class="w"> </span><span class="l">L1 UX hint + L2 title-only substring fallback</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="w"></span><span class="nt">metric</span><span class="p">:</span><span class="w"> </span><span class="l">search empty-result rate, fallback hit rate</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="w"></span><span class="nt">baseline</span><span class="p">:</span><span class="w"> </span><span class="l">TBD (instrument at ship time)</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="w"></span><span class="c"># B1 trigger (defined now)</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="w"></span><span class="nt">trigger_metric</span><span class="p">:</span><span class="w"> </span><span class="l">fallback hit rate (C1)</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="w"></span><span class="nt">trigger_threshold</span><span class="p">:</span><span class="w"> </span><span class="l">&gt; 30% sustained for 4 weeks</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="w">       </span><span class="l">OR full-content fallback request from user (manual signal)</span><span class="w">
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="w"></span><span class="nt">trigger_owner</span><span class="p">:</span><span class="w"> </span><span class="l">你（個人 blog 沒 team）</span><span class="w">
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="w"></span><span class="nt">trigger_action</span><span class="p">:</span><span class="w"> </span><span class="l">實作 Hugo template suffix tokens (B1)</span><span class="w">
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="w"></span><span class="nt">trigger_review_cadence</span><span class="p">:</span><span class="w"> </span><span class="l">每月 review search analytics</span><span class="w">
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="w"></span><span class="c"># 降級 trigger（補強 #86）</span><span class="w">
</span></span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="w"></span><span class="nt">degrade_metric</span><span class="p">:</span><span class="w"> </span><span class="l">B1 maintenance cost / build pipeline complexity</span><span class="w">
</span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="w"></span><span class="nt">degrade_signal</span><span class="p">:</span><span class="w"> </span><span class="l">升級 Pagefind / Hugo 時 B1 broken 第 N 次</span><span class="w">
</span></span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="w"></span><span class="nt">degrade_action</span><span class="p">:</span><span class="w"> </span><span class="l">revisit 是否該換 search engine（換工具 vs 維 transformation）</span></span></span></code></pre></div><p><strong>Pre-ship 把 trigger 寫好</strong> = ship L1 時 L2 / L3 都「上膛」。下次 review 看數據、自動知道該不該升。</p>
<hr>
<h2 id="判讀徵兆">判讀徵兆</h2>
<table>
  <thead>
      <tr>
          <th>訊號</th>
          <th>該做的事</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Plan 寫「ship 後再看」沒 trigger</td>
          <td>補 trigger</td>
      </tr>
      <tr>
          <td>「再觀察一下」第 3 次出現</td>
          <td>量化 trigger 不夠、明確閾值</td>
      </tr>
      <tr>
          <td>Metric 是「user 抱怨數」</td>
          <td>補可量化指標、別只靠 anecdote</td>
      </tr>
      <tr>
          <td>Threshold 沒 baseline 對比</td>
          <td>量現況、justify threshold</td>
      </tr>
      <tr>
          <td>達到 threshold 但沒人 act</td>
          <td>Trigger 沒 owner、補</td>
      </tr>
      <tr>
          <td>Window 太短、被 spike 觸發</td>
          <td>加 window、要求持續</td>
      </tr>
      <tr>
          <td>L1 ship 後沒重看 trigger</td>
          <td>設 cadence、定期 review</td>
      </tr>
      <tr>
          <td>「達到 trigger 太久才執行」</td>
          <td>ETA 沒寫、補</td>
      </tr>
  </tbody>
</table>
<p><strong>核心</strong>：升級 trigger 的設計<strong>跟 ship plan 同步寫、不是 ship 後才想</strong>。沒 trigger = 不會升級 = capability gap 永遠在 L1 撐住。<strong>「再觀察一下」是缺 trigger 的訊號、不是「我謹慎」的訊號</strong>。</p>
]]></content:encoded></item></channel></rss>