<?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>Technical-Writing on Tarragon</title><link>https://tarrragon.github.io/blog/tags/technical-writing/</link><description>Recent content in Technical-Writing on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Tue, 19 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/technical-writing/index.xml" rel="self" type="application/rss+xml"/><item><title>Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%</title><link>https://tarrragon.github.io/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/</guid><description>&lt;p>本文記錄 migration-playbook-methodology 這套寫作方法論前三輪 batch dogfood（實際寫文章驗證方法論）的演化過程（skill 已累積到六輪、本文記錄前三輪）。操作步驟維護在 &lt;code>.claude/skills/migration-playbook-methodology/&lt;/code>，本文只保留 retrospective — 每一輪跑出來學到什麼、哪些假設被推翻。&lt;/p>
&lt;h2 id="為什麼-migration-playbook-需要自己的方法論">為什麼 migration playbook 需要自己的方法論&lt;/h2>
&lt;p>Migration playbook 跟 &lt;a href="https://tarrragon.github.io/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/" data-link-title="Vendor 深度技術文章方法論的演化紀錄：同 vendor 系列的開場輪替驗證" data-link-desc="vendor overview 飽和後要寫單一功能深度文章、需要選題與結構依據時回來。這套方法論的驗證來源與 cadence variant 在高風險場景（同 vendor sub-tool 系列）的實證。">single feature deep article&lt;/a> 是不同 content category：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>維度&lt;/th>
 &lt;th>Deep article&lt;/th>
 &lt;th>Migration playbook&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>主題形狀&lt;/td>
 &lt;td>Single feature（pgBouncer / Vault dynamic credential）&lt;/td>
 &lt;td>Cross-vendor process（Splunk → Elastic）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>結構&lt;/td>
 &lt;td>6-section（problem → concept → config → failure → capacity → integration）&lt;/td>
 &lt;td>6 種不同 type、各對應不同結構&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>重點章節&lt;/td>
 &lt;td>Step-by-step 配置 + 故障演練&lt;/td>
 &lt;td>視 type 不同：phased flow / parallel streams / hybrid&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>寫作週期 / 篇&lt;/td>
 &lt;td>1-2 小時&lt;/td>
 &lt;td>2-3 小時（diff dimension audit + 結構選擇 + 寫作）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>跨篇 cadence 風險&lt;/td>
 &lt;td>中（章節 1 entry 容易 collapse）&lt;/td>
 &lt;td>高（migration 主題本質相似、主題語意 attractor「為什麼遷」明顯）&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>關鍵差異：deep article 是 single direction implementation、migration playbook 是 bidirectional comparison + process。第一輪寫了 5 篇後發現結構完全不同；嘗試套 deep article 的固定結構都只對 1 種情境適用，於是用 diff dimension audit（寫前評估 source/target 在哪些維度差異最大）選對應的結構模板（Type A-F，依主導差異維度決定）。&lt;/p>
&lt;h2 id="第一輪-batch5-篇type-a-e-浮現--cadence-collapse-35">第一輪 batch（5 篇）：Type A-E 浮現 + cadence collapse 3/5&lt;/h2>
&lt;p>第一輪寫了 5 篇跨 vendor migration playbook，每篇自然對映到一種 type（結構模板）：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/splunk/migrate-to-elastic-security/" data-link-title="Splunk → Elastic Security Detection Rule Migration：6 段 phased playbook 跟 5 大踩雷" data-link-desc="從 Splunk Enterprise Security 遷到 Elastic Security 的 detection rule translation playbook：SPL ↔ KQL/ES|QL schema 對位、AI-assisted translation pipeline、parallel run 比對、cutover routing、5 個 production 踩雷（macro 沒對應 / time zone 差異 / summary index 不對位 / alert dedup key 衝突 / 過早 decommission）、capacity / cost 對照">Splunk → Elastic Security&lt;/a> — Type A phased translation&lt;/li>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/vendors/redis/migrate-to-dragonflydb/" data-link-title="Redis → DragonflyDB：drop-in 相容下的容量躍升 &amp;#43; 5 個踩雷" data-link-desc="DragonflyDB 號稱 Redis drop-in 替代、單機 throughput 25x、記憶體效率 30% 提升；遷移流程簡單但有 5 個 production 踩雷（RDB 版本差 / Lua 腳本不全支援 / Pub-Sub fanout 行為差異 / Cluster mode 兼容度 / Modules 不支援）、跟 Sentinel / Cluster 模式對位">Redis → DragonflyDB&lt;/a> — Type B drop-in&lt;/li>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/postgresql/migrate-to-aurora/" data-link-title="PostgreSQL → Aurora Migration：protocol 相容、operational 重設計" data-link-desc="Aurora 號稱 PostgreSQL-compatible 但 operational model 不同（storage decouple / cluster endpoint / instance class / 自家備份）；遷移流程是混合（protocol drop-in &amp;#43; operational phased）、5 個 production 踩雷（extension 不支援 / replication slot 不直通 / autovacuum 行為差 / IAM 認證強制 / cost model 換算）、跟 Patroni / read replica / DR 對位">PostgreSQL → Aurora&lt;/a> — Type C operational hybrid&lt;/li>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/backend/04-observability/vendors/datadog/migrate-to-grafana-stack/" data-link-title="Datadog → Grafana Stack：把 $50K/month bill 拆解到 self-hosted observability" data-link-desc="Datadog 五層計費（host APM / metric / log ingest / log retention / RUM）拆解、對位 Grafana Stack（Mimir / Loki / Tempo / Grafana / Alloy）的 5 層責任；OTel-based agent migration、5 個 production 踩雷（cardinality 爆 / log volume cost / dashboard 不直接轉 / alert routing 換邏輯 / SLO definition 差異）、cost reality check">Datadog → Grafana Stack&lt;/a> — Type D parallel streams&lt;/li>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/backend/03-message-queue/vendors/kafka/migrate-from-to-nats/" data-link-title="Kafka ↔ NATS：不是 migration、是 messaging paradigm 重設計" data-link-desc="Kafka 跟 NATS 不是同類產品（log-based event streaming vs subject-based messaging）、&amp;#39;migration&amp;#39; 字面上不成立；本文釐清兩家 paradigm 邊界、什麼情境真的能換、application 模式重設計的 5 個踩雷（consumer offset 觀念差 / retention model / exactly-once 假設 / schema registry 缺位 / fan-out 模式差）、跟 JetStream 對位 &amp;#43; 混合架構">Kafka ↔ NATS&lt;/a> — Type E paradigm shift&lt;/li>
&lt;/ul>
&lt;h3 id="cadence-collapse前-3-篇被動寫作全部同質化">Cadence collapse：前 3 篇被動寫作全部同質化&lt;/h3>
&lt;p>Cadence collapse 指批量寫作時、多篇文章的開場句型不自覺重複同一模式。&lt;/p></description><content:encoded><![CDATA[<p>本文記錄 migration-playbook-methodology 這套寫作方法論前三輪 batch dogfood（實際寫文章驗證方法論）的演化過程（skill 已累積到六輪、本文記錄前三輪）。操作步驟維護在 <code>.claude/skills/migration-playbook-methodology/</code>，本文只保留 retrospective — 每一輪跑出來學到什麼、哪些假設被推翻。</p>
<h2 id="為什麼-migration-playbook-需要自己的方法論">為什麼 migration playbook 需要自己的方法論</h2>
<p>Migration playbook 跟 <a href="/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/" data-link-title="Vendor 深度技術文章方法論的演化紀錄：同 vendor 系列的開場輪替驗證" data-link-desc="vendor overview 飽和後要寫單一功能深度文章、需要選題與結構依據時回來。這套方法論的驗證來源與 cadence variant 在高風險場景（同 vendor sub-tool 系列）的實證。">single feature deep article</a> 是不同 content category：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>Deep article</th>
          <th>Migration playbook</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>主題形狀</td>
          <td>Single feature（pgBouncer / Vault dynamic credential）</td>
          <td>Cross-vendor process（Splunk → Elastic）</td>
      </tr>
      <tr>
          <td>結構</td>
          <td>6-section（problem → concept → config → failure → capacity → integration）</td>
          <td>6 種不同 type、各對應不同結構</td>
      </tr>
      <tr>
          <td>重點章節</td>
          <td>Step-by-step 配置 + 故障演練</td>
          <td>視 type 不同：phased flow / parallel streams / hybrid</td>
      </tr>
      <tr>
          <td>寫作週期 / 篇</td>
          <td>1-2 小時</td>
          <td>2-3 小時（diff dimension audit + 結構選擇 + 寫作）</td>
      </tr>
      <tr>
          <td>跨篇 cadence 風險</td>
          <td>中（章節 1 entry 容易 collapse）</td>
          <td>高（migration 主題本質相似、主題語意 attractor「為什麼遷」明顯）</td>
      </tr>
  </tbody>
</table>
<p>關鍵差異：deep article 是 single direction implementation、migration playbook 是 bidirectional comparison + process。第一輪寫了 5 篇後發現結構完全不同；嘗試套 deep article 的固定結構都只對 1 種情境適用，於是用 diff dimension audit（寫前評估 source/target 在哪些維度差異最大）選對應的結構模板（Type A-F，依主導差異維度決定）。</p>
<h2 id="第一輪-batch5-篇type-a-e-浮現--cadence-collapse-35">第一輪 batch（5 篇）：Type A-E 浮現 + cadence collapse 3/5</h2>
<p>第一輪寫了 5 篇跨 vendor migration playbook，每篇自然對映到一種 type（結構模板）：</p>
<ul>
<li><a href="/blog/backend/07-security-data-protection/vendors/splunk/migrate-to-elastic-security/" data-link-title="Splunk → Elastic Security Detection Rule Migration：6 段 phased playbook 跟 5 大踩雷" data-link-desc="從 Splunk Enterprise Security 遷到 Elastic Security 的 detection rule translation playbook：SPL ↔ KQL/ES|QL schema 對位、AI-assisted translation pipeline、parallel run 比對、cutover routing、5 個 production 踩雷（macro 沒對應 / time zone 差異 / summary index 不對位 / alert dedup key 衝突 / 過早 decommission）、capacity / cost 對照">Splunk → Elastic Security</a> — Type A phased translation</li>
<li><a href="/blog/backend/02-cache-redis/vendors/redis/migrate-to-dragonflydb/" data-link-title="Redis → DragonflyDB：drop-in 相容下的容量躍升 &#43; 5 個踩雷" data-link-desc="DragonflyDB 號稱 Redis drop-in 替代、單機 throughput 25x、記憶體效率 30% 提升；遷移流程簡單但有 5 個 production 踩雷（RDB 版本差 / Lua 腳本不全支援 / Pub-Sub fanout 行為差異 / Cluster mode 兼容度 / Modules 不支援）、跟 Sentinel / Cluster 模式對位">Redis → DragonflyDB</a> — Type B drop-in</li>
<li><a href="/blog/backend/01-database/vendors/postgresql/migrate-to-aurora/" data-link-title="PostgreSQL → Aurora Migration：protocol 相容、operational 重設計" data-link-desc="Aurora 號稱 PostgreSQL-compatible 但 operational model 不同（storage decouple / cluster endpoint / instance class / 自家備份）；遷移流程是混合（protocol drop-in &#43; operational phased）、5 個 production 踩雷（extension 不支援 / replication slot 不直通 / autovacuum 行為差 / IAM 認證強制 / cost model 換算）、跟 Patroni / read replica / DR 對位">PostgreSQL → Aurora</a> — Type C operational hybrid</li>
<li><a href="/blog/backend/04-observability/vendors/datadog/migrate-to-grafana-stack/" data-link-title="Datadog → Grafana Stack：把 $50K/month bill 拆解到 self-hosted observability" data-link-desc="Datadog 五層計費（host APM / metric / log ingest / log retention / RUM）拆解、對位 Grafana Stack（Mimir / Loki / Tempo / Grafana / Alloy）的 5 層責任；OTel-based agent migration、5 個 production 踩雷（cardinality 爆 / log volume cost / dashboard 不直接轉 / alert routing 換邏輯 / SLO definition 差異）、cost reality check">Datadog → Grafana Stack</a> — Type D parallel streams</li>
<li><a href="/blog/backend/03-message-queue/vendors/kafka/migrate-from-to-nats/" data-link-title="Kafka ↔ NATS：不是 migration、是 messaging paradigm 重設計" data-link-desc="Kafka 跟 NATS 不是同類產品（log-based event streaming vs subject-based messaging）、&#39;migration&#39; 字面上不成立；本文釐清兩家 paradigm 邊界、什麼情境真的能換、application 模式重設計的 5 個踩雷（consumer offset 觀念差 / retention model / exactly-once 假設 / schema registry 缺位 / fan-out 模式差）、跟 JetStream 對位 &#43; 混合架構">Kafka ↔ NATS</a> — Type E paradigm shift</li>
</ul>
<h3 id="cadence-collapse前-3-篇被動寫作全部同質化">Cadence collapse：前 3 篇被動寫作全部同質化</h3>
<p>Cadence collapse 指批量寫作時、多篇文章的開場句型不自覺重複同一模式。</p>
<table>
  <thead>
      <tr>
          <th>篇</th>
          <th>Variant 規劃</th>
          <th>章節 1 entry framing</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1 Splunk → Elastic</td>
          <td>被動</td>
          <td>「為什麼遷：cost / multi-vendor / cloud-native」</td>
      </tr>
      <tr>
          <td>2 Redis → DragonflyDB</td>
          <td>被動</td>
          <td>「為什麼遷：cost / single-thread / multi-tenancy」</td>
      </tr>
      <tr>
          <td>3 Postgres → Aurora</td>
          <td>被動</td>
          <td>「為什麼遷：operational cost / HA / DR」</td>
      </tr>
      <tr>
          <td>4 Datadog → Grafana</td>
          <td>主動</td>
          <td>「$50K/month bill 拆解」</td>
      </tr>
      <tr>
          <td>5 Kafka ↔ NATS</td>
          <td>主動</td>
          <td>「『Kafka → NATS migration』字面上不成立」</td>
      </tr>
  </tbody>
</table>
<p>3/5 collapse — 主題語意 attractor「為什麼遷：X / Y / Z driver」在前 3 篇被動寫作下浮現。寫第 4 篇前發現問題、後 2 篇主動換 entry variant。</p>
<p>前 3 篇的 collapse 是 Stage 0 variant 規劃成為硬需求的直接證據。</p>
<h3 id="type-a-e-怎麼浮現">Type A-E 怎麼浮現</h3>
<p>5 篇寫完後比對結構、發現 5 篇結構完全不同，但都可以用「主導差異維度」解釋：schema 差為主 → phased translation、全 Low → drop-in、operational 差為主 → hybrid。Type A-E 從這 5 篇的歸納中浮現，第二輪 dogfood 再加上 Type F（topology re-layout）。</p>
<h2 id="第二輪-batch5-篇漏類驗證--多軸-high-實證">第二輪 batch（5 篇）：漏類驗證 + 多軸 High 實證</h2>
<p>第二輪刻意選漏類場景驗證 self-aware limitation：</p>
<ul>
<li><a href="/blog/backend/01-database/vendors/postgresql/major-version-upgrade/" data-link-title="PostgreSQL major version upgrade (14 → 17)：為什麼這篇不套 5 type migration" data-link-desc="PostgreSQL major version upgrade 是 *5 type 漏類* 的實證 — source/target 同 vendor、5 維度都 Low 但 *upgrade-specific audit* 是核心；本文結構接近 deep article methodology 的 6-section &#43; 額外 upgrade audit 段；涵蓋 pg_upgrade / logical replication / blue-green 三方法、extension 相容性、5 production 踩雷">PostgreSQL major version upgrade (14 → 17)</a> — 漏類驗證（同 vendor）</li>
<li><a href="/blog/backend/02-cache-redis/vendors/redis/cluster-resharding/" data-link-title="Redis Cluster Re-sharding：source = target，但 topology 重劃的 5 段流程" data-link-desc="Redis cluster re-sharding 是 5 type migration 漏類實證 — source / target 同 cluster、無 schema / paradigm 差、但 16384 slot 重分配是核心；本文涵蓋 4 種 re-sharding driver、slot migration 機制、redis-cli --cluster rebalance / reshard 工具、5 個 production 踩雷（cluster busy / replica lag / client cache stale / cross-slot transaction / monitor gap）">Redis cluster re-sharding</a> — 漏類驗證（topology 重劃）→ Type F 浮現</li>
<li><a href="/blog/backend/01-database/vendors/postgresql/migrate-to-cockroachdb/" data-link-title="PostgreSQL → CockroachDB：三維皆 High 的多重歸類 migration" data-link-desc="PostgreSQL → CockroachDB 是 Schema / Operational / Paradigm 三維皆 High 的 multi-axis migration、實證 [#127](/report/content-structure-by-max-diff-dimension/) 的「多重歸類跟 tie-breaking」規則；主結構走 Type E paradigm shift、Schema 差 &#43; Operational redesign 抽出獨立段；涵蓋 transaction model 重設計、SQL dialect gap、5 個 production 踩雷">PostgreSQL → CockroachDB</a> — 三維 High multi-axis 驗證</li>
<li><a href="/blog/backend/01-database/vendors/mysql/migrate-to-postgresql/" data-link-title="MySQL → PostgreSQL：從 SQL dialect diff 跑出來的 Type A 6-phase migration" data-link-desc="MySQL → PostgreSQL 是 Type A 高 schema 差 migration 的標準形態 — SQL dialect / collation / case sensitivity / replication 模型差異主導；用 pgloader / AWS DMS / 自管 dual-write 三條 path、5 個 production 踩雷（auto_increment vs SERIAL / charset 跟 collation / case sensitivity / index syntax / triggers）">MySQL → PostgreSQL</a> — Type A 標準形態（263 行）</li>
<li><a href="/blog/backend/01-database/vendors/mongodb/migrate-to-atlas/" data-link-title="MongoDB → Atlas：Atlas 不是 MongoDB &#43; managed、是另一個 product" data-link-desc="Atlas 號稱「MongoDB managed」但 operational model 完全不同（auto-scaling / VPC peering / IAM-driven access / 內建 backup / billing 模型）；本文採用 Type C operational redesign hybrid 結構、4-phase operational migration &#43; drop-in cutover、5 個 production 踩雷（連線數限制 / IP whitelist / backup retention / IAM token 過期 / billing 暴漲）">MongoDB → Atlas</a> — Type C 標準形態（349 行）</li>
</ul>
<p>Stage 0 variant 規劃從第二輪開始全面啟用，cadence collapse 從 3/5 降到 0/5。</p>
<h3 id="驗證成立的-4-項預測">驗證成立的 4 項預測</h3>
<ol>
<li><strong>5 type 漏類確認</strong>：major version upgrade + re-sharding 結構跟 5 type 完全不同</li>
<li><strong>多重歸類 + tie-breaking 規則成立</strong>：PostgreSQL → CockroachDB 三維皆 High、按主導維度走 Type E + 高維度獨立段</li>
<li><strong>Type A / Type C 標準形態仍適用</strong>：MySQL → PostgreSQL + MongoDB → Atlas 走標準模板</li>
<li><strong>Stage 0 variant 規劃硬需求</strong>：第二輪 5 篇全主動 variant、collapse 0/5</li>
</ol>
<h3 id="浮現的-3-項新議題">浮現的 3 項新議題</h3>
<ol>
<li><strong>新 audit 維度（data topology）</strong>：re-sharding 揭露 5 維度沒「topology」軸 → 擴到 6 維</li>
<li><strong>「為什麼這篇不套」是漏類文章標準 frame</strong>：major-version-upgrade + cluster-resharding 都用這個 frame 開頭</li>
<li><strong>「高維度獨立段」升級為 multi-axis migration 標準結構元素</strong></li>
</ol>
<h2 id="第三輪-batch5-篇type-f-dogfood--候選軸驗證">第三輪 batch（5 篇）：Type F dogfood + 候選軸驗證</h2>
<p>第三輪驗證 data topology audit dimension 的 self-aware limitation 4 條 tripwire：</p>
<ul>
<li><a href="/blog/backend/01-database/vendors/postgresql/partition-redesign/" data-link-title="PostgreSQL Partition Redesign：當 monthly partition 越跑越慢" data-link-desc="PostgreSQL partition redesign 是 Type F「topology re-layout」第 2 個 dogfood — 從 monthly partition 改 daily / 從 range 改 list / 從單軸改 sub-partition；6 維 audit 皆 Low &#43; topology 軸 High；涵蓋 partition 不平衡偵測、ATTACH/DETACH 線上重劃、5 個 production 踩雷、跟 partition_pruning &#43; autovacuum 整合">PostgreSQL partition redesign</a>（246 行）— Type F dogfood #2</li>
<li><a href="/blog/backend/01-database/vendors/mongodb/shard-expansion-multi-dc/" data-link-title="MongoDB Shard Expansion &#43; Multi-DC：Type F「不需要 parallel run」的 multi-region 例外" data-link-desc="MongoDB sharded cluster 加 shard &#43; 跨 DC expansion 是 Type F「topology re-layout」第 3 個 dogfood — 同時改 sharding &#43; replication topology &#43; region distribution；驗證 [#128](/report/data-topology-as-audit-dimension/) self-aware limitation 第 3 點「Type F 不需要 parallel run」claim 的例外（multi-region rollout 必須 parallel run &#43; 切流量）；涵蓋 chunk migration / replica set add member / cross-DC routing">MongoDB shard + multi-DC expansion</a>（291 行）— Type F dogfood #3 + parallel run 例外實證</li>
<li><a href="/blog/backend/07-security-data-protection/vendors/hashicorp-vault/migrate-to-aws-secrets-manager/" data-link-title="Vault → AWS Secrets Manager：「secret」不是「secret」、identity model 才是核心差異" data-link-desc="Vault → AWS Secrets Manager migration 表面是 secret store 替換、實際核心是 identity model 對位（Vault token &#43; policy vs AWS IAM &#43; resource policy）；驗證 [#128](/report/data-topology-as-audit-dimension/) self-aware limitation 提出的 identity axis 候選 — identity 是否獨立 audit 軸；5 個 production 踩雷（IAM principal 對位 / dynamic credential 對等失敗 / lease lifecycle 模型不同 / audit log 結構差 / 計費模型反轉）">Vault → AWS Secrets Manager</a>（272 行）— Identity axis 候選（45% 工作量）</li>
<li><a href="/blog/backend/01-database/vendors/dynamodb/consistency-model-optimization/" data-link-title="DynamoDB Strongly Consistent → Eventually Consistent：same protocol, different contract" data-link-desc="DynamoDB consistency model 從 strongly consistent read 改 eventually consistent read 是 50% cost 優化但風險集中在 application contract — 同 vendor / 同 protocol / 同 table / 不同 read consistency；驗證 [#128](/report/data-topology-as-audit-dimension/) self-aware limitation 提出的 consistency axis 候選；涵蓋 read pattern audit / 5 個 production 踩雷">DynamoDB consistency model optimization</a>（249 行）— Consistency axis 候選（85% 工作量）</li>
<li><a href="/blog/backend/01-database/vendors/postgresql/multi-region-gdpr-rollout/" data-link-title="PostgreSQL Multi-Region GDPR Rollout：政策驅動的 migration 屬本 methodology 嗎" data-link-desc="PostgreSQL 單 region → multi-region 同時滿足 GDPR EU residency 是 *政策驅動* 兼 *topology 變動* 兼 *operational redesign* 的多軸 migration；驗證 [#128](/report/data-topology-as-audit-dimension/) self-aware limitation 提出的 residency axis 候選 — residency 是 driver 還是獨立 audit 軸；涵蓋 logical replication 配 GDPR / 5 個 production 踩雷 / cross-region cost">PostgreSQL multi-region GDPR rollout</a>（238 行）— Residency axis 候選（40% 工作量）</li>
</ul>
<p>第三輪維持 collapse 0/5，但 Type F 分裂出 sub-type（F-cluster vs F-multi-region），框架仍在演化。</p>
<h3 id="累積-evidence">累積 evidence</h3>
<ul>
<li><strong>Type F sub-type 浮現</strong>：F-cluster（單 cluster 內、不需 parallel run）vs F-multi-region（跨 region、需 parallel run）</li>
<li><strong>3 軸候選確認可獨立</strong>：identity / consistency / residency 各帶 30-85% 獨立工作量；累積到 3-5 case / 軸後考慮升 audit 7-9 維</li>
<li><strong>Residency 是 cross-cutting constraint</strong>：不只是 driver、反向約束 topology + operational + application</li>
</ul>
<h2 id="三輪對照方法論的演化軌跡">三輪對照：方法論的演化軌跡</h2>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>第一輪（5 篇）</th>
          <th>第二輪（5 篇）</th>
          <th>第三輪（5 篇）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Type 集合</td>
          <td>A-E（5 type）</td>
          <td>A-F（+Type F）</td>
          <td>A-F + sub-type</td>
      </tr>
      <tr>
          <td>Audit 維度</td>
          <td>5 維</td>
          <td>6 維（+topology）</td>
          <td>6 維 + 3 候選軸</td>
      </tr>
      <tr>
          <td>Cadence collapse</td>
          <td>3/5 (60%)</td>
          <td>0/5 (0%)</td>
          <td>0/5 (0%)</td>
      </tr>
      <tr>
          <td>Variant 規劃</td>
          <td>被動 → 主動</td>
          <td>全主動</td>
          <td>全主動</td>
      </tr>
      <tr>
          <td>總行數</td>
          <td>~1,200</td>
          <td>1,389</td>
          <td>1,292</td>
      </tr>
      <tr>
          <td>單篇行數</td>
          <td>200-300</td>
          <td>263-349</td>
          <td>238-288</td>
      </tr>
  </tbody>
</table>
<p>關鍵轉折是第一輪到第二輪：後續批次未再觀察到 collapse。</p>
<h2 id="self-aware-limitation">Self-aware limitation</h2>
<p>本 methodology 從 15 篇 migration playbook dogfood 抽出 6 type；已知 limitation：</p>
<ul>
<li><strong>6 type 非窮盡</strong>：major version upgrade / merger consolidation 等情境不在 6 type 內</li>
<li><strong>多重歸類常見</strong>：實際 source/target 配對很少完美對映單一 type</li>
<li><strong>「主導維度」需 judgment</strong>：優先序是 audience-dependent heuristic、不是 universal 規則</li>
<li><strong>Collapse 歸因有共變因素</strong>：第二輪以後 collapse 消失，但同時作者已有第一輪經驗、且知道自己在測量 cadence（Hawthorne effect）。Stage 0 variant 規劃是介入手段之一，無法完全隔離歸因。N=5 的二項信賴區間也無法排除偶然</li>
<li><strong>候選軸未 commit</strong>：identity / consistency / residency 各 N=1、累積到 3-5 case / 軸後才考慮升維</li>
</ul>
<p>本 methodology 接受 evolution、不假裝穩定。</p>
<h2 id="相關連結">相關連結</h2>
<ul>
<li>Migration Playbook Methodology skill（<code>.claude/skills/migration-playbook-methodology/</code>）— 操作步驟（6 維 audit、6 type、Stage 0 variant、4-reviewer）</li>
<li><a href="/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/" data-link-title="Vendor 深度技術文章方法論的演化紀錄：同 vendor 系列的開場輪替驗證" data-link-desc="vendor overview 飽和後要寫單一功能深度文章、需要選題與結構依據時回來。這套方法論的驗證來源與 cadence variant 在高風險場景（同 vendor sub-tool 系列）的實證。">Vendor deep article methodology</a> — sibling、處理 single feature implementation</li>
<li><a href="/blog/posts/case-first--agent-team-review%E6%95%99%E5%AD%B8%E5%85%A7%E5%AE%B9%E7%9A%84%E7%94%9F%E7%94%A2%E6%B5%81%E7%A8%8B/" data-link-title="Case-First &#43; Agent Team Review：教學內容的生產流程" data-link-desc="Case-first &#43; agent team review 的教學內容生產流程：讀案例庫抽 findings、專責 reviewer 平行審查、polish pass 收系統性殘留。防止通用 best practice 被誤包裝成案例揭露。">Case-first Agent Team Review Workflow</a> — 教學模組級批次寫作流程</li>
<li><a href="/blog/report/single-function-per-article-sop-vs-retrospective/" data-link-title="一篇文章只承擔一種功能：SOP 跟 retrospective 混寫兩邊都做不好" data-link-desc="文章同時塞操作步驟（SOP）和批次驗證紀錄（retrospective）時，機器讀者找不到可執行的步驟、人類讀者不知道哪段是給自己看的。">#199 一篇文章只承擔一種功能</a> — 本文精簡的依據</li>
</ul>
]]></content:encoded></item><item><title>Vendor 深度技術文章方法論的演化紀錄：同 vendor 系列的開場輪替驗證</title><link>https://tarrragon.github.io/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/</guid><description>&lt;p>Vendor overview 寫完後、往下寫單一功能深度文章時，選題與結構需要不同的方法論。操作步驟維護在 &lt;code>.claude/skills/vendor-deep-article/&lt;/code>，本文記錄這套方法論從兩輪 batch 中演化出來的過程，重點是 cadence collapse（批量寫作時開場句型同質化重複）怎麼被寫前的 variant 規劃（每篇預先指定不同開場 framing）解決。&lt;/p>
&lt;h2 id="背景">背景&lt;/h2>
&lt;p>本 blog 的 backend 教學模組已完成多個 vendor overview。overview 層飽和後、自然的下一步是 overview 頁尾「預計實作話題」backlog 的深度文章。&lt;/p>
&lt;p>寫了 deep article + migration playbook 後、確認 deep article 跟 overview 是不同產品、需要自己的方法論。差異見 &lt;a href="https://tarrragon.github.io/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">migration playbook 方法論演化紀錄&lt;/a>。&lt;/p>
&lt;h2 id="第一輪-batch5-篇跨-vendor5-種-entry-framing">第一輪 batch（5 篇）：跨 vendor、5 種 entry framing&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>篇&lt;/th>
 &lt;th>Variant&lt;/th>
 &lt;th>章節 1 entry framing&lt;/th>
 &lt;th>行數&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/postgresql/pgbouncer-config/" data-link-title="PostgreSQL pgBouncer 配置 &amp;#43; 連線池治理" data-link-desc="pgBouncer transaction pooling 配置、跟 application connection pool 的分層、production 故障演練（pool exhaustion / stale connection / DNS failover）跟容量規劃">pgBouncer 配置&lt;/a>&lt;/td>
 &lt;td>A 標準&lt;/td>
 &lt;td>標準「問題情境」&lt;/td>
 &lt;td>263&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/hashicorp-vault/dynamic-credential/" data-link-title="HashiCorp Vault Dynamic Credential：lease 治理跟 application 整合的實作層" data-link-desc="Vault database secrets engine 怎麼配、application 怎麼 renew lease、production 五大踩雷（lease 過期 race、DB max_connections 撞牆、Vault sealed、token expire、scope 過寬）、容量規劃跟 vault-agent injector 整合">Vault dynamic credential&lt;/a>&lt;/td>
 &lt;td>A 標準&lt;/td>
 &lt;td>標準「問題情境」&lt;/td>
 &lt;td>222&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/05-deployment-platform/vendors/kubernetes/graceful-shutdown/" data-link-title="Kubernetes Graceful Shutdown：termination 序列跟你以為的不一樣" data-link-desc="K8s pod termination 五步序列、preStop / SIGTERM / terminationGracePeriodSeconds 的真實時序、5 個 production 踩雷（500 期間 502、connection drain race、init container 重啟、StatefulSet 串行終止、Job 不 graceful）、跟 service mesh / readiness probe 整合">K8s graceful shutdown&lt;/a>&lt;/td>
 &lt;td>B 痛點&lt;/td>
 &lt;td>痛點宣告「沒做對、每次 deploy 都吃 502」&lt;/td>
 &lt;td>213&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/splunk/risk-based-alerting/" data-link-title="Splunk Risk-Based Alerting：從 alert per rule 到 score-aggregated notable" data-link-desc="Splunk Enterprise Security 的 RBA 方法論：risk score / modifier / notable 三層 model、ES 配置 step-by-step、tuning playbook（false positive / score inflation / threshold drift / decay）、capacity 成本、跟 SOAR &amp;#43; case management 整合">Splunk RBA&lt;/a>&lt;/td>
 &lt;td>C 反向&lt;/td>
 &lt;td>概念反向定義「alert fatigue 是 detection 天花板」&lt;/td>
 &lt;td>193&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/cloudflare-waf/page-shield-csp-sri/" data-link-title="Cloudflare Page Shield：用 CSP &amp;#43; SRI &amp;#43; script monitoring 防 client-side supply chain" data-link-desc="Page Shield 三層防禦（CSP / SRI / script monitoring）對應 Magecart / formjacking / skimmer / 第三方 SDK 注入的不同 attack pattern、Cloudflare dashboard &amp;#43; API 配置、四個 production 踩雷（inline script 漏 / dynamic loader / CSP report 噪音 / SRI hash mismatch）、跟 dev workflow &amp;#43; WAF 整合">Cloudflare Page Shield&lt;/a>&lt;/td>
 &lt;td>D 對照表&lt;/td>
 &lt;td>對照表驅動「Attack pattern x Defense mechanism」&lt;/td>
 &lt;td>214&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>第一輪確認了結構 framework 成立、且章節名可隨主題調整。&lt;/p></description><content:encoded><![CDATA[<p>Vendor overview 寫完後、往下寫單一功能深度文章時，選題與結構需要不同的方法論。操作步驟維護在 <code>.claude/skills/vendor-deep-article/</code>，本文記錄這套方法論從兩輪 batch 中演化出來的過程，重點是 cadence collapse（批量寫作時開場句型同質化重複）怎麼被寫前的 variant 規劃（每篇預先指定不同開場 framing）解決。</p>
<h2 id="背景">背景</h2>
<p>本 blog 的 backend 教學模組已完成多個 vendor overview。overview 層飽和後、自然的下一步是 overview 頁尾「預計實作話題」backlog 的深度文章。</p>
<p>寫了 deep article + migration playbook 後、確認 deep article 跟 overview 是不同產品、需要自己的方法論。差異見 <a href="/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">migration playbook 方法論演化紀錄</a>。</p>
<h2 id="第一輪-batch5-篇跨-vendor5-種-entry-framing">第一輪 batch（5 篇）：跨 vendor、5 種 entry framing</h2>
<table>
  <thead>
      <tr>
          <th>篇</th>
          <th>Variant</th>
          <th>章節 1 entry framing</th>
          <th>行數</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/01-database/vendors/postgresql/pgbouncer-config/" data-link-title="PostgreSQL pgBouncer 配置 &#43; 連線池治理" data-link-desc="pgBouncer transaction pooling 配置、跟 application connection pool 的分層、production 故障演練（pool exhaustion / stale connection / DNS failover）跟容量規劃">pgBouncer 配置</a></td>
          <td>A 標準</td>
          <td>標準「問題情境」</td>
          <td>263</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/07-security-data-protection/vendors/hashicorp-vault/dynamic-credential/" data-link-title="HashiCorp Vault Dynamic Credential：lease 治理跟 application 整合的實作層" data-link-desc="Vault database secrets engine 怎麼配、application 怎麼 renew lease、production 五大踩雷（lease 過期 race、DB max_connections 撞牆、Vault sealed、token expire、scope 過寬）、容量規劃跟 vault-agent injector 整合">Vault dynamic credential</a></td>
          <td>A 標準</td>
          <td>標準「問題情境」</td>
          <td>222</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/05-deployment-platform/vendors/kubernetes/graceful-shutdown/" data-link-title="Kubernetes Graceful Shutdown：termination 序列跟你以為的不一樣" data-link-desc="K8s pod termination 五步序列、preStop / SIGTERM / terminationGracePeriodSeconds 的真實時序、5 個 production 踩雷（500 期間 502、connection drain race、init container 重啟、StatefulSet 串行終止、Job 不 graceful）、跟 service mesh / readiness probe 整合">K8s graceful shutdown</a></td>
          <td>B 痛點</td>
          <td>痛點宣告「沒做對、每次 deploy 都吃 502」</td>
          <td>213</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/07-security-data-protection/vendors/splunk/risk-based-alerting/" data-link-title="Splunk Risk-Based Alerting：從 alert per rule 到 score-aggregated notable" data-link-desc="Splunk Enterprise Security 的 RBA 方法論：risk score / modifier / notable 三層 model、ES 配置 step-by-step、tuning playbook（false positive / score inflation / threshold drift / decay）、capacity 成本、跟 SOAR &#43; case management 整合">Splunk RBA</a></td>
          <td>C 反向</td>
          <td>概念反向定義「alert fatigue 是 detection 天花板」</td>
          <td>193</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/07-security-data-protection/vendors/cloudflare-waf/page-shield-csp-sri/" data-link-title="Cloudflare Page Shield：用 CSP &#43; SRI &#43; script monitoring 防 client-side supply chain" data-link-desc="Page Shield 三層防禦（CSP / SRI / script monitoring）對應 Magecart / formjacking / skimmer / 第三方 SDK 注入的不同 attack pattern、Cloudflare dashboard &#43; API 配置、四個 production 踩雷（inline script 漏 / dynamic loader / CSP report 噪音 / SRI hash mismatch）、跟 dev workflow &#43; WAF 整合">Cloudflare Page Shield</a></td>
          <td>D 對照表</td>
          <td>對照表驅動「Attack pattern x Defense mechanism」</td>
          <td>214</td>
      </tr>
  </tbody>
</table>
<p>第一輪確認了結構 framework 成立、且章節名可隨主題調整。</p>
<h3 id="6-段-framework-成立但章節名可變">6 段 framework 成立但章節名可變</h3>
<p>6 段內容指引（問題情境 → 概念 → 配置 → 演練 → 容量 → 整合）在 5 篇都成立。但章節 1 的 framing 因主題本質不同自然分化 — 5 種 entry framing 都成立、章節 1 不必死守「問題情境」標題。</p>
<p>據此小修方法論：6 段 framework 是內容指引、不是章節標題模板。</p>
<h3 id="cadence-collapse-0--主動-variant-有效">Cadence collapse 0% — 主動 variant 有效</h3>
<p>後 4 篇寫作前主動規劃 4 種 framing variant。跟 backend/07 的 51 vendor batch 對照：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>backend/07 51 vendor</th>
          <th>deep article 後 4 篇</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Cadence「任一缺失」族重複</td>
          <td>51/51 (100%)</td>
          <td>0/4 (0%)</td>
      </tr>
      <tr>
          <td>章節 1 entry framing 種類</td>
          <td>1 種</td>
          <td>4 種</td>
      </tr>
  </tbody>
</table>
<h3 id="reviewer-單人足夠">Reviewer 單人足夠</h3>
<p>deep article 焦點窄（單一 feature）、跨章 frame 重複風險低、case 引用密度低（1-2 個對照）。5 篇都採單一 reviewer 流程、未出現需要 multi-axis review 的盲點。</p>
<h2 id="第二輪-batch5-篇同-vendor-sub-tool-系列最高-collapse-風險">第二輪 batch（5 篇）：同 vendor sub-tool 系列、最高 collapse 風險</h2>
<p>第二輪刻意選 cadence collapse 最高風險場景：5 篇 PostgreSQL sub-tool deep article、同 vendor / 同 article type / 同 audience / 同 6-section framework。</p>
<table>
  <thead>
      <tr>
          <th>篇</th>
          <th>Variant</th>
          <th>章節 1 entry framing</th>
          <th>行數</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/01-database/vendors/postgresql/patroni-ha/" data-link-title="PostgreSQL Patroni HA：從 leader 失聯到 client 重連的 5 段 failover lifecycle" data-link-desc="Patroni 把 PostgreSQL HA 拆成 detection / election / promotion / reconfiguration / recovery 五段 lifecycle、每段都有獨立配置跟 failure mode；DCS quorum &#43; watchdog 防 split-brain、async/sync replication 取捨、5 個 production 踩雷、跟 PgBouncer / HAProxy / cert-manager 整合">Patroni HA</a></td>
          <td>E lifecycle-driven</td>
          <td>「Failover lifecycle 5 段不是一條曲線」</td>
          <td>243</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/01-database/vendors/postgresql/autovacuum-tuning/" data-link-title="PostgreSQL autovacuum tuning：為什麼你的 autovacuum 永遠追不上 bloat" data-link-desc="MVCC 怎麼產生 dead tuple、autovacuum cost-based throttle 為什麼預設保守、per-table tuning 怎麼設、5 個 production 踩雷（cost_limit 太低 / 長 transaction blocks vacuum / anti-wraparound 在 peak / partition vacuum 滿 worker / index bloat 沒處理）、跟 partitioning &#43; monitoring 整合">autovacuum tuning</a></td>
          <td>B pain-driven</td>
          <td>「你的 autovacuum 永遠追不上 bloat — 為什麼」</td>
          <td>202</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/01-database/vendors/postgresql/declarative-partitioning/" data-link-title="PostgreSQL declarative partitioning：partition 不是切表、是讓 planner pruning" data-link-desc="Declarative partitioning 的真實價值是 query planner pruning &#43; maintenance scope 縮小、不是「把大表切小」；RANGE / LIST / HASH 取捨、partition key 選法、5 個 production 踩雷（key 選錯不 prune / unique 不 enforce 跨 partition / ATTACH 鎖太久 / partition 數爆 / DETACH 不 reclaim 空間）、跟 autovacuum &#43; index 設計整合">declarative partitioning</a></td>
          <td>C concept-reversed</td>
          <td>「Partition 不是『把大表切小』、是『讓 planner pruning + 縮小 maintenance scope』」</td>
          <td>244</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/01-database/vendors/postgresql/logical-replication-debezium/" data-link-title="PostgreSQL Logical Replication &#43; Debezium CDC：replication slot × failure × recovery 對照" data-link-desc="PostgreSQL logical replication slot 跟 Debezium CDC 的失效模式對照表：slot lag 撐爆 primary disk / schema change 斷流 / 初始 COPY 鎖表 / zombie slot 不釋放 / replay storm 後 offset reset；publication / subscription / pgoutput 配置、跟 Kafka outbox pattern 整合">logical replication + Debezium</a></td>
          <td>D table-driven</td>
          <td>「Replication slot x Failure x Recovery 對照」</td>
          <td>227</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/01-database/vendors/postgresql/pitr-wal-archiving/" data-link-title="PostgreSQL PITR &#43; WAL archiving：從 base backup 到 point-in-time recovery 的完整鏈" data-link-desc="Base backup &#43; WAL archive 構成 PITR 的雙軌資料、archive_command &#43; restore_command 配置、用 pgBackRest / WAL-G 替代手寫腳本、5 個 production 踩雷（archive 靜默失敗 / archive lag / 錯誤 target time / base backup 過期未清 / timeline 分歧 recovery 模糊）、跟 Patroni &#43; monitoring 整合">PITR + WAL archiving</a></td>
          <td>A standard 6-section</td>
          <td>「問題情境」</td>
          <td>273</td>
      </tr>
  </tbody>
</table>
<p>第二輪在最高風險場景（同 vendor sub-tool）仍維持 collapse 0%，且新增第五種 variant（lifecycle-driven）。</p>
<h3 id="跨兩輪對照">跨兩輪對照</h3>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>第一輪 N=4（跨 vendor）</th>
          <th>第二輪 N=5（同 vendor sub-tool）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Variant 種類</td>
          <td>4（A / B / C / D）</td>
          <td>5（A / B / C / D / E）</td>
      </tr>
      <tr>
          <td>Cadence collapse</td>
          <td>0/4 (0%)</td>
          <td>0/5 (0%)</td>
      </tr>
      <tr>
          <td>章節 1 entry framing 種類</td>
          <td>4</td>
          <td>5</td>
      </tr>
      <tr>
          <td>共同 context</td>
          <td>6-section framework</td>
          <td>6-section + 同 vendor + 同讀者</td>
      </tr>
  </tbody>
</table>
<p>關鍵驗證：</p>
<ol>
<li><strong>N=5 仍 0% collapse</strong>：5 種 variant 在最高風險場景（同 vendor sub-tool）仍完全錯開</li>
<li><strong>5 variant 不耗盡</strong>：5 種變體（lifecycle / pain / reverse / table / standard）對應主題自然進入方式、不是強制配對</li>
<li><strong>cadence audit 最佳位置是進度 60-80%</strong>：進度 10-20% 只有 1 樣本訊號弱、60-80% 有 4 樣本對照訊號強</li>
</ol>
<h2 id="方法論演化小結">方法論演化小結</h2>
<table>
  <thead>
      <tr>
          <th>版本</th>
          <th>修改</th>
          <th>驅動來源</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>v0</td>
          <td>直覺套 overview 11 章節</td>
          <td>第一篇 deep article 不合用</td>
      </tr>
      <tr>
          <td>v1</td>
          <td>6 段結構 + 200-400 行 sweet spot</td>
          <td>第一輪 5 篇 dogfood</td>
      </tr>
      <tr>
          <td>v1.1</td>
          <td>6 段是內容指引、不是章節標題模板</td>
          <td>章節 1 framing 自然分化</td>
      </tr>
      <tr>
          <td>v1.2</td>
          <td>寫作時間預估 2-4hr → 1-2hr</td>
          <td>overview 已建立 context</td>
      </tr>
      <tr>
          <td>v1.3</td>
          <td>cadence audit 抽樣位置 10-20% → 60-80%</td>
          <td>第二輪 N=5 驗證</td>
      </tr>
  </tbody>
</table>
<h2 id="相關連結">相關連結</h2>
<ul>
<li>Vendor Deep Article skill（<code>.claude/skills/vendor-deep-article/</code>）— 操作步驟</li>
<li><a href="/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">Migration Playbook 方法論演化紀錄</a> — sibling、處理 cross-vendor process</li>
<li><a href="/blog/posts/case-first--agent-team-review%E6%95%99%E5%AD%B8%E5%85%A7%E5%AE%B9%E7%9A%84%E7%94%9F%E7%94%A2%E6%B5%81%E7%A8%8B/" data-link-title="Case-First &#43; Agent Team Review：教學內容的生產流程" data-link-desc="Case-first &#43; agent team review 的教學內容生產流程：讀案例庫抽 findings、專責 reviewer 平行審查、polish pass 收系統性殘留。防止通用 best practice 被誤包裝成案例揭露。">Case-First Agent Team Review Workflow</a> — 教學模組級批次寫作流程</li>
<li><a href="/blog/report/single-function-per-article-sop-vs-retrospective/" data-link-title="一篇文章只承擔一種功能：SOP 跟 retrospective 混寫兩邊都做不好" data-link-desc="文章同時塞操作步驟（SOP）和批次驗證紀錄（retrospective）時，機器讀者找不到可執行的步驟、人類讀者不知道哪段是給自己看的。">#199 一篇文章只承擔一種功能</a> — 本文精簡的依據</li>
</ul>
]]></content:encoded></item></channel></rss>