<?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/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>ECR｜林鼎淵 Dean Lin</title>
    <link>https://deanlin.net/tags/ecr/</link>
    <image><url>https://deanlin.net/images/author_hu_aa256fc934e9a932.jpg</url><title>ECR｜林鼎淵 Dean Lin</title><link>https://deanlin.net/tags/ecr/</link><width>144</width><height>144</height></image>
    <description>林鼎淵（Dean Lin）的部落格：生成式 AI 企業內訓講師、外商資安公司軟體專家、7 本書作者。400 多篇文章用白話分享生成式 AI 實戰、Claude Code 與 Vibe Coding 教學、團隊合作與職場成長。</description>
    <generator>Hugo</generator>
    <language>zh-tw</language>
    <copyright>© 2020–2026 林鼎淵 Dean Lin</copyright>
    <lastBuildDate>Thu, 07 Jul 2022 21:42:20 +0800</lastBuildDate>
    <atom:link href="https://deanlin.net/tags/ecr/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>需求不斷變更，到底哪個環節出錯了 ── 工程師血淚史</title>
      <link>https://deanlin.net/blog/202207/constantly-changing-requirements/</link>
      <pubDate>Thu, 07 Jul 2022 21:42:20 +0800</pubDate>
      <guid>https://deanlin.net/blog/202207/constantly-changing-requirements/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>有些 PM 覺得跟工程師溝通很痛苦，甚至大腦會不時冒出這樣的想法：「明明只是修改一個小地方，為什麼總有各式各樣的理由拒絕跟拖延，就算答應修改，做起來也是一副心不甘情不願的樣子。」</description>
      <media:content url="https://deanlin.net/blog/202207/constantly-changing-requirements/images/constantly-changing-requirements-og_hu_3e60401d29677765.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>有些 PM 覺得跟工程師溝通很痛苦，甚至大腦會不時冒出這樣的想法：「明明只是修改一個小地方，為什麼總有各式各樣的理由拒絕跟拖延，就算答應修改，做起來也是一副心不甘情不願的樣子。」</p>
<p>其實大部分的工程師都是可以理性溝通的，但我們無法接受一直做「白工」和「重工」，今天筆者想透過一個案例來跟大家分享「客戶、PM、工程師」之間思維的差異，並提出可以改善的方案。</p>
<figure class="figure"><img src="https://deanlin.net/blog/202207/constantly-changing-requirements/images/constantly-changing-requirements-01.webp" width="1158" height="605" alt="圖片來自：123RF" fetchpriority="high" decoding="async">
  <figcaption>圖片來自：123RF</figcaption>
</figure>

<blockquote>
<p>本文提及之專案、人物、事件純屬虛構，如有雷同，實屬巧合，請勿對號入座。</p>
</blockquote>
<pre tabindex="0"><code>大綱
一、工程師說 Loading 太重，可以請你幫忙分擔嗎？
二、需求不斷變更，緩衝時間再多也不夠用！
三、可是客戶態度很強硬啊！東西真的不符合他們需求
四、整理不完的例外，變更不斷的需求
五、從源頭解決問題，不是每個問題都要靠程式解決
六、客戶未必具備工程背景，要協助他們表達需求
七、我們要如何調整，讓未來的合作更加順利
</code></pre><h2 id="一工程師說-loading-太重可以請你幫忙分擔嗎">一、工程師說 Loading 太重，可以請你幫忙分擔嗎？<a class="h-anchor" href="#%e4%b8%80%e5%b7%a5%e7%a8%8b%e5%b8%ab%e8%aa%aa-loading-%e5%a4%aa%e9%87%8d%e5%8f%af%e4%bb%a5%e8%ab%8b%e4%bd%a0%e5%b9%ab%e5%bf%99%e5%88%86%e6%93%94%e5%97%8e" aria-label="這個段落的連結"></a></h2>
<p>PM 反饋這個問題後，我打開專案管理系統，看那位抱怨 Loading 太重的工程師手上有哪些 Ticket，是否需要做適當的調整。</p>
<p>結果仔細一看才發現，儘管那位工程師在這個 Sprint 中只剩下 2 張 Ticket 尚未完成，但有一張「匯出 Excel 報表」的 Ticket 預估時程遠遠超過之前在 Sprint Planning 的預估（4➝15）。</p>
<p>因為剩下的 2 個 Ticket 都是這次 Sprint 的核心功能，且距離結束只剩不到 2 個工作天，因此 PM 希望我可以接手那個估時已經到達 15 小時的 Ticket，讓工程師專注處理剩下的 Ticket。</p>
<p>跟 PM 談到這裡的時候我覺得有點奇怪，之所以將匯出 Excel 報表的 Ticket 分配給那位工程師，就是因為他之前有實作的經驗，沒道理在這個地方卡這麼久。</p>
<hr>
<h2 id="二需求不斷變更緩衝時間再多也不夠用">二、需求不斷變更，緩衝時間再多也不夠用！<a class="h-anchor" href="#%e4%ba%8c%e9%9c%80%e6%b1%82%e4%b8%8d%e6%96%b7%e8%ae%8a%e6%9b%b4%e7%b7%a9%e8%a1%9d%e6%99%82%e9%96%93%e5%86%8d%e5%a4%9a%e4%b9%9f%e4%b8%8d%e5%a4%a0%e7%94%a8" aria-label="這個段落的連結"></a></h2>
<p>為了釐清這個問題，我跟 PM、工程師開了一個臨時會議，去了解是什麼原因導致一個不困難的 Ticket 花了這麼多時間。</p>
<p>此時我才從工程師那邊了解到另一個事實，其實對他而言，匯出 Excel 報表的功能並不複雜，<strong>Loading 太重的原因是客戶不斷變更需求，導致這個 Ticket 的估時不斷增加，但預計交付的日期並沒有延長，因此時間壓力會全部壓到工程師身上</strong>。</p>
<p>我在詢問這個需求變更的頻率有多高時，工程師表示把新版交付出去後，可能再過 3、4 個小時就會收到新的需求變更；儘管每次修改都不會花太多時間，但架不住這麼頻繁的更動啊！</p>
<blockquote>
<p>當需求變更導致一直做白工、重工，就可能讓工程師工作效率下降，甚至可能在完成功能後故意拖一段時間再交付；畢竟提早交付沒好事，只是讓自己的工作量變更多而已。</p>
</blockquote>
<hr>
<h2 id="三可是客戶態度很強硬啊東西真的不符合他們需求">三、可是客戶態度很強硬啊！東西真的不符合他們需求<a class="h-anchor" href="#%e4%b8%89%e5%8f%af%e6%98%af%e5%ae%a2%e6%88%b6%e6%85%8b%e5%ba%a6%e5%be%88%e5%bc%b7%e7%a1%ac%e5%95%8a%e6%9d%b1%e8%a5%bf%e7%9c%9f%e7%9a%84%e4%b8%8d%e7%ac%a6%e5%90%88%e4%bb%96%e5%80%91%e9%9c%80%e6%b1%82" aria-label="這個段落的連結"></a></h2>
<p>客戶花錢請我們做系統，當然是希望做出符合他們實際業務需求的產品；站在客戶的立場上，他們當然會用最嚴格的標準在看待每一個功能。</p>
<p>但站在我們的立場上，在人力資源固定的狀態下，每多一次需求變更，我們就需要花更多的時間與精力去完成，甚至導致部分同仁需要加班。</p>
<p>為了解決這個問題，我請 PM 跟客戶約一個時間，一起了解需求不停變更的原因是什麼，不然這樣一直改下去其實是在浪費彼此的時間。</p>
<hr>
<h2 id="四整理不完的例外變更不斷的需求">四、整理不完的例外，變更不斷的需求<a class="h-anchor" href="#%e5%9b%9b%e6%95%b4%e7%90%86%e4%b8%8d%e5%ae%8c%e7%9a%84%e4%be%8b%e5%a4%96%e8%ae%8a%e6%9b%b4%e4%b8%8d%e6%96%b7%e7%9a%84%e9%9c%80%e6%b1%82" aria-label="這個段落的連結"></a></h2>
<p>客戶是一個專門提供材料出貨的公司，在深入訪談後，才了解需求之所以會一直變更，是因為這個 Excel 報表始終沒有決定一個固定的版本，會這樣是因為過去客戶在填寫出貨單時沒有律定格式，同一個材料可能有 10 幾種表達方式。</p>
<p>過去沒有遇到這個問題，是因為之前的出貨單都是 Case by Case，所以他們材料名稱儘管不統一，但依舊能夠看得懂；可是如果把好幾張出貨單放在一起看，就會因為資料很難整合而產生許多問題，這也是客戶找我們做系統化的原因。</p>
<p>下面用手機來舉個例子，我們手機有前鏡頭，假使在出貨單上顯示：「前鏡頭、前置相機、front camera、Front Camera、frontCamera」我相信大家都看得懂這是指同一個東西；但如果管理階層想要知道公司這個月到底賣了多少個「前鏡頭」，下屬就需要畫很多時間做比對跟整合。</p>
<p>除了相機的案例外，這邊再舉一個螢幕的例子，每個手機螢幕的尺寸大小不同，因此出貨單上有各自的命名；當管理階層想了解這個月總共賣了多少個「螢幕」，下屬會因為出貨單的材料沒有階層的概念而整理到崩潰。</p>
<p>在了解客戶的痛點後，我們就知道這是因為過去「命名不統一、材料缺乏階層概念」導致的問題。</p>
<p>PM 一開始也是從這個方向去處理問題的，他先請客戶將期望的命名、材料的階層整理出來，然後請工程師依照規格去統整；儘管這個方案看似沒有問題，但因為客戶當時在填寫出貨單時，命名太過狂野，因此有非常多的例外需要處理，而每發現一個例外就要請工程師調整程式。</p>
<hr>
<h2 id="五從源頭解決問題不是每個問題都要靠程式解決">五、從源頭解決問題，不是每個問題都要靠程式解決<a class="h-anchor" href="#%e4%ba%94%e5%be%9e%e6%ba%90%e9%a0%ad%e8%a7%a3%e6%b1%ba%e5%95%8f%e9%a1%8c%e4%b8%8d%e6%98%af%e6%af%8f%e5%80%8b%e5%95%8f%e9%a1%8c%e9%83%bd%e8%a6%81%e9%9d%a0%e7%a8%8b%e5%bc%8f%e8%a7%a3%e6%b1%ba" aria-label="這個段落的連結"></a></h2>
<p>了解來龍去脈後，我想也許我們都把問題搞複雜了，既然我們都知道問題是在出貨單上，為什麼不要從源頭來解決這個問題呢？</p>
<p>如果出貨單的格式沒有律定，在未來同樣的問題還是會發生；因為出貨單上每天都可能會誕生新的名詞，而新的名詞會無法自動歸類，可以料想到就算現在符合客戶的需求，在未來還是會有許多衍生問題。</p>
<p>當然過去的歷史業障很難要求客戶調整，「統一名詞、確定階層」還是一個必要的工作；但也許我們可以先用過去的出貨單模擬客戶期望的 Excel，而不是不斷請工程師修改程式。</p>
<blockquote>
<p>若發現有缺少、錯誤的材料先記錄下來，累積到一定的量後再請工程師修正，不然他會改到瘋。</p>
</blockquote>
<p>同時為了讓錯誤的歷史在這個階段就停下，我們需要請客戶與填寫出貨單的部門溝通，律定「出貨單」填寫的格式。</p>
<p>如果涉及到客戶公司內部，盡可能讓他們「自行協調」，我們做好「引導的角色」就夠了，如果由我們向客戶的其他部門提出需求，那破局的機率非常高。</p>
<hr>
<h2 id="六客戶未必具備工程背景我們要協助他們表達需求">六、客戶未必具備工程背景，我們要協助他們表達需求<a class="h-anchor" href="#%e5%85%ad%e5%ae%a2%e6%88%b6%e6%9c%aa%e5%bf%85%e5%85%b7%e5%82%99%e5%b7%a5%e7%a8%8b%e8%83%8c%e6%99%af%e6%88%91%e5%80%91%e8%a6%81%e5%8d%94%e5%8a%a9%e4%bb%96%e5%80%91%e8%a1%a8%e9%81%94%e9%9c%80%e6%b1%82" aria-label="這個段落的連結"></a></h2>
<p>其實就算是公司內部的溝通也是不容易的，起初填寫出貨單的部門對律定格式這件事反彈極大，因為他們原本都做得好好的，現在變得要依規範行事。</p>
<p>在了解到客戶推行的困難點後，我們製作了一張高達數百個欄位的 Excel，並請客戶向填寫出貨單的部門展示，讓他們體會到混亂的格式造成什麼後果。</p>
<p>在這之後他們才理解為什麼格式需要律定了，也了解公司導入這個系統就是希望把流程標準化，減少報表製作的時間，不是想要刁難他們。</p>
<hr>
<h2 id="七我們要如何調整讓未來的合作更加順利">七、我們要如何調整，讓未來的合作更加順利<a class="h-anchor" href="#%e4%b8%83%e6%88%91%e5%80%91%e8%a6%81%e5%a6%82%e4%bd%95%e8%aa%bf%e6%95%b4%e8%ae%93%e6%9c%aa%e4%be%86%e7%9a%84%e5%90%88%e4%bd%9c%e6%9b%b4%e5%8a%a0%e9%a0%86%e5%88%a9" aria-label="這個段落的連結"></a></h2>
<p>儘管這個問題最後在多方的協作下圓滿解決，但其實中間有許多摩擦是可以在初期避免的。</p>
<h3 id="-tech-lead">Tech Lead<a class="h-anchor" href="#-tech-lead" aria-label="這個段落的連結"></a></h3>
<p>若發現某個 Ticket 的估時逐漸增加，要主動向工程師詢問實際狀況，因為有些細節在 Scrum Meeting 並不會提及。</p>
<p>若發現工程師在做重工、白工，要先釐清問題來源；不是每個問題都要靠程式解決，我們可以先嘗試跟客戶溝通。</p>
<h3 id="-pm">PM<a class="h-anchor" href="#-pm" aria-label="這個段落的連結"></a></h3>
<p>如果客戶提出的需求變更太過零碎、頻繁，可以先記錄下來，等累積到一定的量，或是明確需求後再交給工程師處理。</p>
<p>如果發現需求能用模擬的就先用模擬的，盡可能不要讓工程師把時間耗在有高機率做白工的需求變更上。</p>
<h3 id="-工程師">工程師<a class="h-anchor" href="#-%e5%b7%a5%e7%a8%8b%e5%b8%ab" aria-label="這個段落的連結"></a></h3>
<p>如果發現需求變更的內容不合理、次數太多，可以即時與 Tech Lead 反應，而不是用加班默默把需求的吃下來。</p>
<blockquote class="pullquote"><p>希望這個案例對讀者日後執行專案時有幫助，如果還有其他建議也歡迎留言分享喔～</p>
</blockquote>
<hr>
<pre tabindex="0"><code>工程師血淚史
▋ 團隊在系統開發上遇到了哪些問題
▋ 需求不斷變更，到底哪個環節出錯了(本篇)
▋ 當 Scrum Master 跟 PM 同時存在，權力與責任該如何區分？
▋ 如果沒有明確的開發流程，團隊將會無所適從
▋ 你知道對專案來說，README.md 有多麼重要嗎？
</code></pre>]]></content:encoded>
    </item>
  </channel>
</rss>
