<?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>專案管理｜林鼎淵 Dean Lin</title>
    <link>https://deanlin.net/tags/%E5%B0%88%E6%A1%88%E7%AE%A1%E7%90%86/</link>
    <image><url>https://deanlin.net/images/author_hu_aa256fc934e9a932.jpg</url><title>專案管理｜林鼎淵 Dean Lin</title><link>https://deanlin.net/tags/%E5%B0%88%E6%A1%88%E7%AE%A1%E7%90%86/</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>Sun, 11 Feb 2024 14:36:09 +0800</lastBuildDate>
    <atom:link href="https://deanlin.net/tags/%E5%B0%88%E6%A1%88%E7%AE%A1%E7%90%86/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>為什麼接案就像踩地雷？苦主幫你來掃雷 ── 設計管理系列文</title>
      <link>https://deanlin.net/blog/202402/freelance-pitfalls/</link>
      <pubDate>Sun, 11 Feb 2024 14:36:09 +0800</pubDate>
      <guid>https://deanlin.net/blog/202402/freelance-pitfalls/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>很多人想透過接案來增加收入、豐富履歷，但往往踏入後，才發現這原來是一個踩地雷遊戲！</description>
      <media:content url="https://deanlin.net/blog/202402/freelance-pitfalls/images/freelance-pitfalls-og_hu_ea0d9b41dcac3188.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>很多人想透過接案來增加收入、豐富履歷，但往往踏入後，才發現這原來是一個踩地雷遊戲！</p>
<p>筆者過去接過的案子涵蓋網頁設計、APP 製作、網路爬蟲、專欄文章、線上課程、企業內訓…</p>
<p>不管是好的、壞的，還是奇怪的甲方全都遇過，所以在上設計管理的課程時很有「共鳴感」。</p>
<p><strong>如果你有接案的打算，那這篇文章一定要讀到最後，別人踩過的坑，我們沒必要親自體會。</strong></p>
<blockquote>
<p>PS. 這篇文章沒有要批評任何一方的意思，其實無論甲方還是乙方都需要後天學習，沒有人天生就會。</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202402/freelance-pitfalls/images/freelance-pitfalls-01.webp" width="1145" height="640" alt="為什麼接案就像踩地雷？苦主幫你來掃雷 ── 設計管理系列文（圖 1）" fetchpriority="high" decoding="async"></p>
<pre tabindex="0"><code>文章大綱

ㄧ、與客戶初步接洽
二、初步認識＆討論
三、深入釐清需求
四、提供報價單
五、提供時程
六、提供合約＆簽約
七、結語
</code></pre><blockquote>
<p>文章大綱所列出的，是接案常見的流程，可能會根據實際狀況增減。</p>
</blockquote>
<h2 id="ㄧ與客戶初步接洽">ㄧ、與客戶初步接洽<a class="h-anchor" href="#%e3%84%a7%e8%88%87%e5%ae%a2%e6%88%b6%e5%88%9d%e6%ad%a5%e6%8e%a5%e6%b4%bd" aria-label="這個段落的連結"></a></h2>
<p>建議先跟客戶確認以下 3 點，避免浪費彼此的時間：</p>
<ul>
<li><strong>時程</strong>: 了解客戶對專案時程的期待，確認彼此的時程能對上；當遇到急件時，你一定要考慮自己是否能夠如期完成。</li>
<li><strong>類型</strong>: 判斷自己是否做過類似的專案，以及是否擅長這類型的專案。</li>
<li><strong>預算</strong>: 你要初步提供自己可以接受的報價區間，避免談到後面才發現客戶無法負擔。</li>
</ul>
<p>很多人會因為害怕或缺乏經驗，不敢在一開始跟客戶確認以上事宜，導致專案在一個很模糊的狀態下進行；但殊不知，這些模糊地帶往往會導致合作到後期彼此撕破臉。</p>
<p>另外你不要想著每次接洽都會成功，因為客戶可能一次聯繫很多人，避免出狀況時沒有備案。</p>
<p>這次沒有選你，未必是你不好，只是他們心目中的第一名接下了這個專案。</p>
<hr>
<h2 id="二初步認識討論">二、初步認識＆討論<a class="h-anchor" href="#%e4%ba%8c%e5%88%9d%e6%ad%a5%e8%aa%8d%e8%ad%98%e8%a8%8e%e8%ab%96" aria-label="這個段落的連結"></a></h2>
<p>客戶選擇你，不代表他了解你。</p>
<p>所以在跟客戶第一次見面時，建議你要先介紹自己過去的作品、做事的流程，讓客戶判斷自己是否能配合。</p>
<p>同時你也要了解客戶對這個專案的期待，像是專案的目標與背景資訊。</p>
<p>這邊也建議你了解一下客戶過往的做事流程，在資訊透明的狀態下才有可能合作愉快。</p>
<hr>
<h2 id="三深入釐清需求">三、深入釐清需求<a class="h-anchor" href="#%e4%b8%89%e6%b7%b1%e5%85%a5%e9%87%90%e6%b8%85%e9%9c%80%e6%b1%82" aria-label="這個段落的連結"></a></h2>
<p>在初步確定合作意向後，建議約一個較大型的會議。</p>
<p>在這階段要讓專案相關利害人一同加入討論，以確認對方的需求。</p>
<hr>
<h2 id="四提供報價單">四、提供報價單<a class="h-anchor" href="#%e5%9b%9b%e6%8f%90%e4%be%9b%e5%a0%b1%e5%83%b9%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<p>如果沒有白紙黑字，那報價就只是憑感覺；以下是撰寫報價單要注意的事項：</p>
<ul>
<li><strong>不要有模糊空間</strong>: 規格要講清楚，能修改幾次要列出來，要明訂具體的流程。</li>
<li><strong>附上但書</strong>: 具體寫上你不做的部分；並寫上如果真的要做，你會如何報價。</li>
</ul>
<p>而這份報價單可以：</p>
<ul>
<li><strong>讓客戶思考預算</strong>: 有時客戶天馬行空，我們需要透過報價單把他拉回現實；如果有預算考量，可以在這個階段幫客戶收斂專案範圍，讓他對內容進行取捨。</li>
<li><strong>幫我們初步篩選客戶</strong>: 在報價後，有些客戶會開始殺價或是提出不合理的需求；如果覺得對方的行為讓你覺得不舒服，那建議不要繼續合作下去，因為通常會越來越痛苦。</li>
</ul>
<blockquote>
<p><strong>Tips</strong>: 與其消耗能量克服痛苦，不如一開始就選擇合適的客戶？</p>
</blockquote>
<hr>
<h2 id="五提供時程">五、提供時程<a class="h-anchor" href="#%e4%ba%94%e6%8f%90%e4%be%9b%e6%99%82%e7%a8%8b" aria-label="這個段落的連結"></a></h2>
<p>有些專案的時程會長達幾個月，甚至以年為單位。</p>
<p>為了確保雙方的認知相同，我們要與客戶討論：</p>
<ul>
<li><strong>重要檢核點（里程碑）</strong>: 除了規畫專案時程外，還要列出每個階段可以驗收的項目；並在進行驗收前，確保相關利害關係人皆可參與這些重大會議（不然可能在後續被有決策權的人推翻重來）。</li>
<li><strong>專案交付時間</strong>: 定下時間後，後續合約就會按照這個時間走。</li>
</ul>
<hr>
<h2 id="六提供合約">六、提供合約<a class="h-anchor" href="#%e5%85%ad%e6%8f%90%e4%be%9b%e5%90%88%e7%b4%84" aria-label="這個段落的連結"></a></h2>
<p>前面細節都確認完後，就可以準備簽約了，但簽約有很多細節需要注意，筆者有空時會再寫另一篇文章分享。</p>
<p>不過這邊也要提醒大家，簽約不代表有保障，就算對象是大公司也一樣。</p>
<p>因為法律流程跑起來曠日費時，我就聽說過有的公司的樓梯間堆滿法院傳票。</p>
<hr>
<h2 id="七結語">七、結語<a class="h-anchor" href="#%e4%b8%83%e7%b5%90%e8%aa%9e" aria-label="這個段落的連結"></a></h2>
<p>你沒看錯，這篇文章談的只是「接案前要注意的事項」。</p>
<p>還有很多細節沒有寫進文章，比如: <a href="https://deanlin.net/blog/202402/freelance-pricing/">如何報價</a>、<a href="https://deanlin.net/blog/202402/raise-freelance-rates/">如何提高報價</a>、<a href="https://deanlin.net/blog/202403/find-good-freelance-clients/">如何接到好專案、如何判斷是否為好客戶</a>…</p>
<p>接案其實很累，因為前期的溝通也是專案的成本。</p>
<p>如果在這個階段發現客戶不合適，建議及時停損，勉強的結果通常不好。</p>
<p>同時提醒大家，如果你在有正職的狀態下接案，請謹慎評估自己的身心狀況；因為接案而搞砸本業，那就真的本末倒置了。</p>
<blockquote>
<p>以上是「職涯必修設計管理學」的 Part 2心得筆記 ，如果覺得我的分享對你有幫助，歡迎 <a href="https://dean-lin.medium.com/subscribe">Follow</a> 我吸收更多知識。</p>
</blockquote>
<a class="linkcard" href="https://deanlin.net/series/design-thinking/">
  <span class="lc-body">
    <span class="lc-title">設計思考</span>
    <span class="lc-desc">一個工程師眼中的設計思考：同理、提問、定義問題，把「解決問題」變成可以練習的能力。</span>
    <span class="lc-site"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 6l6 6-6 6"/></svg>林鼎淵 Dean Lin</span>
  </span>
</a>

]]></content:encoded>
    </item>
    <item>
      <title>想讓「專案執行」更加順利？工程師與 PM 間的合作要注意這點！</title>
      <link>https://deanlin.net/blog/202210/engineer-pm-project-execution/</link>
      <pubDate>Wed, 12 Oct 2022 16:45:00 +0800</pubDate>
      <guid>https://deanlin.net/blog/202210/engineer-pm-project-execution/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>在上篇文章中，筆者介紹了正式開發前的初始任務有哪些。</description>
      <media:content url="https://deanlin.net/blog/202210/engineer-pm-project-execution/images/cover_hu_bab6af5cc4237a8d.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><a href="https://deanlin.net/blog/202210/team-workflow-initial-tasks/">在上篇文章中</a>，筆者介紹了正式開發前的初始任務有哪些。</p>
<p>今天就讓我們來聊聊「專案執行」時，如何讓合作的過程更加順利。</p>
<p>以筆者過去的經驗來說，團隊合作免不了要「溝通」，但每個人的溝通能力落差極大，有些人總覺得對方是自己肚子裡的蛔蟲，因此詢問問題、交付任務都沒說明細節，時常需要你來我往的多次確認。</p>
<p>為了減少彼此的衝突，我們可以針對常見的合作情境設計「格式」與「規範」。</p>
<h2 id="工作記錄work-log">工作記錄（Work Log）<a class="h-anchor" href="#%e5%b7%a5%e4%bd%9c%e8%a8%98%e9%8c%84work-log" aria-label="這個段落的連結"></a></h2>
<p>如果團隊有使用專案管理系統，為了日後方便追溯與釐清狀況，建議填寫的內容如下：</p>
<ul>
<li>如果實作的方向是討論出來的，請紀錄「與會人員」與「決議結果」。</li>
<li>如果使用到特別的演算法、技術、套件，請特別附註。</li>
<li>如果該 Ticket 完成後要由其他人接手處理（ex：後端完成 API 後交付給前端），請說明要執行哪些指令（ex：DB Migration、Seeder…），並提供相關文件。</li>
<li>如果發現 Ticket 完成的時間與估計的不同，請與 PM 討論並調整。</li>
</ul>
<h2 id="工程師之間的合作">工程師之間的合作<a class="h-anchor" href="#%e5%b7%a5%e7%a8%8b%e5%b8%ab%e4%b9%8b%e9%96%93%e7%9a%84%e5%90%88%e4%bd%9c" aria-label="這個段落的連結"></a></h2>
<p>律定格式，讓溝通有一定的品質。</p>
<ul>
<li><strong>明定 Ticket 執行順序</strong>：一個 Sprint 中，每個工程師手上有很多的 Ticket，但有些 Ticket 會有所謂的「前置條件」，為了減少等待的空窗期，工程師要在「 Sprint Planning 時溝通好」。</li>
<li><strong>回報 API Bug</strong>：請說明是在「哪個系統」、「哪隻 API」、「什麼參數下」會發生。</li>
<li><strong>回報 Web Bug</strong>：請說明是在「哪個系統」、「哪個畫面（截圖）」、「如何操作」會發生。</li>
<li><strong>遇到自己無法解決的問題</strong>：請說明是在「哪個系統」、「哪個 Ticket」、「你做過哪些嘗試」、「你認為可能的解決方案」。</li>
</ul>
<h2 id="工程師與-pm-的合作">工程師與 PM 的合作<a class="h-anchor" href="#%e5%b7%a5%e7%a8%8b%e5%b8%ab%e8%88%87-pm-%e7%9a%84%e5%90%88%e4%bd%9c" aria-label="這個段落的連結"></a></h2>
<p>工程師與 PM 合作時，千萬不要惜字如金，大家都要把話講清楚；工程師要求 PM 做到的事，自己也要做到。</p>
<ul>
<li><strong>如果 PM 請工程師完成 Sprint 以外的需求</strong>：請說明「任務優先度」、「為什麼會有這個需求」、「可以將哪個 Ticket 排後面一點」。</li>
<li><strong>如果工程師在開發過程中收到其他團隊的需求</strong>：請將對話窗口轉移到「PM」，由他來統一處理。</li>
<li><strong>如果工程師請 PM 開 Ticket</strong>：需描述「哪個系統」、「為什麼會有這個需求」、「需求描述」、「估計時數」。</li>
<li><strong>若 Loading 太重無法負荷</strong>：請說明「原因」，如：掛的 Ticket 數量太多、任務分配不均、某個 Ticket 實作遇到困難。</li>
<li><strong>若多個專案同時發起高優先度的任務</strong>：有些工程師身上會掛多個專案，若不幸有兩個以上的專案同時發起高優先度的任務，就需要請「PM」協助排出優先順序。</li>
</ul>
<h2 id="為什麼都要由pm-來開-ticket">為什麼都要由 PM 來開 Ticket？<a class="h-anchor" href="#%e7%82%ba%e4%bb%80%e9%ba%bc%e9%83%bd%e8%a6%81%e7%94%b1pm-%e4%be%86%e9%96%8b-ticket" aria-label="這個段落的連結"></a></h2>
<p>有些工程師覺得自己開 Ticket 比較快，資訊多轉一手給 PM 根本是浪費時間，但這個制度是有原因的，如果不這樣做就可能導致：</p>
<ul>
<li><strong>PM 對專案的掌握度下降</strong>：如果大家都自己開 Ticket，PM 會無法掌握每個人實際在做的任務，即使有 Tag 到 PM，PM 也未必有辦法看到每一則訊息。</li>
<li><strong>專案進度偏離原定計畫</strong>：很多時候，工程師心中的任務優先順序跟 PM 是不一樣的，這導致最後在核對完成的任務時，會因為彼此的認知落差而產生爭執。</li>
<li><strong>勞逸不均</strong>：有些工程師發現問題就想解，導致身上背了一堆 Ticket 天天加班，而其他工程師閒閒沒事做。</li>
<li><strong>做了徒勞無功的任務</strong>：有些功能從專案的角度來看，可能不重要，甚至是不需要的。</li>
</ul>
<p>為了避免上述的狀況發生，如果有任何想做的需求，請先與 PM 討論，讓 PM 從整體的角度來判斷（ex：如果你的 Loading 太重，PM 就可能將你提出的 Ticket 分配給其他人做）。</p>
<h2 id="結語">結語<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e" aria-label="這個段落的連結"></a></h2>
<p>筆者透過 3 個主題（<a href="https://deanlin.net/blog/202210/team-workflow-project-kickoff/">專案啟動</a>、<a href="https://deanlin.net/blog/202210/team-workflow-initial-tasks/">初始任務</a>、專案執行），與讀者分享制定工作流程的重要性。</p>
<p>制定工作流程是為了讓團隊運作更為順利，所以其中的規範、格式都要與成員充分討論；在彼此有共識的狀態下，工作流程才有存在的價值，否則會變成一種負擔。</p>
<p>最後再次提醒大家，文章的流程未必適用於每個團隊，但可以做為參考方向。</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>為什麼軟體團隊需要制定工作流程？正式開發前的「初始任務」有 5 個步驟不能忽略！</title>
      <link>https://deanlin.net/blog/202210/team-workflow-initial-tasks/</link>
      <pubDate>Tue, 11 Oct 2022 15:30:00 +0800</pubDate>
      <guid>https://deanlin.net/blog/202210/team-workflow-initial-tasks/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>在上篇文章中，筆者介紹了專案啟動時要做的事。</description>
      <media:content url="https://deanlin.net/blog/202210/team-workflow-initial-tasks/images/cover_hu_bc859f5dca17aa43.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><a href="https://deanlin.net/blog/202210/team-workflow-project-kickoff/">在上篇文章中</a>，筆者介紹了專案啟動時要做的事。</p>
<p>今天讓我們來了解，在正式開發前有哪些「初始任務」要做，以及每個步驟由誰負責。</p>
<h2 id="step-1規劃每個階段的時程">STEP 1：規劃每個階段的時程<a class="h-anchor" href="#step-1%e8%a6%8f%e5%8a%83%e6%af%8f%e5%80%8b%e9%9a%8e%e6%ae%b5%e7%9a%84%e6%99%82%e7%a8%8b" aria-label="這個段落的連結"></a></h2>
<p>由「PM」將專案的需求拆分成不同的 Phase，這樣工程師比較能集中注意力在特定事物上，每個 Phase 都需要把如下的任務納入考量：</p>
<ol>
<li>要完成的功能（ex：前端、後端）。</li>
<li>撰寫測試程式的時程（ex：單元測試、壓力測試）。</li>
<li>QA 團隊測試的時程。</li>
<li>測試、正式環境部署的時程。</li>
</ol>
<blockquote>
<p>規劃時要保留「緩衝時間」，因為測試一次就過基本上是不可能發生的事情，往往需要預留 10~15% 的時間來修 Bug。</p>
</blockquote>
<h2 id="step-2撰寫-ticket-需求規格">STEP 2：撰寫 Ticket 需求規格<a class="h-anchor" href="#step-2%e6%92%b0%e5%af%ab-ticket-%e9%9c%80%e6%b1%82%e8%a6%8f%e6%a0%bc" aria-label="這個段落的連結"></a></h2>
<p>由「PM」在專案管理系統上為每項任務建立 Ticket，建議需求規格的內容要包含：</p>
<ol>
<li><strong>Prototype 截圖</strong>：讓工程師了解功能具體的位置在哪。</li>
<li><strong>需求描述</strong>：說明這個功能是用來做什麼的，它跟哪些功能有相依性。</li>
<li><strong>相關計算規則</strong>：如果需求是「計算商品總價」，那就要列出「產品搭配、折價卷、信用卡優惠…」等多種排列組合的計算規則。</li>
<li><strong>使用的邏輯</strong>：搜尋欄位可以查詢的欄位有哪些？搜尋的邏輯是 And 還是 Or？</li>
<li><strong>關聯需求</strong>：像是後端做完 API 後交付給前端，就需要將兩個 Ticket 關聯。</li>
<li><strong>驗收標準</strong>：判斷這個 Ticket 是否可以 Close 的依據。</li>
</ol>
<h2 id="step-3評估每個-ticket-的時數">STEP 3：評估每個 Ticket 的時數<a class="h-anchor" href="#step-3%e8%a9%95%e4%bc%b0%e6%af%8f%e5%80%8b-ticket-%e7%9a%84%e6%99%82%e6%95%b8" aria-label="這個段落的連結"></a></h2>
<p>不同 Ticket 的難易度不同，這邊會由「Tech Lead」與「工程師團隊」一同評估，確認該 Ticket 由誰負責，並評估需要的時數。</p>
<p>筆者在這裡提醒大家，千萬不要勉強自己估出一個很難完成的時數，不然卡關時，會影響到後續一系列的時程規劃（但也不要估出不合理的時數）。</p>
<blockquote>
<p>如果某個 Ticket 預估的時程超過 6 小時，建議要再做拆分，否則很難衡量每天實作的進度。</p>
</blockquote>
<h2 id="step-4確認能否在截止日前完成">STEP 4：確認能否在截止日前完成<a class="h-anchor" href="#step-4%e7%a2%ba%e8%aa%8d%e8%83%bd%e5%90%a6%e5%9c%a8%e6%88%aa%e6%ad%a2%e6%97%a5%e5%89%8d%e5%ae%8c%e6%88%90" aria-label="這個段落的連結"></a></h2>
<p>只要是專案就一定有截止日期，「PM、Tech Lead」需要在這個階段將 Ticket 的時數轉化為甘特圖來審視，若發現已經超過截止日期，那勢必要再做一些調整，比如：</p>
<ol>
<li>簡化部分功能（ex：原本要用 Auto-Complete，現在改用一般的搜尋）。</li>
<li>規劃 MVP 讓客戶使用（ex：原本要經過一系列複雜流程才能建立的資料，先用 Seeder 代替，以此大幅減少工程師的開發時間）。</li>
</ol>
<blockquote>
<p>這邊不建議堅持原計劃完成所有功能，因為快速開發所累積的技術債，於未來要花更多的時間處理。</p>
</blockquote>
<h2 id="step-5分配-ticket">STEP 5：分配 Ticket<a class="h-anchor" href="#step-5%e5%88%86%e9%85%8d-ticket" aria-label="這個段落的連結"></a></h2>
<p>由「PM」規劃這個 Sprint 要完成哪些 Tickets，然後在 Sprint Planning 時進行細節分工；假設一個 Sprint 為 2 週，建議每個人身上掛的 Tickets 總時數不要超過 65 小時，因為：</p>
<ol>
<li>時常會有臨時的會議、需求、Bug…等意外事件，需要保留緩衝時間。</li>
<li>在專案初始階段，我們無法保證是否有遺漏的規劃、邏輯的錯誤，若把時間塞滿就很難有轉圜的餘地。</li>
<li>有時舊專案會有緊急狀況需要優先處理，這個也會吃掉不少時間。</li>
</ol>
<h2 id="小結">小結<a class="h-anchor" href="#%e5%b0%8f%e7%b5%90" aria-label="這個段落的連結"></a></h2>
<p>專案的「初始任務」非常重要，若忽略其中一個步驟，都等於埋下一顆未爆彈。</p>
<p>相信經過「<a href="https://deanlin.net/blog/202210/team-workflow-project-kickoff/">專案啟動</a>、初始任務」這兩個主題，大家都能體會專案前期規劃、評估的重要性；但如果開發時 PM 與 RD、RD 與 RD 間的溝通不良，專案在執行時也會困難重重。</p>
<p>因此在<a href="https://deanlin.net/blog/202210/engineer-pm-project-execution/">下一篇文章</a>中，筆者會針對常見的合作情境，分享實用的「溝通格式」，讓專案執行時更為順利！</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>請你說明一下，這個功能的時數是怎麼估出來的？── RD 與 PM 的攻防戰</title>
      <link>https://deanlin.net/blog/202210/rd-vs-pm-time-estimates/</link>
      <pubDate>Mon, 03 Oct 2022 16:00:00 +0800</pubDate>
      <guid>https://deanlin.net/blog/202210/rd-vs-pm-time-estimates/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>在上篇文章中，筆者分析了 RD 在面對任務指派時的想法。</description>
      <media:content url="https://deanlin.net/blog/202210/rd-vs-pm-time-estimates/images/cover_hu_3ef2e66fa50abf8a.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><a href="https://deanlin.net/blog/202209/rd-vs-pm-asking-questions/">在上篇文章中</a>，筆者分析了 RD 在面對任務指派時的想法。</p>
<p>PM 雖然被稱之為專案「經理」，但在大多數的公司並沒有管理實權；如果想讓 RD 跟你配合，至少要對技術要有一定程度的了解，並能聽懂對方想表達的內容。</p>
<p>本篇文章會分享一些實用技巧，讓 PM 獲得更精確的資訊來判斷 RD 的估時是否合理，並告訴你遇到不配合的 RD 該如何應對進退；話不多說，讓我們看下去！</p>
<h2 id="了解對方的專業真的很重要嗎">了解對方的專業真的很重要嗎？<a class="h-anchor" href="#%e4%ba%86%e8%a7%a3%e5%b0%8d%e6%96%b9%e7%9a%84%e5%b0%88%e6%a5%ad%e7%9c%9f%e7%9a%84%e5%be%88%e9%87%8d%e8%a6%81%e5%97%8e" aria-label="這個段落的連結"></a></h2>
<p>筆者很負責任的跟你說：「超級重要！」</p>
<p>當然這不是要你成為該領域的專家，但至少要具備「溝通、評估」的能力。</p>
<p>以 Web 開發舉例，如果你不具備前端、後端、資料庫的概念，你怎麼評估及分配任務？難道只靠感覺來判斷工程師的估時是否合理？</p>
<p>就拿筆者過去的經驗來說，儘管我有全端開發經驗，但在擔任公司 PM 時，因為缺乏與設計師合作的經驗，導致合作初期無法判斷設計師的估時是否合理。</p>
<p><strong>了解專業是為了評估出「合理時間」，並在遇到不合理的狀況時，能適時提出自己有疑問的觀點。</strong></p>
<blockquote>
<p>在此特別強調「不要亂估時」！一但被發現會破壞彼此的信任，也是不尊重自己專業的表現。</p>
</blockquote>
<h2 id="如果-rd-的估時超出-pm-心中的時程">如果 RD 的估時超出 PM 心中的時程<a class="h-anchor" href="#%e5%a6%82%e6%9e%9c-rd-%e7%9a%84%e4%bc%b0%e6%99%82%e8%b6%85%e5%87%ba-pm-%e5%bf%83%e4%b8%ad%e7%9a%84%e6%99%82%e7%a8%8b" aria-label="這個段落的連結"></a></h2>
<p>原則上，PM 都是秉持相信 RD 的態度請他估時的；但有時 RD 估出來的時數，會讓人懷疑自己是不是被糊弄了。</p>
<p>如果專案有時程壓力，PM 會需要更精確的資訊來協助判斷，比如：</p>
<ol>
<li><strong>向 RD 詢問該 Task 的細節</strong>：就像標題所述，PM 需要了解這些時間花在哪裡，是否需要拆成多個 Subtask？因為有時一行字的需求，背後可能涉及到資料庫的遷移、後端 API 改寫、前端畫面調整。</li>
<li><strong>是否有擅長這個領域的人</strong>：有時會有這麼長的估時，是因為指派對象不擅長這部分的技術，或是缺乏相關經驗；如果時程寬鬆，那是一個很好的學習機會，但如果有時程壓力，還是看誰擅長就由誰負責（如果 PM 不清楚每位成員擅長的領域，在 Planning 階段可以請資深工程師 or Tech Lead 從旁建議）。</li>
<li><strong>如果是全新領域</strong>：RD 在面對陌生的技術時，也只能憑感覺亂估；因此建議開一個「研究新技術」的 Task，讓 RD 先對技術有基礎的認知，在這之後估出來的時間才有參考價值。</li>
<li><strong>是否有最小可行性方案</strong>：如果不是技術達不到，而是時程根本不夠，那就要考慮縮減非必要功能，或是採用替代方案。比如說有個需求是「使用者列表」，在 API 設計上，工程師會覺得除了「查詢」外，應該還要有「新增、修改、刪除」的功能，但如果客戶沒有這些需求，那或許先階段用 Seeder 把使用者寫入資料庫就可以了。</li>
</ol>
<blockquote>
<p>RD 估時較長，還有一個常見原因，那就是面對「需求變更」時的緩衝時間；理想上需求變更應該要延長專案時程，但實務上專案的截止日期很難調整，因此在估時上多少會預留一點空間來保護自己。</p>
<p>這個部分涉及到組織文化、公司面對客戶的話語權、主管態度等多個方面，如果讀者對這個話題感興趣，筆者會在獨立一篇與大家分享。</p>
</blockquote>
<h2 id="適當的借勢">適當的借勢<a class="h-anchor" href="#%e9%81%a9%e7%95%b6%e7%9a%84%e5%80%9f%e5%8b%a2" aria-label="這個段落的連結"></a></h2>
<p>如果 PM 初來乍到，而 RD 年資很深，那有可能遇到 PM 叫不動 RD、RD 明顯亂估時的狀況。</p>
<p>在職場上我們盡量與人為善，但假使對方就是很皮，你以禮相待他還是使勁搞破壞；那適時的請主管協調也是有必要的，不過這個方法偶爾為之還行，如果常常使用不但會被 RD 討厭，還會讓主管懷疑你的工作能力。</p>
<blockquote>
<p>每間公司的文化不同，但拿人手短、吃人嘴短幾乎是共通的；有時請 RD 喝個下午茶，你會發現大家突然變得很好溝通（每個人的社交方式不同，也歡迎讀者分享自身經驗）。</p>
</blockquote>
<h2 id="結語">結語<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e" aria-label="這個段落的連結"></a></h2>
<p>有些 RD 被詢問估時的細節時，會覺得 PM 不尊重專業；但 PM 真的是只是想了解細節，並尋求更好的方案。</p>
<p>筆者認為 PM 與 RD 是平等互助的關係，只是彼此的立場與看事情的角度有些許差異；如果總是刁難對方，其實是在損害自己的 Credit，並讓主管難做人。</p>
<p>「RD 與 PM 的攻防戰」這個議題就先講到這邊，希望有讓大家看到不同角度的思維模式，如果喜歡類似的內容也歡迎留言告訴我～</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>講這麼多次了你還問？聽不懂就不要問！── RD 與 PM 的攻防戰</title>
      <link>https://deanlin.net/blog/202209/rd-vs-pm-asking-questions/</link>
      <pubDate>Wed, 28 Sep 2022 10:45:00 +0800</pubDate>
      <guid>https://deanlin.net/blog/202209/rd-vs-pm-asking-questions/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>標題的火藥味有點濃，但 RD 與新手 PM 溝通時，真的很常出現類似的對話。</description>
      <media:content url="https://deanlin.net/blog/202209/rd-vs-pm-asking-questions/images/cover_hu_3dad94b4c4ccdab3.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>標題的火藥味有點濃，但 RD 與新手 PM 溝通時，真的很常出現類似的對話。</p>
<p>RD 與 PM 如果有默契，那會是一個很好的組合；但如果彼此水火不容，專案絕對會各種出包。</p>
<h2 id="為什麼會出現標題的對話">為什麼會出現標題的對話？<a class="h-anchor" href="#%e7%82%ba%e4%bb%80%e9%ba%bc%e6%9c%83%e5%87%ba%e7%8f%be%e6%a8%99%e9%a1%8c%e7%9a%84%e5%b0%8d%e8%a9%b1" aria-label="這個段落的連結"></a></h2>
<p>有些公司請 PM 更像是在找秘書，基本上不太管專業背景、從業經驗，只是找一個會紀錄需求，安排時程的人。</p>
<p>在這樣前提下找到的 PM，說實話 RD 真的心很累，大家都是出來打工的，憑什麼要我成為你增加經驗的工具人。</p>
<p>因為沒有專業背景，所以 PM 問的問題通常沒有什麼 Sense，甚至類似的問題還會重複問；而這個狀況除非 PM 有自知之明去學習相關知識，否則未必會隨時間改善。</p>
<blockquote>
<p><strong>大部分 RD 會服從有專業能力的人，然後看不起那些什麼都不懂，只會一直塞工作給他們的人。</strong></p>
<p>有些比較情緒化的 RD 在不爽的時候，就算看到專案規劃有問題，也不會出言提醒（不過這樣做也會害到自己，筆者建議要保持工程師的專業素養）。</p>
</blockquote>
<h2 id="面對專業的-pm">面對專業的 PM<a class="h-anchor" href="#%e9%9d%a2%e5%b0%8d%e5%b0%88%e6%a5%ad%e7%9a%84-pm" aria-label="這個段落的連結"></a></h2>
<p>當然業界也有很多專業的 PM，實務經驗豐富的他們對時程尤其敏感。</p>
<p>通常 PM 在收到需求後，會先請 RD 評估需要的工時；如果 RD 評估的工時超過 PM 心中的時程，那 PM 接下來就會詢問為什麼要花這麼多時間？</p>
<p>這裡我們先分析 RD 估時較長的幾種原因：</p>
<ol>
<li>之前沒有使用過這項技術，在未知的狀態下，會先拋出一個較長的時程。</li>
<li>即使遇到需求變更，專案的截止日期也不會改變，所以先給自己預留一份緩衝時間。</li>
<li>前段時間工作 Loading 太重，想在淡季為自己爭取一點喘息空間。</li>
</ol>
<p>關於第 1、2 點，我們放到下一個 PM 篇再來討論；今天這篇文章先來聊聊 RD 如何用好的理由實現第 3 點。</p>
<h2 id="rd-如何用好的理由為自己爭取喘息空間">RD 如何用好的理由為自己爭取喘息空間<a class="h-anchor" href="#rd-%e5%a6%82%e4%bd%95%e7%94%a8%e5%a5%bd%e7%9a%84%e7%90%86%e7%94%b1%e7%82%ba%e8%87%aa%e5%b7%b1%e7%88%ad%e5%8f%96%e5%96%98%e6%81%af%e7%a9%ba%e9%96%93" aria-label="這個段落的連結"></a></h2>
<p>有經驗的 PM 會適時地讓 RD 有喘息空間，但 RD 也要給 PM 一些好的理由，讓他可以跟老闆交代，這就是筆者說的「默契」，比如說：</p>
<ul>
<li><strong>重構程式</strong>：快速開發容易累積技術債，可以趁淡季的時候進行重構，以維護專案程式碼的品質；而多少程式需要重構，每個功能重構所需的時間都是很有彈性的。</li>
<li><strong>研究新技術</strong>：評估未來專案可能會用到的技術、套件，並提前研究，避免日後專案執行時卡關。</li>
<li><strong>整理技術文件</strong>：在有時程壓力的狀況下，常常 API 文件、部署文件、使用說明文件的內容不齊全，可以趁這個時機點更新到最新版。</li>
</ul>
<p>筆者只是舉出 3 個常見例子，歡迎讀者留言補充自己是如何爭取「喘息空間」的。</p>
<h2 id="結語">結語<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e" aria-label="這個段落的連結"></a></h2>
<p>「專業」為自己贏得尊重，彼此的「默契」讓合作更加順利。</p>
<p>撰寫需求規格時，PM 很難把每個面向都考慮得很完整，因此開發時，需要 RD 適時地與 PM 溝通，或是用自己的經驗補齊不足之處；但具體做到哪個程度，也要參考到專案的時程。</p>
<p><a href="https://deanlin.net/blog/202210/rd-vs-pm-time-estimates/">下篇文章</a>，就讓我們改由 PM 的角度來討論這個話題吧。</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>工程師：「好！我閉嘴！反正我說的話都沒人在聽！」（三）</title>
      <link>https://deanlin.net/blog/202208/engineers-stop-speaking-up-3/</link>
      <pubDate>Mon, 29 Aug 2022 10:10:00 +0800</pubDate>
      <guid>https://deanlin.net/blog/202208/engineers-stop-speaking-up-3/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>在前兩篇文章中（連結 1、連結 2），我們討論了團隊的聲音為何越來越少，以及主管權衡事情的角度。</description>
      <media:content url="https://deanlin.net/blog/202208/engineers-stop-speaking-up-3/images/cover_hu_78cc7bf4f223e285.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<blockquote>
<p>文章提及之專案、人物、事件純屬虛構，如有雷同，實屬巧合，請勿對號入座。</p>
</blockquote>
<p>在前兩篇文章中（<a href="https://deanlin.net/blog/202208/engineers-stop-speaking-up-1/">連結 1</a>、<a href="https://deanlin.net/blog/202208/engineers-stop-speaking-up-2/">連結 2</a>），我們討論了團隊的聲音為何越來越少，以及主管權衡事情的角度。</p>
<p>而在這篇文章想跟大家分享，這些累積的問題是如何爆發的。</p>
<h2 id="不患寡而患不均"><strong>▋不患寡，而患不均</strong><a class="h-anchor" href="#%e4%b8%8d%e6%82%a3%e5%af%a1%e8%80%8c%e6%82%a3%e4%b8%8d%e5%9d%87" aria-label="這個段落的連結"></a></h2>
<p>在一個團隊中，如果主管對每個人的標準都差不多，那至少可以維持基礎的平衡。</p>
<p>但如果出現了嚴重的偏差，比如：</p>
<ol>
<li>同樣是犯錯，有些人輕描淡寫帶過，而某些人則是被嚴懲。</li>
<li>同樣是功勞，有些人藉此升官發財，而某些人卻被賦予更重的任務。</li>
</ol>
<p>只要有人的地方，就一定會有「親疏遠近」，主管跟其中幾個人特別要好也是人之常情；但如果差別待遇的太明顯，那團隊內部肯定會出現問題。</p>
<p>就像這名工程師在爆炸前有提出最後一個問題：「如果有做不好的地方，我會持續改進。就算在會議上被點名檢討，只要是自己的問題，我就會虛心接受，並在下次做得更好；但為什麼我提出的問題，專案經理都沒有改進？」</p>
<p>結果沒想到主管回他：「不要總是在檢討別人，你要加強溝通技巧啊！」</p>
<p>在聽完主管的話後，工程師理智斷線，怒吼道：「好！我閉嘴！反正我說的話都沒人在聽！」並且在當天遞出辭呈。</p>
<blockquote>
<p>如果主管對下屬過度雙重標準，那團隊的流動率會相當高。</p>
</blockquote>
<h2 id="專案經理的後續發展"><strong>▋專案經理的後續發展</strong><a class="h-anchor" href="#%e5%b0%88%e6%a1%88%e7%b6%93%e7%90%86%e7%9a%84%e5%be%8c%e7%ba%8c%e7%99%bc%e5%b1%95" aria-label="這個段落的連結"></a></h2>
<p>也許讀者覺得專案經理這麼混，一但離開公司肯定四處碰壁，但實際上在不久後他也遞出了辭呈，並成功跳槽到另一間薪水更高的公司。</p>
<p>其實這位專案經理並不是沒有專業能力，而是因為受到主管的庇護而不需要認真發揮實力；如果一個人發現自己就算很混也能立足，那大多數的人就是能混就混。</p>
<h2 id="主管最後怎麼樣了"><strong>▋主管最後怎麼樣了？</strong><a class="h-anchor" href="#%e4%b8%bb%e7%ae%a1%e6%9c%80%e5%be%8c%e6%80%8e%e9%ba%bc%e6%a8%a3%e4%ba%86" aria-label="這個段落的連結"></a></h2>
<p>因為專案經理離職，所以他需要暫時代理這個職位；為了避免更多的工程師離職，他重新規範需求規格該有的元素；並且開始面試新的專案經理、工程師。</p>
<p>有沒有覺得這些事情很熟悉？</p>
<p>對！其實就是上一篇提到，主管想解決問題時所需要做的事。有時我們把時間拉長會發現，該做的事還是得做，如果當下不做，只會讓問題在引爆後更難收拾。</p>
<h2 id="筆者的想法"><strong>▋筆者的想法</strong><a class="h-anchor" href="#%e7%ad%86%e8%80%85%e7%9a%84%e6%83%b3%e6%b3%95" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>發現問題 ➝ 承認問題 ➝ 解決問題</p>
</blockquote>
<p>團隊中不乏能發現問題的成員，而解決問題的方法也很多，比如：「將大問題切割成小問題、定期回顧問題處理狀況、獎懲機制明確……」隨便 Google 都有一堆解答。</p>
<p>既然能發現問題，解答又不難找，為什麼團隊還是有這麼多問題？</p>
<p>從筆者的角度來看，應該是卡在「承認問題」的環節；換而言之，「人」才是造成問題無法解決的根本原因。就像在這個案例中，如果主管能適時地做出決策，也許故事的發展就不同了……</p>
]]></content:encoded>
    </item>
    <item>
      <title>工程師：「好！我閉嘴！反正我說的話都沒人在聽！」（二）</title>
      <link>https://deanlin.net/blog/202208/engineers-stop-speaking-up-2/</link>
      <pubDate>Wed, 24 Aug 2022 10:05:00 +0800</pubDate>
      <guid>https://deanlin.net/blog/202208/engineers-stop-speaking-up-2/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>在上篇文章中，我們提到團隊改善的聲音越來越少，最後淪為一個形式的問題。</description>
      <media:content url="https://deanlin.net/blog/202208/engineers-stop-speaking-up-2/images/cover_hu_92b180a3048e705c.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<blockquote>
<p>文章提及之專案、人物、事件純屬虛構，如有雷同，實屬巧合，請勿對號入座。</p>
</blockquote>
<p><a href="https://deanlin.net/blog/202208/engineers-stop-speaking-up-1/">在上篇文章中</a>，我們提到團隊改善的聲音越來越少，最後淪為一個形式的問題。</p>
<p>今天讓我們來了解，為何有些主管在收集到成員對團隊的建議後，選擇忽視成員心聲，甚至把問題放著不管。</p>
<h2 id="對錯重要還是穩定重要">對錯重要，還是穩定重要？<a class="h-anchor" href="#%e5%b0%8d%e9%8c%af%e9%87%8d%e8%a6%81%e9%82%84%e6%98%af%e7%a9%a9%e5%ae%9a%e9%87%8d%e8%a6%81" aria-label="這個段落的連結"></a></h2>
<p>假使今天有工程師提出問題：「專案經理寫的需求規格太過模糊，裡面沒有交代前因後果，甚至連一些判斷的邏輯都沒有寫，這樣每次在實作前都要先跟他討論一次，我覺得非常浪費時間。」</p>
<p>上面問題的責任歸屬很清楚，根本的原因就是「專案經理缺乏撰寫需求規格的專業能力」，理論上我們只要請專案經理跟工程師溝通，協調出怎麼樣的需求規格是可以接受的，那問題就解決了。</p>
<p>但如果我們把上述的情境加上如下前提：</p>
<ol>
<li>專案經理已經在公司做了 5 年，過去的專案也都順利結案。</li>
<li>工程師才進來 6 個月，有些東西還在摸索。</li>
</ol>
<p>我想整個問題就會變複雜了，以這個案例來說，主管也在會議上要求專案經理寫出更詳細的規格；但一個月後，規格依舊模糊，完全沒有改善的徵兆。</p>
<blockquote>
<p>這類問題常發生在老鳥身上，他們認為：「自己過去這樣做都很順利，今天來了一個小毛頭就要我配合他進行調整，憑什麼？」</p>
</blockquote>
<h2 id="不是沒有解決方案只是很難推動以及想不想推動">不是沒有解決方案，只是很難推動，以及想不想推動<a class="h-anchor" href="#%e4%b8%8d%e6%98%af%e6%b2%92%e6%9c%89%e8%a7%a3%e6%b1%ba%e6%96%b9%e6%a1%88%e5%8f%aa%e6%98%af%e5%be%88%e9%9b%a3%e6%8e%a8%e5%8b%95%e4%bb%a5%e5%8f%8a%e6%83%b3%e4%b8%8d%e6%83%b3%e6%8e%a8%e5%8b%95" aria-label="這個段落的連結"></a></h2>
<p>主管不傻，他當然也知道解決方案；但就像是上面的例子，如果你硬是要專案經理改，如果他不爽不幹了，許多他手上正在進行的專案都會受到影響。</p>
<blockquote>
<p>離職預告期是給善良的人來遵守的，筆者曾遇過提離職後，直接請連續假到離職日的人。</p>
</blockquote>
<p>很多人會想如果再找一個專案經理，慢慢取代他手上的工作不就好了；但實際上部門編列的預算，未必能夠再多聘請一個人。</p>
<p>上面講了這麼多，只是想透過實際案例讓讀者們了解；站在主管的角度，他要做的是權衡出一個對部門(自己)最有利的方案，而不僅僅只是從事情的對錯來決策。</p>
<p>如果主管只是想悠閒混日子，那他可以繼續放任專案經理；但假使想徹底把問題解決，他就需要做多手準備，比如：</p>
<ol>
<li>深入了解每個專案，萬一專案經理離職，他可以暫時代理這個位置。</li>
<li>律定需求規格該有的元素，讓工程師可以順利作業。</li>
<li>開始面試新的專案經理，確認專業能力符合需求。</li>
</ol>
<h2 id="假使你是主管面對這個問題你會選擇哪一條路">假使你是主管，面對這個問題你會選擇哪一條路？<a class="h-anchor" href="#%e5%81%87%e4%bd%bf%e4%bd%a0%e6%98%af%e4%b8%bb%e7%ae%a1%e9%9d%a2%e5%b0%8d%e9%80%99%e5%80%8b%e5%95%8f%e9%a1%8c%e4%bd%a0%e6%9c%83%e9%81%b8%e6%93%87%e5%93%aa%e4%b8%80%e6%a2%9d%e8%b7%af" aria-label="這個段落的連結"></a></h2>
<p>就像上篇文章提到的，很多問題都是綜合因素所造成；今天所舉出的這個例子，應該也在很多公司不斷上演。</p>
<p>站在旁觀者的角度，我們知道怎麼做才是「正確」的；但站在當事人的角度，因為問題還沒有大到讓團隊無法運作，在動力不足的狀態下很多人會放棄決策（因為做出決策後，自己接下來幾個月都會很累）。</p>
<blockquote>
<p>人，容易因為需要太多努力，而拒絕改變。</p>
</blockquote>
<p><a href="https://deanlin.net/blog/202208/engineers-stop-speaking-up-3/">在下一篇文章中</a>，筆者會跟大家分析工程師真正的引爆點，以及主管後續的故事。</p>
]]></content:encoded>
    </item>
    <item>
      <title>工程師：「好！我閉嘴！反正我說的話都沒人在聽！」（一）</title>
      <link>https://deanlin.net/blog/202208/engineers-stop-speaking-up-1/</link>
      <pubDate>Mon, 22 Aug 2022 10:20:26 +0800</pubDate>
      <guid>https://deanlin.net/blog/202208/engineers-stop-speaking-up-1/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>這個情緒話的標題，真的是筆者在現實職場中聽到的。</description>
      <media:content url="https://deanlin.net/blog/202208/engineers-stop-speaking-up-1/images/cover_hu_b9d446a2a3ebe26d.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<blockquote>
<p>文章提及之專案、人物、事件純屬虛構，如有雷同，實屬巧合，請勿對號入座。</p>
</blockquote>
<p>這個情緒話的標題，真的是筆者在現實職場中聽到的。</p>
<p>我打算以這個標題做一個系列文（目前預計有 3 篇），讓你了解是什麼樣的問題，才導致工程師情緒失控用這種方式表達自己的不滿。</p>
<h2 id="主管在徵詢團隊成員意見時是真的想改善還是做個形式而已">主管在徵詢團隊成員意見時，是真的想改善？還是做個形式而已？<a class="h-anchor" href="#%e4%b8%bb%e7%ae%a1%e5%9c%a8%e5%be%b5%e8%a9%a2%e5%9c%98%e9%9a%8a%e6%88%90%e5%93%a1%e6%84%8f%e8%a6%8b%e6%99%82%e6%98%af%e7%9c%9f%e7%9a%84%e6%83%b3%e6%94%b9%e5%96%84%e9%82%84%e6%98%af%e5%81%9a%e5%80%8b%e5%bd%a2%e5%bc%8f%e8%80%8c%e5%b7%b2" aria-label="這個段落的連結"></a></h2>
<p>在部門會議時（ex：週會、月會），有些主管會詢問大家：「團隊還有哪些地方可以改善？」</p>
<p>相信大部分主管是想透過這個問題與成員討論，進而讓團隊的運作更加順暢；但通常只有一開始的 3~5 次會有人提出哪些地方需要改善，隨著時間推進，會越來越沒有人提出問題。</p>
<p>一但發生上述情境，這個問題就會淪為一個形式，象徵會議的結束。</p>
<h2 id="沒有人提出要改善的地方是真的沒有地方可以改善了嗎">沒有人提出要改善的地方，是真的沒有地方可以改善了嗎？<a class="h-anchor" href="#%e6%b2%92%e6%9c%89%e4%ba%ba%e6%8f%90%e5%87%ba%e8%a6%81%e6%94%b9%e5%96%84%e7%9a%84%e5%9c%b0%e6%96%b9%e6%98%af%e7%9c%9f%e7%9a%84%e6%b2%92%e6%9c%89%e5%9c%b0%e6%96%b9%e5%8f%af%e4%bb%a5%e6%94%b9%e5%96%84%e4%ba%86%e5%97%8e" aria-label="這個段落的連結"></a></h2>
<p>我相信一定有團隊在經過多次磨合後，已經摸索出最適合當下的運作模式，即使遇到新問題也可以快速應對。</p>
<p>但這種團隊真的是「極少數」，實際上大部分團隊的狀況是：「過去的問題尚未解決，新的問題不斷誕生。」</p>
<p>明明問題一直存在，甚至越來越多，為什麼反而沒有人提出來呢？</p>
<h2 id="是什麼原因導致後來沒有人提出問題">是什麼原因，導致後來沒有人提出問題？<a class="h-anchor" href="#%e6%98%af%e4%bb%80%e9%ba%bc%e5%8e%9f%e5%9b%a0%e5%b0%8e%e8%87%b4%e5%be%8c%e4%be%86%e6%b2%92%e6%9c%89%e4%ba%ba%e6%8f%90%e5%87%ba%e5%95%8f%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<p>以筆者過去的經驗來說，在發生以下的狀況後，即使對工作再有熱情，也會逐漸被澆熄：</p>
<ol>
<li>問題在被提出來後，並沒有明確地商討出彼此能接受的解決方案。</li>
<li>往往只有階級高、資歷深的人提出的建議才會受到重視；而基層、資歷淺的人所提出的建議容易被當耳邊風。</li>
<li>技術人員所提出的建議，有時會被以「你不懂專案管理、這不是你應該插手的事」為由否決。</li>
<li>即使討論出解決方案，也不是每位團隊成員都會遵守執行。</li>
</ol>
<blockquote>
<p>冰凍三尺，非一日之寒。很多問題都是綜合因素所造成的。</p>
</blockquote>
<h2 id="大家可以想一想">大家可以想一想<a class="h-anchor" href="#%e5%a4%a7%e5%ae%b6%e5%8f%af%e4%bb%a5%e6%83%b3%e4%b8%80%e6%83%b3" aria-label="這個段落的連結"></a></h2>
<p>我相信這個問題不只筆者碰到過，應該絕大多數的團隊都曾遇到，或正在面臨類似的狀況。</p>
<p>說一句實在話，團隊問題並不是光靠基層努力就能解決的，畢竟現實生活不是連續劇；如果管理層不覺醒，問題會一直存在，甚至變得更糟糕。</p>
<p><a href="https://deanlin.net/blog/202208/engineers-stop-speaking-up-2/">下一篇文章中</a>，筆者會分析為什麼有些主管選擇忽視成員心聲，甚至把問題放著不管。</p>
<p>這些明眼人都知道會對團隊帶來負面影響的問題，為什麼他們還是做了？真的是因為昏庸無能嗎？</p>
]]></content:encoded>
    </item>
    <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>
    <item>
      <title>Microsoft Project 好用嗎？我需要它嗎？</title>
      <link>https://deanlin.net/blog/202110/microsoft-project-review/</link>
      <pubDate>Mon, 04 Oct 2021 11:15:54 +0800</pubDate>
      <guid>https://deanlin.net/blog/202110/microsoft-project-review/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>Microsoft 推出的產品非常的多，但過去使用的經驗告訴我他產品只會做半套，在市場上的定位不上不下；不過今天實測的這款 Project 是需要付費才能使用的（試用期一個月），希望它能給筆者帶來不一樣的驚喜。</description>
      <media:content url="https://deanlin.net/blog/202110/microsoft-project-review/images/microsoft-project-review-og_hu_1d9a6af99c1ab2bf.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>Microsoft 推出的產品非常的多，但過去使用的經驗告訴我他產品只會做半套，在市場上的定位不上不下；不過今天實測的這款 Project 是需要付費才能使用的（試用期一個月），希望它能給筆者帶來不一樣的驚喜。</p>
<p><img src="https://deanlin.net/blog/202110/microsoft-project-review/images/microsoft-project-review-01.webp" width="460" height="200" alt="Microsoft Project 好用嗎？我需要它嗎？（圖 1）" fetchpriority="high" decoding="async"></p>
<pre tabindex="0"><code>大綱
一、從空白專案來認識這套軟體
  ➤ 新增空白專案
  ➤ 跟著教學導覽走
  ➤ 新增工作
  ➤ 新增方便專案管理的欄位
  ➤ 切換任務顯示的方式
二、小結
  ➤ 方便專案管理的工具
  ➤ 整合上的困難
  ➤ 它並不適合用來直接指派任務
</code></pre><h2 id="一從空白專案來認識這套軟體">一、從空白專案來認識這套軟體<a class="h-anchor" href="#%e4%b8%80%e5%be%9e%e7%a9%ba%e7%99%bd%e5%b0%88%e6%a1%88%e4%be%86%e8%aa%8d%e8%ad%98%e9%80%99%e5%a5%97%e8%bb%9f%e9%ab%94" aria-label="這個段落的連結"></a></h2>
<h3 id="-新增空白專案">新增空白專案<a class="h-anchor" href="#-%e6%96%b0%e5%a2%9e%e7%a9%ba%e7%99%bd%e5%b0%88%e6%a1%88" aria-label="這個段落的連結"></a></h3>
<p>在登入後空白的初始畫面非常簡約，點擊「新增空白專案」來看看需要設定哪些參數。</p>
<p><img src="https://deanlin.net/blog/202110/microsoft-project-review/images/microsoft-project-review-02.webp" width="1400" height="713" alt="新增空白專案（圖 2）" loading="lazy" decoding="async"></p>
<h3 id="-跟著教學導覽走">跟著教學導覽走<a class="h-anchor" href="#-%e8%b7%9f%e8%91%97%e6%95%99%e5%ad%b8%e5%b0%8e%e8%a6%bd%e8%b5%b0" aria-label="這個段落的連結"></a></h3>
<p>在 Project 建立後會有基礎學習導覽，讓你知道哪些地方需要設定；像是第一步就是給「專案命名」。</p>
<p><img src="https://deanlin.net/blog/202110/microsoft-project-review/images/microsoft-project-review-03.webp" width="1400" height="713" alt="跟著教學導覽走（圖 3）" loading="lazy" decoding="async"></p>
<h3 id="-新增工作">新增工作<a class="h-anchor" href="#-%e6%96%b0%e5%a2%9e%e5%b7%a5%e4%bd%9c" aria-label="這個段落的連結"></a></h3>
<p>在建立任務時主要需要設定「任務名稱、持續時間」，有需求也可以「新增子任務」。</p>
<blockquote>
<p>不過也有發現到他任務的「持續時間」似乎更新上是有點 Bug 的，主任務沒有累加。</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202110/microsoft-project-review/images/microsoft-project-review-04.webp" width="1315" height="562" alt="新增工作（圖 4）" loading="lazy" decoding="async"></p>
<h3 id="-新增方便專案管理的欄位">新增方便專案管理的欄位<a class="h-anchor" href="#-%e6%96%b0%e5%a2%9e%e6%96%b9%e4%be%bf%e5%b0%88%e6%a1%88%e7%ae%a1%e7%90%86%e7%9a%84%e6%ac%84%e4%bd%8d" aria-label="這個段落的連結"></a></h3>
<p>如果有需求，可以自行「新增欄位」；以筆者過去的經驗來說，這個工具所提供的欄位都是從「專案管理」的角度出發的，像是每個任務預計完成時間、已經投入的時間、待投入時間、任務相依性…這些都能幫助使用者有效的做管理。</p>
<p><img src="https://deanlin.net/blog/202110/microsoft-project-review/images/microsoft-project-review-05.webp" width="1400" height="552" alt="新增方便專案管理的欄位（圖 5）" loading="lazy" decoding="async"></p>
<h3 id="-切換任務顯示的方式">切換任務顯示的方式<a class="h-anchor" href="#-%e5%88%87%e6%8f%9b%e4%bb%bb%e5%8b%99%e9%a1%af%e7%a4%ba%e7%9a%84%e6%96%b9%e5%bc%8f" aria-label="這個段落的連結"></a></h3>
<p>Project 也提供不同的顯示方式，其中「面板」的顯示方式就跟 Trello 的風格很像；你可以透過「新增貯體」來將任務分類。</p>
<p><img src="https://deanlin.net/blog/202110/microsoft-project-review/images/microsoft-project-review-06.webp" width="1400" height="655" alt="切換任務顯示的方式（圖 6）" loading="lazy" decoding="async"></p>
<p>如果你想要從專案整體的角度來分配任務，「時間表」的顯示挺方便的；因為你可以很清晰地看到每個任務的時程；較不會發生任務互相衝突或是前置任務尚未完成後面任務就啟動的問題。</p>
<p><img src="https://deanlin.net/blog/202110/microsoft-project-review/images/microsoft-project-review-07.webp" width="1400" height="479" alt="切換任務顯示的方式（圖 7）" loading="lazy" decoding="async"></p>
<hr>
<h2 id="二小結">二、小結<a class="h-anchor" href="#%e4%ba%8c%e5%b0%8f%e7%b5%90" aria-label="這個段落的連結"></a></h2>
<h3 id="-方便專案管理的工具">方便專案管理的工具<a class="h-anchor" href="#-%e6%96%b9%e4%be%bf%e5%b0%88%e6%a1%88%e7%ae%a1%e7%90%86%e7%9a%84%e5%b7%a5%e5%85%b7" aria-label="這個段落的連結"></a></h3>
<p>老實說，相比於 List 、 Planner；Project 算是專門為了專案管理打造的軟體，無論從視覺化還是提供的功能都能讓專案經理掌握進度並與其他團隊溝通。</p>
<h3 id="-整合上的困難">整合上的困難<a class="h-anchor" href="#-%e6%95%b4%e5%90%88%e4%b8%8a%e7%9a%84%e5%9b%b0%e9%9b%a3" aria-label="這個段落的連結"></a></h3>
<p>它跟 List、Planner 有一樣的通病；就是只把某一項功能做好，但如果想要更加細節的功能就只能用超連結出去。</p>
<p>比如我想要在這個任務中附上照片只能用附件的方式，但這樣的方式真的很影響閱讀性；如果標題下得不夠好，也很難透過關鍵字找出任務（沒有 tag 的概念）。</p>
<h3 id="-它並不適合用來直接指派任務">它並不適合用來直接指派任務<a class="h-anchor" href="#-%e5%ae%83%e4%b8%a6%e4%b8%8d%e9%81%a9%e5%90%88%e7%94%a8%e4%be%86%e7%9b%b4%e6%8e%a5%e6%8c%87%e6%b4%be%e4%bb%bb%e5%8b%99" aria-label="這個段落的連結"></a></h3>
<p>因為任務的描述只能靠文字，加圖片還要用附件的方式；這造成被指派的負責人在閱讀時很容易直接忽略圖片，從而導致忽略部分重要訊息。</p>
<p>如果是用超連結導航到 OneNote 這類的筆記軟體是能解決問題；但真的對使用者而言非常不友善，每次都要在兩個軟體間不停切換。</p>
<hr>
<blockquote class="pullquote"><p>如果要讓筆者做個簡短的使用心得，我想應該是：「Project 只適合專案經理使用，或是專案經理間的溝通；如果要用它指派任務，我覺得不太合適。」</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>禪道 Zentao 新手教學 &amp; 體驗心得</title>
      <link>https://deanlin.net/blog/202103/zentao-beginner-guide/</link>
      <pubDate>Tue, 16 Mar 2021 15:16:42 +0800</pubDate>
      <guid>https://deanlin.net/blog/202103/zentao-beginner-guide/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>以開源軟體而言 Zentao 是相當優秀的專案管理工具，但如果沒有一些基礎教學導引，裡面的功能真的多到你眼花撩亂不知從何下手，如果你有這種困擾，或是想再導入這個軟體前對他有更深一步的了解；我相信這篇文章能給你帶來很大的幫助，讓你了解重要角色的權限劃分及專案流程。</description>
      <media:content url="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-og_hu_92be4d2332b4541.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>以開源軟體而言 Zentao 是相當優秀的專案管理工具，但如果沒有一些基礎教學導引，裡面的功能真的多到你眼花撩亂不知從何下手，如果你有這種困擾，或是想再導入這個軟體前對他有更深一步的了解；我相信這篇文章能給你帶來很大的幫助，讓你了解重要角色的權限劃分及專案流程。</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-01.webp" width="1400" height="784" alt="禪道 Zentao 新手教學 &amp; 體驗心得（圖 1）" fetchpriority="high" decoding="async"></p>
<pre tabindex="0"><code>一、官方的『新手教程』
二、了解每個角色的職權
  1.『管理員』的基本功
    ➤ 調整部門結構
    ➤ 批量增加用戶
    ➤ 調整用戶權限
    ➤ 還原刪除的使用者
    ➤ 解鎖多次登入失敗的使用者
    ➤ 發現的系統 Bug
  2.『產品經理』的起手式
  3.『項目經理』如何分配任務
  4.『研發人員』完成收到的任務
  5.『測試人員』確認每個環節的穩定性
三、體驗心得
</code></pre><h2 id="一官方的新手教程">一、官方的『新手教程』<a class="h-anchor" href="#%e4%b8%80%e5%ae%98%e6%96%b9%e7%9a%84%e6%96%b0%e6%89%8b%e6%95%99%e7%a8%8b" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>這個新手教學並沒有依照角色權限設計，所以每個人看到的版本都是以『管理者』的角度去呈現</p>
</blockquote>
<p>官方提供的教學可以讓你快速了解整個系統的作業流程，你在『<strong>教學裡面的所有操作並不會儲存』</strong>只是給你體驗而已，所以意思意思打一下就好。</p>
<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-02.webp" width="1400" height="471" alt="新手教程用戶第一次登入時不會彈出，要自己點才會有喔！" loading="lazy" decoding="async">
  <figcaption>新手教程用戶<strong>第一次登入時不會彈出</strong>，要自己點才會有喔！</figcaption>
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-03.webp" width="1400" height="625" alt="該教程隨時可以退出，所以安心使用" loading="lazy" decoding="async">
  <figcaption>該教程<strong>隨時可以退出</strong>，所以安心使用</figcaption>
</figure>

<h3 id="教程面板說明">教程面板說明：<a class="h-anchor" href="#%e6%95%99%e7%a8%8b%e9%9d%a2%e6%9d%bf%e8%aa%aa%e6%98%8e" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>A</strong>：會有亮起來的地方讓你選擇及輸入資訊，這塊跟著走，資訊亂填即可(不會存進系統)</li>
<li><strong>B</strong>：教學的操作步驟</li>
<li><strong>C</strong>：以管理員導向的八個任務讓你體驗，接下來我的文章會更細節說明每個角色實際能操作的範疇</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-04.webp" width="1400" height="674" alt="教程面板說明：（圖 4）" loading="lazy" decoding="async"></p>
<h2 id="二了解每個角色的職權">二、了解每個角色的職權<a class="h-anchor" href="#%e4%ba%8c%e4%ba%86%e8%a7%a3%e6%af%8f%e5%80%8b%e8%a7%92%e8%89%b2%e7%9a%84%e8%81%b7%e6%ac%8a" aria-label="這個段落的連結"></a></h2>
<p>其實在首頁的地方就已經把每個角色的職權都說得清清楚楚了，如果發現有角色的職權跟你預計的不符合也可以再自行客製化</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-05.webp" width="1400" height="536" alt="二、了解每個角色的職權（圖 5）" loading="lazy" decoding="async"></p>
<h2 class="h-nomark" id="1-管理員的基本功">1. 『管理員』的基本功<a class="h-anchor" href="#1-%e7%ae%a1%e7%90%86%e5%93%a1%e7%9a%84%e5%9f%ba%e6%9c%ac%e5%8a%9f" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>管理員需要對所有職位的權限非常熟悉，並要了解每個權限具體對應到哪些功能</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-06.webp" width="668" height="51" alt="1. 『管理員』的基本功（圖 6）" loading="lazy" decoding="async"></p>
<h3 id="-調整部門結構">調整部門結構<a class="h-anchor" href="#-%e8%aa%bf%e6%95%b4%e9%83%a8%e9%96%80%e7%b5%90%e6%a7%8b" aria-label="這個段落的連結"></a></h3>
<p>必須要先設定好部門的結構再去新增用戶，因為用戶跟部門是有相互依賴關係的</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-07.webp" width="1400" height="433" alt="調整部門結構（圖 7）" loading="lazy" decoding="async"></p>
<h3 id="-批量增加用戶">批量增加用戶<a class="h-anchor" href="#-%e6%89%b9%e9%87%8f%e5%a2%9e%e5%8a%a0%e7%94%a8%e6%88%b6" aria-label="這個段落的連結"></a></h3>
<p>建議用『批量』的方式建立用戶，無論在權限、密碼方面的設定都會輕鬆許多</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-08.webp" width="1400" height="430" alt="批量增加用戶（圖 8）" loading="lazy" decoding="async"></p>
<p>批量新增時技巧：</p>
<ul>
<li><strong>職位高的先放</strong>：因為通常他們會是所屬部門的根目錄</li>
<li><strong>善用『同上』的功能</strong>：相同的部門、相同職位…依照同類型的分類設定可以加快速度</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-09.webp" width="1400" height="771" alt="批量增加用戶（圖 9）" loading="lazy" decoding="async"></p>
<h3 id="-調整用戶權限">調整用戶權限<a class="h-anchor" href="#-%e8%aa%bf%e6%95%b4%e7%94%a8%e6%88%b6%e6%ac%8a%e9%99%90" aria-label="這個段落的連結"></a></h3>
<p>在批量新增使用者的時候一個用戶只能有一個角色權限，但有能力的人在公司裡面身兼多職是常有的情形，就像我在公司是『研發 Dev』人員，但同時也需要負責『系統組織、後台設定 Admin』，所以我會給自己設定多種角色權限</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-10.webp" width="1400" height="634" alt="調整用戶權限（圖 10）" loading="lazy" decoding="async"></p>
<p>如果公司規模不大，一個團隊的 leader 要身兼 『項目經理 PM』、『產品經理 PO』、『研發主管 Dev Manager』、『產品主管 PD』都是很常見的（ex：我現在的直屬主管）</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-11.webp" width="1400" height="628" alt="調整用戶權限（圖 11）" loading="lazy" decoding="async"></p>
<h3 id="-還原刪除的使用者">還原刪除的使用者<a class="h-anchor" href="#-%e9%82%84%e5%8e%9f%e5%88%aa%e9%99%a4%e7%9a%84%e4%bd%bf%e7%94%a8%e8%80%85" aria-label="這個段落的連結"></a></h3>
<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-12.webp" width="1400" height="430" alt="後台 &gt; 數據 &gt; 資源回收筒 &gt; 還原" loading="lazy" decoding="async">
  <figcaption>後台 &gt; 數據 &gt; 資源回收筒 &gt; 還原</figcaption>
</figure>

<h3 id="-解鎖多次登入失敗的使用者">解鎖多次登入失敗的使用者<a class="h-anchor" href="#-%e8%a7%a3%e9%8e%96%e5%a4%9a%e6%ac%a1%e7%99%bb%e5%85%a5%e5%a4%b1%e6%95%97%e7%9a%84%e4%bd%bf%e7%94%a8%e8%80%85" aria-label="這個段落的連結"></a></h3>
<p>為了避免帳號被暴力破解法盜取，禪道有登入錯誤次數的設定</p>
<div class="gallery-row cols-2">

<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-13.webp" width="921" height="624" alt="解鎖多次登入失敗的使用者（圖 13）" loading="lazy" decoding="async">
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-14.webp" width="921" height="624" alt="如果執迷不誤的一直登入失敗，帳號就會被鎖住需要管理員協助處理" loading="lazy" decoding="async">
  <figcaption>如果執迷不誤的一直登入失敗，帳號就會被鎖住需要管理員協助處理</figcaption>
</figure>


</div>

<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-15.webp" width="1400" height="542" alt="組織 &gt; 用戶 &gt; 解鎖" loading="lazy" decoding="async">
  <figcaption>組織 &gt; 用戶 &gt; 解鎖</figcaption>
</figure>

<h3 id="-發現的系統-bug">發現的系統 Bug<a class="h-anchor" href="#-%e7%99%bc%e7%8f%be%e7%9a%84%e7%b3%bb%e7%b5%b1-bug" aria-label="這個段落的連結"></a></h3>
<p>這裡特別說明一下，禪道這個專案管理系統在權限管理、用戶管理上面的防呆不是很嚴謹，下面舉兩個範例：</p>
<ul>
<li>『管理者』移除自己『管理者』的身份後還能繼續使用管理者的權限😨，需要再次登入才會生效😱（如果由其他管理者移除對方管理者身份時一樣要重新登入才會讓身份生效）</li>
</ul>
<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-16.webp" width="1400" height="633" alt="我給『dev』這個用戶『Admin』的身份讓他可以管控用戶權限" loading="lazy" decoding="async">
  <figcaption>我給『dev』這個用戶『Admin』的身份讓他可以管控用戶權限</figcaption>
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-17.webp" width="1400" height="633" alt="把『dev』從『Admin』的用戶裡移除" loading="lazy" decoding="async">
  <figcaption>把『dev』從『Admin』的用戶裡移除</figcaption>
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-18.webp" width="1400" height="633" alt="『dev』從『Admin』移除後除非登出但還是有『Admin』權限" loading="lazy" decoding="async">
  <figcaption>『dev』從『Admin』移除後除非登出但還是有『Admin』權限</figcaption>
</figure>

<ul>
<li>『管理者』可以移除自己的帳號😨，帳號移除後還能繼續操作系統😱</li>
</ul>
<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-19.webp" width="1400" height="430" alt="我知道這個操作匪夷所思，但基於測試的心態就用用看了" loading="lazy" decoding="async">
  <figcaption>我知道這個操作匪夷所思，但基於測試的心態就用用看了</figcaption>
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-20.webp" width="1400" height="430" alt="神奇的事情發生惹！帳號移除後居然什麼操作都還能執行" loading="lazy" decoding="async">
  <figcaption>神奇的事情發生惹！帳號移除後居然什麼操作都還能執行</figcaption>
</figure>

<h2 class="h-nomark" id="2-產品經理的起手式">2. 『產品經理』的起手式<a class="h-anchor" href="#2-%e7%94%a2%e5%93%81%e7%b6%93%e7%90%86%e7%9a%84%e8%b5%b7%e6%89%8b%e5%bc%8f" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>產品經理需要專注在每個產品的週期，並確認所有需求都有在進行</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-21.webp" width="992" height="51" alt="2. 『產品經理』的起手式（圖 21）" loading="lazy" decoding="async"></p>
<h3 id="step-1創建產品">STEP 1：創建產品<a class="h-anchor" href="#step-1%e5%89%b5%e5%bb%ba%e7%94%a2%e5%93%81" aria-label="這個段落的連結"></a></h3>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-22.webp" width="1400" height="353" alt="STEP 1：創建產品（圖 22）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-23.webp" width="1400" height="766" alt="STEP 1：創建產品（圖 23）" loading="lazy" decoding="async"></p>
<h3 id="step-2維護模組">STEP 2：維護模組<a class="h-anchor" href="#step-2%e7%b6%ad%e8%ad%b7%e6%a8%a1%e7%b5%84" aria-label="這個段落的連結"></a></h3>
<p>這裡的模組會用來區分『需求』的類別</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-24.webp" width="1400" height="351" alt="STEP 2：維護模組（圖 24）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-25.webp" width="1400" height="472" alt="STEP 2：維護模組（圖 25）" loading="lazy" decoding="async"></p>
<h3 id="step-3創建計畫">STEP 3：創建計畫<a class="h-anchor" href="#step-3%e5%89%b5%e5%bb%ba%e8%a8%88%e7%95%ab" aria-label="這個段落的連結"></a></h3>
<p>每個『需求』都會隸屬於某個『計畫』</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-26.webp" width="1400" height="366" alt="STEP 3：創建計畫（圖 26）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-27.webp" width="1400" height="615" alt="STEP 3：創建計畫（圖 27）" loading="lazy" decoding="async"></p>
<h3 id="step-4創建需求">STEP 4：創建需求<a class="h-anchor" href="#step-4%e5%89%b5%e5%bb%ba%e9%9c%80%e6%b1%82" aria-label="這個段落的連結"></a></h3>
<p>『需求』就會依照剛剛創建的『模組』、『計畫』做設定</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-28.webp" width="1400" height="366" alt="STEP 4：創建需求（圖 28）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-29.webp" width="1400" height="677" alt="STEP 4：創建需求（圖 29）" loading="lazy" decoding="async"></p>
<h3 id="step-5需求指派">STEP 5：需求指派<a class="h-anchor" href="#step-5%e9%9c%80%e6%b1%82%e6%8c%87%e6%b4%be" aria-label="這個段落的連結"></a></h3>
<p>需求要指派給相關的人員才能夠推動專案的進行，這裡指派讓項目經理做後續處理。</p>
<blockquote>
<p>『項目經理』預設權限並不能對產品需求進行操作，即時被指派也不行；所以如果要讓他提供相關的資訊請前往：<strong>權限 &gt; 需求&gt; 編輯、變更需求、指派需求(打勾)</strong></p>
</blockquote>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-30.webp" width="1400" height="362" alt="STEP 5：需求指派（圖 30）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-31.webp" width="1400" height="732" alt="STEP 5：需求指派（圖 31）" loading="lazy" decoding="async"></p>
<h2 class="h-nomark" id="3-項目經理如何分配任務">3. 『項目經理』如何分配任務<a class="h-anchor" href="#3-%e9%a0%85%e7%9b%ae%e7%b6%93%e7%90%86%e5%a6%82%e4%bd%95%e5%88%86%e9%85%8d%e4%bb%bb%e5%8b%99" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>項目經裡是具體分配任務的人，他需要了解團隊中每個人的職位才能有效地指派任務</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-32.webp" width="992" height="51" alt="3. 『項目經理』如何分配任務（圖 32）" loading="lazy" decoding="async"></p>
<h3 id="step-1登入後看被指派的需求">STEP 1：登入後看被指派的需求<a class="h-anchor" href="#step-1%e7%99%bb%e5%85%a5%e5%be%8c%e7%9c%8b%e8%a2%ab%e6%8c%87%e6%b4%be%e7%9a%84%e9%9c%80%e6%b1%82" aria-label="這個段落的連結"></a></h3>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-33.webp" width="1400" height="524" alt="STEP 1：登入後看被指派的需求（圖 33）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-34.webp" width="1400" height="264" alt="STEP 1：登入後看被指派的需求（圖 34）" loading="lazy" decoding="async"></p>
<h3 id="step-2創建項目">STEP 2：創建項目<a class="h-anchor" href="#step-2%e5%89%b5%e5%bb%ba%e9%a0%85%e7%9b%ae" aria-label="這個段落的連結"></a></h3>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-35.webp" width="1400" height="349" alt="STEP 2：創建項目（圖 35）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-36.webp" width="1400" height="737" alt="STEP 2：創建項目（圖 36）" loading="lazy" decoding="async"></p>
<p>創建完項目後系統會有彈窗詢問你要不要進行後續的操作，如果選擇『返回任務列表』也還是可以做這些設定</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-37.webp" width="643" height="230" alt="STEP 2：創建項目（圖 37）" loading="lazy" decoding="async"></p>
<h3 id="step-3管理團隊">STEP 3：管理團隊<a class="h-anchor" href="#step-3%e7%ae%a1%e7%90%86%e5%9c%98%e9%9a%8a" aria-label="這個段落的連結"></a></h3>
<p>如果沒有設定好參與項目的團隊成員，創建任務時只能指派給自己喔XD</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-38.webp" width="1400" height="286" alt="STEP 3：管理團隊（圖 38）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-39.webp" width="1400" height="523" alt="STEP 3：管理團隊（圖 39）" loading="lazy" decoding="async"></p>
<h3 id="step-4創建任務">STEP 4：創建任務<a class="h-anchor" href="#step-4%e5%89%b5%e5%bb%ba%e4%bb%bb%e5%8b%99" aria-label="這個段落的連結"></a></h3>
<p>項目經理需要將創建任務並指派給相關研發人員</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-40.webp" width="1400" height="350" alt="STEP 4：創建任務（圖 40）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-41.webp" width="1400" height="713" alt="STEP 4：創建任務（圖 41）" loading="lazy" decoding="async"></p>
<blockquote>
<p>項目經理可以透過『燃盡圖』來觀察每個項目的實作狀況是否符合預期，這裡要特別注意的是『<strong>燃盡圖只能計算今天的數據，歷史紀錄無法修改</strong>』，所以要記得提醒組員每天更新自己的工作狀況，否則燃盡圖是無法正確顯示的。</p>
</blockquote>
<h2 class="h-nomark" id="4-研發人員完成收到的任務">4. 『研發人員』完成收到的任務<a class="h-anchor" href="#4-%e7%a0%94%e7%99%bc%e4%ba%ba%e5%93%a1%e5%ae%8c%e6%88%90%e6%94%b6%e5%88%b0%e7%9a%84%e4%bb%bb%e5%8b%99" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>研發人員主要會收到來自『項目經理』的任務、『測試人員』的bug，他的工作就是每完成到一個進度做回報，方便管理人員掌握進度</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-42.webp" width="667" height="51" alt="4. 『研發人員』完成收到的任務（圖 42）" loading="lazy" decoding="async"></p>
<h3 id="step-1登入後看被指派的任務和bug">STEP 1：登入後看被指派的任務和Bug<a class="h-anchor" href="#step-1%e7%99%bb%e5%85%a5%e5%be%8c%e7%9c%8b%e8%a2%ab%e6%8c%87%e6%b4%be%e7%9a%84%e4%bb%bb%e5%8b%99%e5%92%8cbug" aria-label="這個段落的連結"></a></h3>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-43.webp" width="1400" height="534" alt="STEP 1：登入後看被指派的任務和Bug（圖 43）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-44.webp" width="1400" height="261" alt="STEP 1：登入後看被指派的任務和Bug（圖 44）" loading="lazy" decoding="async"></p>
<h3 id="step-2更新任務的資訊">STEP 2：更新任務的資訊<a class="h-anchor" href="#step-2%e6%9b%b4%e6%96%b0%e4%bb%bb%e5%8b%99%e7%9a%84%e8%b3%87%e8%a8%8a" aria-label="這個段落的連結"></a></h3>
<ul>
<li>A：任務開始</li>
<li>B：任務完成，使用此功能時會將任務重新指派給當時委任的『項目經理』</li>
<li>C：觀看、撰寫任務工時</li>
<li>D：編輯任務內容</li>
<li>E：創建子任務</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-45.webp" width="1400" height="261" alt="STEP 2：更新任務的資訊（圖 45）" loading="lazy" decoding="async"></p>
<p><strong>STEP 3：將收到的 Bug 轉成任務</strong></p>
<blockquote>
<p>『Bug』跟『任務』不同，Bug 不會紀錄完成的時間，也不會把它算進去燃盡圖中，所以如果想將 Bug 轉為自己的績效，記得先將他轉型</p>
</blockquote>
<ul>
<li>項目 &gt; 任務 &gt; 導入 &gt; 導入Bug</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-46.webp" width="1400" height="355" alt="STEP 2：更新任務的資訊（圖 46）" loading="lazy" decoding="async"></p>
<ul>
<li>勾選欲導入的 bug 並填入預計工時&gt; 導入</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-47.webp" width="1400" height="405" alt="STEP 2：更新任務的資訊（圖 47）" loading="lazy" decoding="async"></p>
<p>此時你就會看到『 <strong>Bug 被轉型成任務嚕</strong>』～為自己爭取更多績效吧！</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-48.webp" width="1400" height="350" alt="STEP 2：更新任務的資訊（圖 48）" loading="lazy" decoding="async"></p>
<p>如果改變剛剛轉型任務的『狀態』為『已完成』會詢問是否要將關聯的 Bug 一併改為『已完成』</p>
<figure class="figure"><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-49.webp" width="1400" height="616" alt="在看板可以直接用拖拉的來處理喔" loading="lazy" decoding="async">
  <figcaption>在看板可以直接用拖拉的來處理喔</figcaption>
</figure>

<h2 class="h-nomark" id="5-測試人員確認每個環節的穩定性">5. 『測試人員』確認每個環節的穩定性<a class="h-anchor" href="#5-%e6%b8%ac%e8%a9%a6%e4%ba%ba%e5%93%a1%e7%a2%ba%e8%aa%8d%e6%af%8f%e5%80%8b%e7%92%b0%e7%af%80%e7%9a%84%e7%a9%a9%e5%ae%9a%e6%80%a7" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>測試人員需要先了解產品具體的操作方式以及每個項目的測試點，不然他是很難撰寫用例的</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-50.webp" width="987" height="51" alt="5. 『測試人員』確認每個環節的穩定性（圖 50）" loading="lazy" decoding="async"></p>
<h3 id="step-1創建用例">STEP 1：創建用例<a class="h-anchor" href="#step-1%e5%89%b5%e5%bb%ba%e7%94%a8%e4%be%8b" aria-label="這個段落的連結"></a></h3>
<p>『用例』：測試的流程撰寫</p>
<blockquote>
<p>用例建議一個一個創建，因為很多細節需要填寫，以下純為流程解說</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-51.webp" width="1400" height="347" alt="STEP 1：創建用例（圖 51）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-52.webp" width="1400" height="343" alt="STEP 1：創建用例（圖 52）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-53.webp" width="1400" height="701" alt="STEP 1：創建用例（圖 53）" loading="lazy" decoding="async"></p>
<h3 id="step-2了解用例的使用方式">STEP 2：了解用例的使用方式<a class="h-anchor" href="#step-2%e4%ba%86%e8%a7%a3%e7%94%a8%e4%be%8b%e7%9a%84%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f" aria-label="這個段落的連結"></a></h3>
<ul>
<li>A：觀察用例過去所有執行的結果</li>
<li>B：執行用例，確認每個步驟符合預期，如果執行中發現錯誤就可以轉Bug</li>
<li>C：編輯用例，調整前置條件、執行步驟、備註等等</li>
<li>D：如果用例測試的結果為『失敗』，也可以在這個地方做轉 Bug 的步驟</li>
<li>E：複製用例</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-54.webp" width="1400" height="343" alt="STEP 2：了解用例的使用方式（圖 54）" loading="lazy" decoding="async"></p>
<h3 id="step-3測試錯誤轉-bug">STEP 3：測試錯誤轉 Bug<a class="h-anchor" href="#step-3%e6%b8%ac%e8%a9%a6%e9%8c%af%e8%aa%a4%e8%bd%89-bug" aria-label="這個段落的連結"></a></h3>
<p>這裡我們可以發現如果結果不是『通過』，Bug 的 icon 就會亮起來</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-55.webp" width="1400" height="325" alt="STEP 3：測試錯誤轉 Bug（圖 55）" loading="lazy" decoding="async"></p>
<p>點擊『轉Bug』後就去詳細的說明這個 Bug 的內容，撰寫的越詳細越能提升工程師解決的速度</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-56.webp" width="1400" height="491" alt="STEP 3：測試錯誤轉 Bug（圖 56）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-57.webp" width="1400" height="712" alt="STEP 3：測試錯誤轉 Bug（圖 57）" loading="lazy" decoding="async"></p>
<h3 id="step-3生成測試單檢驗成果">STEP 3：生成測試單檢驗成果<a class="h-anchor" href="#step-3%e7%94%9f%e6%88%90%e6%b8%ac%e8%a9%a6%e5%96%ae%e6%aa%a2%e9%a9%97%e6%88%90%e6%9e%9c" aria-label="這個段落的連結"></a></h3>
<p>『用例』、『Bug』都是單項的，測試單能把這些資訊做一個彙整</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-58.webp" width="1400" height="272" alt="STEP 3：生成測試單檢驗成果（圖 58）" loading="lazy" decoding="async"></p>
<p>藉由『測試單』還能將過去的用例導出數據</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-59.webp" width="1400" height="577" alt="STEP 3：生成測試單檢驗成果（圖 59）" loading="lazy" decoding="async"></p>
<p>想要生成報表也沒有問題</p>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-60.webp" width="1400" height="741" alt="STEP 3：生成測試單檢驗成果（圖 60）" loading="lazy" decoding="async"></p>
<blockquote>
<p>PS.當時我在報告的這個 Tab 用了好久都不知道怎麼操作，後來發現是測試人員 (QA) 預設的權限沒有打開，創建報告的功能要測試主管(QD) 才有權限</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202103/zentao-beginner-guide/images/zentao-beginner-guide-61.webp" width="1261" height="40" alt="STEP 3：生成測試單檢驗成果（圖 61）" loading="lazy" decoding="async"></p>
<hr>
<h2 id="三體驗心得">三、體驗心得<a class="h-anchor" href="#%e4%b8%89%e9%ab%94%e9%a9%97%e5%bf%83%e5%be%97" aria-label="這個段落的連結"></a></h2>
<h3 id="-系統操作面">系統操作面<a class="h-anchor" href="#-%e7%b3%bb%e7%b5%b1%e6%93%8d%e4%bd%9c%e9%9d%a2" aria-label="這個段落的連結"></a></h3>
<p>這款專案軟體的操作引導是非常棒的，加上官方的中文社群非常活躍，所以如果操作上遇到問題往往 google 一下就能得到解答。</p>
<h3 id="-一些小缺點">一些小缺點<a class="h-anchor" href="#-%e4%b8%80%e4%ba%9b%e5%b0%8f%e7%bc%ba%e9%bb%9e" aria-label="這個段落的連結"></a></h3>
<p>因為使用者權限劃分得非常細，所以有些操作會發現沒辦法下一步；又因為功能實在太過繁雜所以使用起來會有一點學習曲線。</p>
<h3 id="-與其他專案管理系統的比較">與其他專案管理系統的比較<a class="h-anchor" href="#-%e8%88%87%e5%85%b6%e4%bb%96%e5%b0%88%e6%a1%88%e7%ae%a1%e7%90%86%e7%b3%bb%e7%b5%b1%e7%9a%84%e6%af%94%e8%bc%83" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>Jira</strong>：認真說 Jira 還是稍微好用一點，特別是在系統彈性以及流程規劃上面；當然這可能因為我現在用的是開源版本所造成的。</li>
<li><strong>Redmine</strong>：Redmine 需要自己安裝一大堆 plugins 才能成為一套好用的系統，單純這點禪道真的是大勝，但學習曲線 Redmine 相對比較低。</li>
<li><strong>Teams 的 Planner &amp; Lists</strong>：基本上這兩個是幾乎無法拿來做專案管理，會非常的綁手綁腳，不建議嘗試。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Redmine 教育訓練 — 依角色權限說明</title>
      <link>https://deanlin.net/blog/202103/redmine-training-by-role/</link>
      <pubDate>Mon, 08 Mar 2021 17:25:42 +0800</pubDate>
      <guid>https://deanlin.net/blog/202103/redmine-training-by-role/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>這篇是 Redmine 系列的最後一篇，把每個角色及操作要注意的細節整合起來，如果想把 Redmine 用來專案管理看這篇就非常夠了，本篇目標是讓專案中的三種角色(管理人員、開發人員、測試人員)了解如何使用這個系統。</description>
      <media:content url="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-og_hu_69bceeaf6c9d3990.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>這篇是 Redmine 系列的最後一篇，把每個角色及操作要注意的細節整合起來，如果想把 Redmine 用來專案管理看這篇就非常夠了，本篇目標是讓專案中的三種角色(<strong>管理人員、開發人員、測試人員)了解如何使用這個系統。</strong></p>
<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-01.webp" width="1400" height="784" alt="image form:LINE Sticker" fetchpriority="high" decoding="async">
  <figcaption>image form:<a href="https://store.line.me/stickershop/author/1/zh-Hant">LINE Sticker</a></figcaption>
</figure>

<pre tabindex="0"><code>管理人員
➤ 依照公司團隊建立根目錄的專案
➤ 在用戶清單中加入團隊成員
➤ 依照團隊默契建立問題樣板(或是直接使用全域問題樣板)
➤ 依據團隊建立大群組，依據職權建立小群組
➤ 建立子專案
➤ 建立新議題
開發人員
➤ 開發人員收到議題
➤ 新增子議題、相關議題
➤ 在看板調整工作進度
➤ 編輯議題
測試人員
➤ 驗證議題功能正確性
➤ 建立發現錯誤的議題並分派給相關群組
</code></pre><h2 id="管理人員">管理人員<a class="h-anchor" href="#%e7%ae%a1%e7%90%86%e4%ba%ba%e5%93%a1" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>通常都是由 team leader 擔任這個角色，如果公司允許讓管理人員擁有『管理者』的權限會更理想；因為管理團隊用戶/群組這些事情 team leader 會比較清楚，不需要一直麻煩 MIS 人員做處理。</p>
</blockquote>
<h2 id="-依照公司團隊建立根目錄的專案">依照公司團隊建立根目錄的專案<a class="h-anchor" href="#-%e4%be%9d%e7%85%a7%e5%85%ac%e5%8f%b8%e5%9c%98%e9%9a%8a%e5%bb%ba%e7%ab%8b%e6%a0%b9%e7%9b%ae%e9%8c%84%e7%9a%84%e5%b0%88%e6%a1%88" aria-label="這個段落的連結"></a></h2>
<p>每個案子都需要新增一個專案，但如果全都放在專案清單會造成視覺上的錯亂，所以這裡會建議用團隊來區分案子。</p>
<p><strong>STEP 1</strong>：網站管理 &gt; 專案清單 &gt; 建立新專案</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-02.webp" width="1400" height="668" alt="依照公司團隊建立根目錄的專案（圖 2）" loading="lazy" decoding="async"></p>
<p><strong>STEP 2</strong> ：填寫專案基礎資訊 &gt; 建立</p>
<ul>
<li><strong>名稱</strong>：請填寫大家都看得懂的，如果專案有英文縮寫請放在代碼</li>
<li><strong>代碼：這個欄位儲存後無法修改</strong>，請謹慎填寫</li>
<li><strong>公開</strong>：除非是全公司都能看到的專案，不然<strong>請勿打勾</strong></li>
<li><strong>模組</strong>：建議全選</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-03.webp" width="1400" height="911" alt="依照公司團隊建立根目錄的專案（圖 3）" loading="lazy" decoding="async"></p>
<h2 id="-在用戶清單中加入團隊成員">在用戶清單中加入團隊成員<a class="h-anchor" href="#-%e5%9c%a8%e7%94%a8%e6%88%b6%e6%b8%85%e5%96%ae%e4%b8%ad%e5%8a%a0%e5%85%a5%e5%9c%98%e9%9a%8a%e6%88%90%e5%93%a1" aria-label="這個段落的連結"></a></h2>
<p>需要用『管理者』的身份才能建立新用戶</p>
<p><strong>STEP 1</strong>：網站管理 &gt; 用戶清單 &gt; 建立新用戶</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-04.webp" width="1400" height="668" alt="在用戶清單中加入團隊成員（圖 4）" loading="lazy" decoding="async"></p>
<p><strong>STEP 2</strong>：填寫用戶基礎資訊 &gt; 建立</p>
<ul>
<li><strong>管理者</strong>：跟『管理人員』的角色意義是不同的，有管理者權限的才能使用『網站管理』</li>
<li><strong>產生密碼 &amp; 必須在下次登入時變更密碼</strong>：建議都打勾避嫌</li>
<li><strong>寄送帳戶資訊電子郵件給用戶</strong>：不寄信給對方他也不知道你幫他建好帳號了</li>
<li><strong>電子郵件提醒選項</strong>：依照範例的選擇會收到最完整的 Email</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-05.webp" width="1090" height="851" alt="在用戶清單中加入團隊成員（圖 5）" loading="lazy" decoding="async"></p>
<h2 id="-依照團隊默契建立問題樣板">依照團隊默契建立問題樣板<a class="h-anchor" href="#-%e4%be%9d%e7%85%a7%e5%9c%98%e9%9a%8a%e9%bb%98%e5%a5%91%e5%bb%ba%e7%ab%8b%e5%95%8f%e9%a1%8c%e6%a8%a3%e6%9d%bf" aria-label="這個段落的連結"></a></h2>
<p>為了保證議題的格式有相同的 Style ，所以建議團隊要建立問題的樣板，以確保每個議題的內容都有精準描述減少來回溝通的成本。</p>
<p><strong>STEP 1</strong>：在專案清單選擇專案 &gt; 問題樣板 &gt; 新增樣板</p>
<ul>
<li><strong>問題樣板</strong>：<em>專門為這個專案</em>設計的問題樣板</li>
<li><strong>全域問題樣板</strong>：<em>所有專案</em>都能夠使用的問題樣板</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-06.webp" width="1400" height="886" alt="依照團隊默契建立問題樣板（圖 6）" loading="lazy" decoding="async"></p>
<p><strong>STEP 2</strong>：填寫問題樣板內容 &gt; 建立</p>
<ul>
<li><strong>追蹤標籤</strong>：這個樣板是給哪個追蹤標籤使用的</li>
<li><strong>預設值</strong>：建議打勾，最後真正的預設值還是看排序，另外子專案設計的問題樣板會蓋過全域問題樣板</li>
<li><strong>啟用</strong>：打勾後才能讓使用者選用</li>
<li><strong>在專案樹狀結構中分享</strong>：建議打勾，因為模板通常都會共享</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-07.webp" width="1400" height="917" alt="依照團隊默契建立問題樣板（圖 7）" loading="lazy" decoding="async"></p>
<h2 id="-依據團隊建立大群組依據職權建立小群組">依據團隊建立大群組，依據職權建立小群組<a class="h-anchor" href="#-%e4%be%9d%e6%93%9a%e5%9c%98%e9%9a%8a%e5%bb%ba%e7%ab%8b%e5%a4%a7%e7%be%a4%e7%b5%84%e4%be%9d%e6%93%9a%e8%81%b7%e6%ac%8a%e5%bb%ba%e7%ab%8b%e5%b0%8f%e7%be%a4%e7%b5%84" aria-label="這個段落的連結"></a></h2>
<p>每個專案都有獨立的成員列表，並賦予成員不同的角色；建議群組由大到小會分成三個層次：</p>
<ul>
<li><strong>全公司</strong>：有些專案或是資訊是要給全公司的人都知道的</li>
<li><strong>部門團隊</strong>：比如網頁負責的是一個 Team，android app、windows app 是另外一個 Team</li>
<li><strong>功能團隊</strong>：網頁團隊下會有不同的小組，有些負責 UI/UX 設計、有些負責後端 api 撰寫；這的層次是依造職權的分類</li>
</ul>
<p><strong>STEP 1</strong>：網站管理 &gt; 群組清單 &gt; 建立新群組</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-08.webp" width="1400" height="575" alt="依據團隊建立大群組，依據職權建立小群組（圖 8）" loading="lazy" decoding="async"></p>
<p><strong>STEP 2</strong>：填寫群組名稱 &gt; 建立</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-09.webp" width="1092" height="288" alt="依據團隊建立大群組，依據職權建立小群組（圖 9）" loading="lazy" decoding="async"></p>
<p><strong>STEP 3</strong>：選擇剛剛建立的群組 &gt; 用戶清單 &gt; 建立新用戶 &gt; 選擇要加入的用戶 &gt; 新增</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-10.webp" width="1092" height="750" alt="依據團隊建立大群組，依據職權建立小群組（圖 10）" loading="lazy" decoding="async"></p>
<p><strong>STEP 4</strong>：專案清單 &gt; 加入專案 &gt; 選擇欲加入的專案 &amp; 加入的角色 &gt; 新增</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-11.webp" width="1092" height="785" alt="依據團隊建立大群組，依據職權建立小群組（圖 11）" loading="lazy" decoding="async"></p>
<h2 id="-建立子專案">建立子專案<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b%e5%ad%90%e5%b0%88%e6%a1%88" aria-label="這個段落的連結"></a></h2>
<p>子專案才是真正的放專案資訊的地方</p>
<ul>
<li><strong>代碼</strong>：因為是子專案，建議代碼也要有關聯性方便識別</li>
<li><strong>父專案</strong>：記得選擇</li>
<li><strong>繼承父專案成員</strong>：建議打勾，通常成員的角色都是固定的，不太可能今天是『開發人員』明天就轉職成『測試人員』</li>
</ul>
<p><strong>STEP 1</strong>：網站管理 &gt; 專案清單 &gt; 建立新專案 &gt; 填寫專案基礎資訊 &gt; 建立</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-12.webp" width="1400" height="906" alt="建立子專案（圖 12）" loading="lazy" decoding="async"></p>
<h3 class="h-nomark" id="專案重要設定說明">🌟專案重要設定說明🌟<a class="h-anchor" href="#%e5%b0%88%e6%a1%88%e9%87%8d%e8%a6%81%e8%a8%ad%e5%ae%9a%e8%aa%aa%e6%98%8e" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>成員</strong>：除了繼承父專案成員外，你還可以在這裡做角色權限調整，<strong>一個用戶可以有多重角色</strong></li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-13.webp" width="1400" height="578" alt="🌟專案重要設定說明🌟（圖 13）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>版本</strong>：專案一定會有版本的更迭，每項議題如果都有對應的版本在<strong>管理及追蹤上可以容易釐清責任</strong></li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-14.webp" width="1400" height="353" alt="🌟專案重要設定說明🌟（圖 14）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>議題分類清單</strong>：新人剛加入團隊時可能對成員的職權並不是很了解，如果在這裡建立分類的防可以<strong>快速幫助不熟悉團隊的人了解每個人的職權分配</strong></li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-15.webp" width="1400" height="418" alt="🌟專案重要設定說明🌟（圖 15）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>issue columns</strong>：設定議題的<strong>子議題要呈現哪些欄位</strong></li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-16.webp" width="780" height="494" alt="🌟專案重要設定說明🌟（圖 16）" loading="lazy" decoding="async"></p>
<h2 id="-建立新議題">建立新議題<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b%e6%96%b0%e8%ad%b0%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<p>專案基礎配置完成後開始分配每個成員的任務，這裡先從 UI/UX 的設計圖開始</p>
<p><strong>STEP 1</strong>：議題清單 &gt; 建立新議題</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-17.webp" width="1400" height="562" alt="建立新議題（圖 17）" loading="lazy" decoding="async"></p>
<p><strong>STEP 2</strong>：填寫議題內容 &gt; 建立</p>
<ul>
<li><strong>追蹤標籤＆問題樣板</strong>：問題樣板會跟著追蹤標籤顯示；用戶依照樣板填寫的資料填入必須資訊即可</li>
<li><strong>概述</strong>：圖片可以用複製貼上，但上面只會顯示『!xxx.png!』，需要去<strong>『預覽』</strong>才能看到實際的結果</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-18.webp" width="1362" height="519" alt="建立新議題（圖 18）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>提及(memtion)</strong>：在撰寫議題概述的時候很長會提到其他同事(ex:這項決議是哪位長官決定、這塊功能會由誰負責…)，可以用 <code>@</code> 來操作喔</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-19.webp" width="794" height="407" alt="建立新議題（圖 19）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>被分派者＆分類</strong>：調整分類就會自動填入被分派者，能幫助不熟悉用戶職權的人輕鬆的做議題分配</li>
</ul>
<div class="gallery-row cols-2">

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-20.webp" width="668" height="211" alt="建立新議題（圖 20）" fetchpriority="high" decoding="async">
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-21.webp" width="668" height="211" alt="建立新議題（圖 21）" loading="lazy" decoding="async">
</figure>


</div>

<ul>
<li><strong>Checklist</strong>：作為議題的輔助，讓你紀錄要完成的細項</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-22.webp" width="532" height="107" alt="建立新議題（圖 22）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>監看者(watcher)</strong>：與任務相關的同事，<em>通常會將直屬長官設為監看者</em></li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-23.webp" width="615" height="137" alt="建立新議題（圖 23）" loading="lazy" decoding="async"></p>
<hr>
<h2 id="開發人員">開發人員<a class="h-anchor" href="#%e9%96%8b%e7%99%bc%e4%ba%ba%e5%93%a1" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>開發人員的涵蓋範圍很廣，包含前端、後端、硬體工程師…UI/UX 設計師等，通常會在收到管理人員分配的議題後開始作業</p>
</blockquote>
<h2 id="-開發人員收到議題">開發人員收到議題<a class="h-anchor" href="#-%e9%96%8b%e7%99%bc%e4%ba%ba%e5%93%a1%e6%94%b6%e5%88%b0%e8%ad%b0%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<p>原則上只要用戶<strong>被分配議題、mention提及、設定為監看者</strong>，就會收到類似的 email 通知如下：</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-24.webp" width="1214" height="670" alt="開發人員收到議題（圖 24）" loading="lazy" decoding="async"></p>
<h2 id="-新增子議題相關議題">新增子議題、相關議題<a class="h-anchor" href="#-%e6%96%b0%e5%a2%9e%e5%ad%90%e8%ad%b0%e9%a1%8c%e7%9b%b8%e9%97%9c%e8%ad%b0%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<p>在信箱點擊連結會直接前往該議題，但收到的信件一多還是要依照以下步驟找出自己要負責的項目</p>
<p><strong>STEP 1</strong>：專案清單 &gt; 選擇專案 &gt; 議題追蹤</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-25.webp" width="1400" height="814" alt="新增子議題、相關議題（圖 25）" loading="lazy" decoding="async"></p>
<p><strong>STEP 2</strong>：在篩選條件中使用追蹤標籤找到由自己負責的議題</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-26.webp" width="1400" height="545" alt="新增子議題、相關議題（圖 26）" loading="lazy" decoding="async"></p>
<p><strong>STEP 3</strong>：新增子任務</p>
<p>閱讀完議題的需求後再依據自己實際的工作項目去細分子議題，操作方式非常直覺就不再多做介紹</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-27.webp" width="1400" height="814" alt="新增子議題、相關議題（圖 27）" loading="lazy" decoding="async"></p>
<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-28.webp" width="1400" height="814" alt="之前管理人員設定的 issue columns 就這在這裡顯示的" loading="lazy" decoding="async">
  <figcaption>之前管理人員設定的 <strong>issue columns </strong>就這在這裡顯示的</figcaption>
</figure>

<h2 id="-在看板調整工作進度">在看板調整工作進度<a class="h-anchor" href="#-%e5%9c%a8%e7%9c%8b%e6%9d%bf%e8%aa%bf%e6%95%b4%e5%b7%a5%e4%bd%9c%e9%80%b2%e5%ba%a6" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>請注意這裡只能調整議題的『狀態』、『進度』，並不會紀錄工作時間</p>
</blockquote>
<p>一個一個議題點進去更新真的很慢，所以我們可以在『看板』用拖拉議題的方式改變他的『狀態』，且能於此『更新進度』的百分比</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-29.webp" width="1307" height="897" alt="在看板調整工作進度（圖 29）" loading="lazy" decoding="async"></p>
<h2 id="-編輯議題">編輯議題<a class="h-anchor" href="#-%e7%b7%a8%e8%bc%af%e8%ad%b0%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p><em>被分配到議題時要記得編輯啊！不然主管以為你沒做事😞</em></p>
</blockquote>
<ul>
<li><strong>狀態</strong>：可調整為『實作中』、『已解決』</li>
<li><strong>預估工時＆完成百分比</strong>：會有報表產出，所以請認真填寫</li>
<li><strong>紀錄時間</strong>：為了好看的工作報表就好好填寫吧</li>
<li><strong>筆記</strong>：因為『概述』完成後就不能修改，我們要用『筆記』做後續議題的討論和紀錄</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-30.webp" width="912" height="969" alt="編輯議題（圖 30）" loading="lazy" decoding="async"></p>
<hr>
<h2 id="測試人員">測試人員<a class="h-anchor" href="#%e6%b8%ac%e8%a9%a6%e4%ba%ba%e5%93%a1" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>測試人員是系統的守護者，通常會接收到由『開發人員』、『管理人員』分配的測試任務，如果在測試過程中遇到了其他的錯誤可以自行在新增議題做分配</p>
</blockquote>
<h2 id="-驗證議題功能正確性">驗證議題功能正確性<a class="h-anchor" href="#-%e9%a9%97%e8%ad%89%e8%ad%b0%e9%a1%8c%e5%8a%9f%e8%83%bd%e6%ad%a3%e7%a2%ba%e6%80%a7" aria-label="這個段落的連結"></a></h2>
<p><strong>STEP 1</strong>：先找出清單中自己被指派的任務</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-31.webp" width="1400" height="704" alt="驗證議題功能正確性（圖 31）" loading="lazy" decoding="async"></p>
<p><strong>STEP 2</strong>：依照議題概述去完成相關測試</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-32.webp" width="1400" height="917" alt="驗證議題功能正確性（圖 32）" loading="lazy" decoding="async"></p>
<p><strong>STEP 3</strong>：依據測試結果給予議題回應</p>
<ul>
<li>測試成功：狀態改為『已結束』</li>
<li>測試失敗：狀態改為『測試不符合預期』，並增加『筆記』做說明</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-33.webp" width="1080" height="971" alt="驗證議題功能正確性（圖 33）" loading="lazy" decoding="async"></p>
<h2 id="-建立發現錯誤的議題並分派給相關群組">建立發現錯誤的議題並分派給相關群組<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b%e7%99%bc%e7%8f%be%e9%8c%af%e8%aa%a4%e7%9a%84%e8%ad%b0%e9%a1%8c%e4%b8%a6%e5%88%86%e6%b4%be%e7%b5%a6%e7%9b%b8%e9%97%9c%e7%be%a4%e7%b5%84" aria-label="這個段落的連結"></a></h2>
<p>如果是在測試項目外發現錯誤，就是自己建立新議題，並指派議題給負責的群組，如果不清楚該功能由誰負責請使用『分類』來做自動分派。</p>
<p><img src="https://deanlin.net/blog/202103/redmine-training-by-role/images/redmine-training-by-role-34.webp" width="1400" height="920" alt="建立發現錯誤的議題並分派給相關群組（圖 34）" loading="lazy" decoding="async"></p>
<hr>
<pre tabindex="0"><code>以下是我整理 Redmine 的相關資源，想更進一步了解的朋友可以參考看看：
👍 Redmine 超詳細安裝教學：Redmine 4.1.1 on Ubuntu 16.04
👍 如何用 Redmine 做專案管理＆體驗心得
👍 Redmine Plugins &amp; Themes 介紹：那些我成功擴充的外掛
👍 用 Redmine 做專案管理 — 管理者不可不知的設定
👍 用 Redmine 做專案管理 — 一般用戶不可不知的基礎功能
</code></pre><hr>
<h3 class="h-nomark" id="-讀完這篇文章後">🙂 讀完這篇文章後<a class="h-anchor" href="#-%e8%ae%80%e5%ae%8c%e9%80%99%e7%af%87%e6%96%87%e7%ab%a0%e5%be%8c" aria-label="這個段落的連結"></a></h3>
]]></content:encoded>
    </item>
    <item>
      <title>用 Redmine 做專案管理 — 一般用戶不可不知的基礎功能</title>
      <link>https://deanlin.net/blog/202103/redmine-basics-for-users/</link>
      <pubDate>Fri, 05 Mar 2021 11:57:12 +0800</pubDate>
      <guid>https://deanlin.net/blog/202103/redmine-basics-for-users/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>了解基礎操作，其他細節的功能自己慢慢熟悉就可以了，這篇文章會分享讓專案順利運行的基礎功能。</description>
      <media:content url="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-og_hu_6ebbf2d01c787061.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>了解基礎操作，其他細節的功能自己慢慢熟悉就可以了，這篇文章會分享讓專案順利運行的基礎功能。</p>
<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-01.webp" width="1400" height="784" alt="image form:LINE Sticker" fetchpriority="high" decoding="async">
  <figcaption>image form:<a href="https://store.line.me/stickershop/author/1/zh-Hant">LINE Sticker</a></figcaption>
</figure>

<pre tabindex="0"><code>一、專案清單
二、專案概覽
  ➤ 議題清單
  ➤ 建立新議題
  ➤ 編輯議題
  ➤ 看板
</code></pre><h2 id="一專案清單">一、專案清單<a class="h-anchor" href="#%e4%b8%80%e5%b0%88%e6%a1%88%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<ul>
<li><strong>專案分類邏輯</strong>：以<em>團隊</em>做區分，子專案才是實際進行的專案</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-02.webp" width="1357" height="792" alt="一、專案清單（圖 2）" loading="lazy" decoding="async"></p>
<h2 id="二專案概覽">二、專案概覽<a class="h-anchor" href="#%e4%ba%8c%e5%b0%88%e6%a1%88%e6%a6%82%e8%a6%bd" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>這裡介紹實際上專案高頻使用功能</p>
</blockquote>
<h3 id="-議題清單">議題清單<a class="h-anchor" href="#-%e8%ad%b0%e9%a1%8c%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h3>
<div class="gallery-row cols-2">

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-03.webp" width="1362" height="792" alt="議題清單（圖 3）" fetchpriority="high" decoding="async">
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-04.webp" width="1362" height="810" alt="可以選擇扁平結構或是樹狀檢視" loading="lazy" decoding="async">
  <figcaption>可以選擇<strong>扁平結構</strong>或是<strong>樹狀檢視</strong></figcaption>
</figure>


</div>

<h3 id="-建立新議題">建立新議題<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b%e6%96%b0%e8%ad%b0%e9%a1%8c" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>追蹤標籤＆問題樣板</strong>：問題樣板會跟著追蹤標籤顯示；用戶依照樣板填寫的資料填入必須資訊即可</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-05.webp" width="1362" height="519" alt="建立新議題（圖 5）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>提及(memtion)</strong>：在撰寫議題概述的時候很長會提到其他同事(ex:這項決議是哪位長官決定、這塊功能會由誰負責…)，可以用 <code>@</code> 來操作喔</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-06.webp" width="794" height="407" alt="建立新議題（圖 6）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>被分派者＆分類</strong>：調整分類就會自動填入被分派者，能幫助不熟悉用戶職權的人輕鬆的做議題分配</li>
</ul>
<div class="gallery-row cols-2">

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-07.webp" width="668" height="211" alt="建立新議題（圖 7）" fetchpriority="high" decoding="async">
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-08.webp" width="668" height="211" alt="不清楚由誰負責，就直接分配給一個Team，讓他們內部討論" loading="lazy" decoding="async">
  <figcaption>不清楚由誰負責，就直接分配給一個Team，讓他們內部討論</figcaption>
</figure>


</div>

<ul>
<li><strong>Checklist</strong>：作為議題的輔助，讓你紀錄要完成的細項</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-09.webp" width="532" height="107" alt="建立新議題（圖 9）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>監看者(watcher)</strong>：與任務相關的同事，<em>通常會將直屬長官設為監看者</em></li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-10.webp" width="615" height="137" alt="建立新議題（圖 10）" loading="lazy" decoding="async"></p>
<h3 id="-編輯議題">編輯議題<a class="h-anchor" href="#-%e7%b7%a8%e8%bc%af%e8%ad%b0%e9%a1%8c" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>被分配到議題時要記得編輯啊！不然主管以為你沒做事😞</p>
</blockquote>
<ul>
<li><strong>狀態</strong>：可調整為『實作中』</li>
<li><strong>預估工時＆完成百分比</strong>：會有報表產出，所以請認真填寫</li>
<li><strong>紀錄時間</strong>：為了好看的工作報表就好好填寫吧</li>
<li><strong>筆記</strong>：因為『概述』完成後就不能修改，我們要用『筆記做後續議題的討論』和紀錄</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-11.webp" width="912" height="969" alt="編輯議題（圖 11）" loading="lazy" decoding="async"></p>
<h3 id="-看板">看板<a class="h-anchor" href="#-%e7%9c%8b%e6%9d%bf" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>請注意這裡只能調整議題的『狀態』、『進度』，並不會紀錄工作時間</p>
</blockquote>
<p>一個一個議題點進去更新真的很慢，所以我們可以在『看板』用拖拉的方式改變議題的『狀態』，且能於此『更新進度』</p>
<p><img src="https://deanlin.net/blog/202103/redmine-basics-for-users/images/redmine-basics-for-users-12.webp" width="1307" height="897" alt="看板（圖 12）" loading="lazy" decoding="async"></p>
<hr>
<blockquote class="pullquote"><p>原本以為用戶需要知道很多操作，但發現只要會上面的基礎操作後，其他延伸的功能都可以舉一反三。</p>
</blockquote>
<pre tabindex="0"><code>以下是我整理 Redmine 的相關資源，想更進一步了解的朋友可以參考看看：
👍 Redmine 超詳細安裝教學：Redmine 4.1.1 on Ubuntu 16.04
👍 如何用 Redmine 做專案管理＆體驗心得
👍 Redmine Plugins &amp; Themes 介紹：那些我成功擴充的外掛
👍 用 Redmine 做專案管理 — 管理者不可不知的設定
👍 Redmine 教育訓練 — 依角色權限說明
</code></pre><hr>
<h3 class="h-nomark" id="-讀完這篇文章後">🙂 讀完這篇文章後<a class="h-anchor" href="#-%e8%ae%80%e5%ae%8c%e9%80%99%e7%af%87%e6%96%87%e7%ab%a0%e5%be%8c" aria-label="這個段落的連結"></a></h3>
]]></content:encoded>
    </item>
    <item>
      <title>用 Redmine 做專案管理 — 管理者不可不知的設定</title>
      <link>https://deanlin.net/blog/202103/redmine-admin-settings/</link>
      <pubDate>Wed, 03 Mar 2021 17:10:00 +0800</pubDate>
      <guid>https://deanlin.net/blog/202103/redmine-admin-settings/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>Redmine 的功能非常多，尤其是管理者在專案創建初期需要做非常多細節的設定；對於專案成員來說他們只需依造管理員制訂的規範操作即可。</description>
      <media:content url="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-og_hu_edd32889e7fed311.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>Redmine 的功能非常多，尤其是管理者在專案創建初期需要做非常多細節的設定；對於專案成員來說他們只需依造管理員制訂的規範操作即可。</p>
<blockquote>
<p>注：本篇文章<a href="https://deanlin.net/blog/202103/redmine-plugins-and-themes/">新增外掛如文章</a></p>
</blockquote>
<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-01.webp" width="1400" height="786" alt="image from:https://sites.google.com/site/quanqiufengline/home/line" fetchpriority="high" decoding="async">
  <figcaption>image from:<a href="https://sites.google.com/site/quanqiufengline/home/line">https://sites.google.com/site/quanqiufengline/home/line</a></figcaption>
</figure>

<pre tabindex="0"><code>🌐 網站管理
  ➤ 專案清單
  ➤ 用戶清單
  ➤ 群組清單
  ➤ 角色與權限
  ➤ 追蹤標籤清單
  ➤ 議題狀態清單
  ➤ 流程
  ➤ 設定
  ➤ 全域問題樣板
  ➤ 外掛程式
</code></pre><h2 class="h-nomark" id="-網站管理">🌐 網站管理<a class="h-anchor" href="#-%e7%b6%b2%e7%ab%99%e7%ae%a1%e7%90%86" aria-label="這個段落的連結"></a></h2>
<p>只有用戶『<strong>管理者</strong>』權限開啟時才能操作『網站管理』</p>
<div class="gallery-row cols-2">

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-02.webp" width="1400" height="619" alt="🌐 網站管理（圖 2）" fetchpriority="high" decoding="async">
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-03.webp" width="1400" height="745" alt="管理者權限需要特別設置，而不會特別給哪個角色擁有，這塊權限需要謹慎給予" loading="lazy" decoding="async">
  <figcaption>管理者權限需要特別設置，而不會特別給哪個角色擁有，<strong>這塊權限需要謹慎給予</strong></figcaption>
</figure>


</div>

<h2 id="-專案清單">專案清單<a class="h-anchor" href="#-%e5%b0%88%e6%a1%88%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<p>你可以設定某些角色有『建立新專案』的權限，但只有管理者可以做：</p>
<ul>
<li><strong>封存</strong>：被封存的專案將不予顯示，通常是專案完成後不希望有人再做更動時使用，若要恢復可以用『取消封存』</li>
<li><strong>複製</strong>：有很多專案細節的選項可以自己微調做複製</li>
<li><strong>刪除</strong>：按下去就真的會刪除了，除非是建立錯誤，否則建議用『封存即可』</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-04.webp" width="1400" height="735" alt="專案清單（圖 4）" loading="lazy" decoding="async"></p>
<h2 id="-用戶清單">用戶清單<a class="h-anchor" href="#-%e7%94%a8%e6%88%b6%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<p>用來<strong>新增/管理</strong>用戶，除了設定基礎資訊外，還可管理他們所屬的『群組』、『專案』</p>
<ul>
<li><strong>管理者</strong>：有打勾的才能做『網站管理』</li>
<li><strong>鎖定</strong>：當員工離職時建議使用鎖定，這樣只會讓他無法登入但仍可保留使用者的過往紀錄</li>
<li><strong>刪除</strong>：除非真的建立錯誤的用戶，不然不建議使用</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-05.webp" width="1400" height="593" alt="用戶清單（圖 5）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>電子郵件提醒選項</strong>：建議選擇『只提醒我觀察中或參與中的事物』，這樣收到的資訊最為完整</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-06.webp" width="1400" height="955" alt="用戶清單（圖 6）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>專案清單 &amp; 角色</strong>：如果你只創建用戶，但沒有把他加入到專案當中，他是完全沒有功能的。</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-07.webp" width="751" height="391" alt="用戶清單（圖 7）" loading="lazy" decoding="async"></p>
<h2 id="-群組清單">群組清單<a class="h-anchor" href="#-%e7%be%a4%e7%b5%84%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<p>適當的建立群組可以加快『任務派發』、『選擇專案成員』的速度</p>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-08.webp" width="1400" height="615" alt="群組清單（圖 8）" loading="lazy" decoding="async"></p>
<h2 id="-角色與權限">角色與權限<a class="h-anchor" href="#-%e8%a7%92%e8%89%b2%e8%88%87%e6%ac%8a%e9%99%90" aria-label="這個段落的連結"></a></h2>
<ul>
<li><strong>建立新角色</strong>：根據公司規模的不同，實際上可能需要更多的角色分割權限</li>
<li><strong>權限報表</strong>：管理每個角色的權限細節</li>
</ul>
<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-09.webp" width="1400" height="400" alt="角色列表" loading="lazy" decoding="async">
  <figcaption>角色列表</figcaption>
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-10.webp" width="1400" height="845" alt="權限列表" loading="lazy" decoding="async">
  <figcaption>權限列表</figcaption>
</figure>

<h2 id="-追蹤標籤清單">追蹤標籤清單<a class="h-anchor" href="#-%e8%bf%bd%e8%b9%a4%e6%a8%99%e7%b1%a4%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<p>你可以把他當成『議題種類』的區分，標籤名稱越明確，日後管理會越精確</p>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-11.webp" width="1400" height="327" alt="追蹤標籤清單（圖 11）" loading="lazy" decoding="async"></p>
<h2 id="-議題狀態清單">議題狀態清單<a class="h-anchor" href="#-%e8%ad%b0%e9%a1%8c%e7%8b%80%e6%85%8b%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<p>這個是『議題流程』會經過的『狀態』，每個角色可以使用的議題狀態是不同的，ex：只有『測試人員』才能將議題狀態改為『測試不符合』預期</p>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-12.webp" width="1400" height="458" alt="議題狀態清單（圖 12）" loading="lazy" decoding="async"></p>
<h2 id="-流程">流程<a class="h-anchor" href="#-%e6%b5%81%e7%a8%8b" aria-label="這個段落的連結"></a></h2>
<p>這塊就是用來設定每個<strong>角色</strong>在<strong>不同追蹤標籤</strong>下可以操作<strong>流程的狀態；這塊</strong>設定起來有點繁瑣，建議流程上卡關再來這裡調整會比較方便</p>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-13.webp" width="1400" height="959" alt="流程（圖 13）" loading="lazy" decoding="async"></p>
<h2 id="-設定">設定<a class="h-anchor" href="#-%e8%a8%ad%e5%ae%9a" aria-label="這個段落的連結"></a></h2>
<h3 class="h-nomark" id="-一般">★ 一般<a class="h-anchor" href="#-%e4%b8%80%e8%88%ac" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>歡迎詞</strong>：如果你覺得『網站首頁』空白很難看，可以在這裡編輯</li>
<li><strong>主機名稱</strong>：可以填寫網站的 ip 或者是 Domain name</li>
<li><strong>協定</strong>：建議使用『HTTPS』</li>
<li><strong>文字格式</strong>：建議選擇『Markdown』讓工程師方便協作（直接貼上 .md 類型的資訊）</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-14.webp" width="1400" height="993" alt="★ 一般（圖 14）" loading="lazy" decoding="async"></p>
<h3 class="h-nomark" id="-顯示">★ 顯示<a class="h-anchor" href="#-%e9%a1%af%e7%a4%ba" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>畫面主題</strong>：你可以在這裡改變 Redmine 的顯示主題</li>
<li><strong>預設語言</strong>：你之後創建使用者時都會默認選擇</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-15.webp" width="1400" height="990" alt="★ 顯示（圖 15）" loading="lazy" decoding="async"></p>
<h3 class="h-nomark" id="-驗證">★ 驗證<a class="h-anchor" href="#-%e9%a9%97%e8%ad%89" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>需要驗證</strong>：建議選擇『是』，否則公開的專案會被陌生人看光光</li>
<li><strong>註冊選項</strong>：建議選擇『停用』，儘管要管理者審核才能正式登入系統，但如果有人瘋狂亂註冊也會造成管理上的困難。</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-16.webp" width="1400" height="990" alt="★ 驗證（圖 16）" loading="lazy" decoding="async"></p>
<h3 class="h-nomark" id="-專案清單-1">★ 專案清單<a class="h-anchor" href="#-%e5%b0%88%e6%a1%88%e6%b8%85%e5%96%ae-1" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>新建立之專案預設為「公開」</strong>：不要打勾，因為個組織間如果有要合作將成員加入專案是比較好的做法</li>
<li><strong>新專案預設啟用的模組、新專案預設使用的追蹤標籤</strong>：基本上都是全選，要不要用還是看自己</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-17.webp" width="1400" height="967" alt="★ 專案清單（圖 17）" loading="lazy" decoding="async"></p>
<h3 class="h-nomark" id="-議題追蹤">★ 議題追蹤<a class="h-anchor" href="#-%e8%ad%b0%e9%a1%8c%e8%bf%bd%e8%b9%a4" aria-label="這個段落的連結"></a></h3>
<ul>
<li><strong>允許關聯至其它專案的議題</strong>：因為跨組合作是可預期的，所以會打勾</li>
<li><strong>允許議題被分派至群組</strong>：有些議題可能會需要需要小組討論、內部分配，所以會打勾</li>
</ul>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-18.webp" width="1400" height="782" alt="★ 議題追蹤（圖 18）" loading="lazy" decoding="async"></p>
<h2 id="-全域問題樣板">全域問題樣板<a class="h-anchor" href="#-%e5%85%a8%e5%9f%9f%e5%95%8f%e9%a1%8c%e6%a8%a3%e6%9d%bf" aria-label="這個段落的連結"></a></h2>
<p>讓用戶在『建立議題』時有統一的格式，避免用戶依照自己喜好建立議題導致必要信息缺失造成溝通成本增加。</p>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-19.webp" width="1400" height="692" alt="全域問題樣板（圖 19）" loading="lazy" decoding="async"></p>
<div class="gallery-row cols-2">

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-20.webp" width="1400" height="577" alt="全域問題樣板（圖 20）" fetchpriority="high" decoding="async">
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-21.webp" width="1400" height="737" alt="建立好的議題模板會顯示如右" loading="lazy" decoding="async">
  <figcaption>建立好的<strong>議題模板</strong>會顯示如右</figcaption>
</figure>


</div>

<h2 id="-外掛程式">外掛程式<a class="h-anchor" href="#-%e5%a4%96%e6%8e%9b%e7%a8%8b%e5%bc%8f" aria-label="這個段落的連結"></a></h2>
<p>這裡會顯示安裝成功的 Plugins，『檢查更新』的按鈕參考就好，因為有些外掛不是直接關連到官方的。</p>
<p><a href="https://www.redmine.org/plugins"><strong>官方網站</strong></a>有提供許多的 Plugins，但安裝需要注意 Ruby、Redmine 的版本，如果沒有相容通常會安裝失敗，<strong>安裝失敗會導致整個 Redmine 的網站掛掉</strong>，所以在擴充外掛前最好向全公司發個通知，並且盡量於工作作業離峰期做擴充。</p>
<p><img src="https://deanlin.net/blog/202103/redmine-admin-settings/images/redmine-admin-settings-22.webp" width="1400" height="803" alt="外掛程式（圖 22）" loading="lazy" decoding="async"></p>
<hr>
<pre tabindex="0"><code>以下是我整理 Redmine 的相關資源，想更進一步了解的朋友可以參考看看：
👍 Redmine 超詳細安裝教學：Redmine 4.1.1 on Ubuntu 16.04
👍 如何用 Redmine 做專案管理＆體驗心得
👍 Redmine Plugins &amp; Themes 介紹：那些我成功擴充的外掛
👍 用 Redmine 做專案管理 — 一般用戶不可不知的基礎功能
👍 Redmine 教育訓練 — 依角色權限說明
</code></pre><hr>
<h3 class="h-nomark" id="-讀完這篇文章後">🙂 讀完這篇文章後<a class="h-anchor" href="#-%e8%ae%80%e5%ae%8c%e9%80%99%e7%af%87%e6%96%87%e7%ab%a0%e5%be%8c" aria-label="這個段落的連結"></a></h3>
]]></content:encoded>
    </item>
    <item>
      <title>如何用 Redmine 做專案管理＆體驗心得</title>
      <link>https://deanlin.net/blog/202102/redmine-project-management-review/</link>
      <pubDate>Tue, 23 Feb 2021 11:31:14 +0800</pubDate>
      <guid>https://deanlin.net/blog/202102/redmine-project-management-review/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>在 UI 上如果沒有嚴苛要求的話，Redmine 算是一套非常棒的專案管理系統了，即使跟 Jira 相比也沒有差得太多(因為很多高階功能根本用不太到😅)，這篇文章會分成三大主題說明：管理者在專案創建前的準備、專案管理的實際應用、個人使用心得。</description>
      <media:content url="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-og_hu_b89baded098d7e73.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>在 UI 上如果沒有嚴苛要求的話，Redmine 算是一套非常棒的專案管理系統了，即使跟 Jira 相比也沒有差得太多(因為很多高階功能根本用不太到😅)，這篇文章會分成三大主題說明：管理者在專案創建前的準備、專案管理的實際應用、個人使用心得。</p>
<pre tabindex="0"><code>一、管理者在專案創建前的準備
  ➤ 角色與權限
  ➤ 議題狀態清單
  ➤ 追蹤標籤清單
  ➤ 設定
二、專案管理的實際應用
  STEP 1：建立新專案
  STEP 2：分配議題(issue)
  STEP 3：組員收到議題的分配通知，根據需求細分子議題
  STEP 4：UIUX 完成設計，PM 分配後續工作給前端工程師
  STEP 5：前端工程師細分子議題，並開 api 需求給後端工程師
  STEP 6：後端工程師回復議題
  STEP 7：PM 規劃測試流程
  STEP 8：SIT 測試新系統功能
  🤔 流程總結
三、個人使用心得
</code></pre><p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-01.webp" width="1400" height="785" alt="如何用 Redmine 做專案管理＆體驗心得（圖 1）" fetchpriority="high" decoding="async"></p>
<h2 id="一管理者在專案創建前的準備">一、管理者在專案創建前的準備<a class="h-anchor" href="#%e4%b8%80%e7%ae%a1%e7%90%86%e8%80%85%e5%9c%a8%e5%b0%88%e6%a1%88%e5%89%b5%e5%bb%ba%e5%89%8d%e7%9a%84%e6%ba%96%e5%82%99" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>以下操作皆在『網站管理』分頁，僅列出重要功能，其他請自行摸索</p>
</blockquote>
<h3 id="-角色與權限">角色與權限<a class="h-anchor" href="#-%e8%a7%92%e8%89%b2%e8%88%87%e6%ac%8a%e9%99%90" aria-label="這個段落的連結"></a></h3>
<p>系統僅會提供如下角色，但專案管理的流程中通常還會有『測試人員』、『UI/UX 人員』等角色，這裡就按造公司需求新增及分配權限即可</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-02.webp" width="1400" height="497" alt="角色與權限（圖 2）" loading="lazy" decoding="async"></p>
<p>新增角色後會要定義他的工作流程，畢竟每個角色要做的任務不同</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-03.webp" width="1400" height="497" alt="角色與權限（圖 3）" loading="lazy" decoding="async"></p>
<p>以<strong>測試人員</strong>來說，他們通常是要驗證已解決的議題是否處理完成，所以我會賦予的權限如下圖</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-04.webp" width="1400" height="687" alt="角色與權限（圖 4）" loading="lazy" decoding="async"></p>
<h3 id="-議題狀態清單">議題狀態清單<a class="h-anchor" href="#-%e8%ad%b0%e9%a1%8c%e7%8b%80%e6%85%8b%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h3>
<p>如果你在剛剛操作角色權限設定時覺得狀態不敷使用可以在這裡增加</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-05.webp" width="1400" height="543" alt="議題狀態清單（圖 5）" loading="lazy" decoding="async"></p>
<p>像測試人員就可能有『測試不符合預期』之類的狀態，新增後記得套用到對應的角色身上</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-06.webp" width="1400" height="768" alt="議題狀態清單（圖 6）" loading="lazy" decoding="async"></p>
<h3 id="-追蹤標籤清單">追蹤標籤清單<a class="h-anchor" href="#-%e8%bf%bd%e8%b9%a4%e6%a8%99%e7%b1%a4%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h3>
<p>這些標籤可以幫助你在尋找、歸納議題時的速度</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-07.webp" width="1400" height="244" alt="追蹤標籤清單（圖 7）" loading="lazy" decoding="async"></p>
<h3 id="-設定">設定<a class="h-anchor" href="#-%e8%a8%ad%e5%ae%9a" aria-label="這個段落的連結"></a></h3>
<p>在『顯示』的地方可以調整語言</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-08.webp" width="1400" height="840" alt="設定（圖 8）" loading="lazy" decoding="async"></p>
<p>在『驗證』頁面參考調整以下選項：</p>
<ul>
<li><strong>需要驗證(是)</strong>：如果你沒改又忘記調整專案為不公開會讓一般民眾都可以瀏覽喔！</li>
<li><strong>註冊選項(關閉)</strong>：如果開放註冊可能會被有心人士狂註冊，多了一堆垃圾帳號造成日後管理困難</li>
</ul>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-09.webp" width="1400" height="622" alt="設定（圖 9）" loading="lazy" decoding="async"></p>
<h2 id="二專案管理的實際應用">二、專案管理的實際應用<a class="h-anchor" href="#%e4%ba%8c%e5%b0%88%e6%a1%88%e7%ae%a1%e7%90%86%e7%9a%84%e5%af%a6%e9%9a%9b%e6%87%89%e7%94%a8" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>以下用實際專案流程模擬操作，模擬公司實際職位如下</p>
</blockquote>
<ul>
<li>PM(管理人員) — 開 issue 並且分配 issue</li>
<li>UI/UX(開發人員) — 網頁設計相關任務</li>
<li>frontend(開發人員) — 依據 UI/UX 設計完成前端</li>
<li>backend(開發人員) — 配合前端需求給予資料</li>
<li>SIT(測試人員) — 測試開發人員完成的功能並給予回饋</li>
</ul>
<h3 id="step-1-建立新專案">STEP 1 ：建立新專案<a class="h-anchor" href="#step-1-%e5%bb%ba%e7%ab%8b%e6%96%b0%e5%b0%88%e6%a1%88" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>了解客戶需求後，由 PM 建立新專案</p>
<p>職位/角色：PM/管理人員</p>
</blockquote>
<p>由 PM 建立一個新的專案並設定裡面的參數</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-10.webp" width="1400" height="240" alt="STEP 1 ：建立新專案（圖 10）" loading="lazy" decoding="async"></p>
<p>建立專案時請注意：</p>
<ul>
<li>名稱請填寫大家都看得懂的，如果專案有英文縮寫請放在代碼</li>
<li><strong>『代碼』這個欄位儲存後無法修改</strong>，請謹慎</li>
<li>如果專案沒有要公開，請記得把<strong>公開的選項拿掉</strong>，避免無關人士看到</li>
</ul>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-11.webp" width="1400" height="661" alt="STEP 1 ：建立新專案（圖 11）" loading="lazy" decoding="async"></p>
<p><strong>分配角色權限：</strong>建立專案後要加入成員並給予對應的角色權限</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-12.webp" width="1400" height="784" alt="STEP 1 ：建立新專案（圖 12）" loading="lazy" decoding="async"></p>
<p>完成權限分配後的畫面如下，<strong>一個用戶可以有多重角色</strong></p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-13.webp" width="1400" height="294" alt="STEP 1 ：建立新專案（圖 13）" loading="lazy" decoding="async"></p>
<p><strong>建立專案版本</strong>：專案一定會有版本的更迭，每項議題如果都有對應的版本在<strong>管理及追蹤上可以容易釐清責任</strong></p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-14.webp" width="1400" height="296" alt="STEP 1 ：建立新專案（圖 14）" loading="lazy" decoding="async"></p>
<p><strong>建立議題分類</strong>：新人剛加入團隊時可能對成員的職權並不是很了解，如果在這裡建立分類的防可以<strong>快速幫助不熟悉團隊的人了解每個人的職權分配</strong></p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-15.webp" width="1400" height="245" alt="STEP 1 ：建立新專案（圖 15）" loading="lazy" decoding="async"></p>
<h3 id="step-2分配議題issue">STEP 2：分配議題(issue)<a class="h-anchor" href="#step-2%e5%88%86%e9%85%8d%e8%ad%b0%e9%a1%8cissue" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>專案基礎配置完成後開始分配每個成員的任務，這裡先從 UI/UX 的設計圖開始</p>
<p>職位/角色：PM/管理人員</p>
</blockquote>
<p>在建立議題的時候有幾點提醒一下：</p>
<ul>
<li><strong>概述</strong>：圖片可以用複製貼上，但上面只會顯示『!xxx.png!』，需要去<strong>『預覽』</strong>才能看到實際的結果</li>
<li><strong>分類</strong>：如果選擇分類就會自動帶出被分派者</li>
<li><strong>狀態</strong>：他的選項會跟之前<strong>賦予的角色權限</strong>有關，如果發現需要新的流程可以後續再做調整</li>
</ul>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-16.webp" width="1400" height="741" alt="STEP 2：分配議題(issue)（圖 16）" loading="lazy" decoding="async"></p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-17.webp" width="1400" height="741" alt="這個是預覽的畫面，建議儲存議題前先看看預覽畫面確保跟你希望的內容是一致的" loading="lazy" decoding="async">
  <figcaption>這個是預覽的畫面，建議儲存議題前先看看預覽畫面確保跟你希望的內容是一致的</figcaption>
</figure>

<h3 id="step-3組員收到議題的分配通知根據需求細分子議題">STEP 3：組員收到議題的分配通知，根據需求細分子議題<a class="h-anchor" href="#step-3%e7%b5%84%e5%93%a1%e6%94%b6%e5%88%b0%e8%ad%b0%e9%a1%8c%e7%9a%84%e5%88%86%e9%85%8d%e9%80%9a%e7%9f%a5%e6%a0%b9%e6%93%9a%e9%9c%80%e6%b1%82%e7%b4%b0%e5%88%86%e5%ad%90%e8%ad%b0%e9%a1%8c" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>PM 給予議題的大方向任務，組員再依據自己的專業將工作項目細分，這樣更方便追蹤議題的作業進度並評估個人績效</p>
<p>職位/角色：UIUX/開發人員</p>
</blockquote>
<p>如果有設定郵件通知的話會收到跟下面類似的信件</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-18.webp" width="1168" height="966" alt="這封信件只是舉例" loading="lazy" decoding="async">
  <figcaption>這封信件只是舉例</figcaption>
</figure>

<p>閱讀完議題的需求後再依據自己實際的工作項目去細分子議題，操作方式非常直覺就不在多做介紹</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-19.webp" width="1400" height="179" alt="STEP 3：組員收到議題的分配通知，根據需求細分子議題（圖 19）" loading="lazy" decoding="async"></p>
<p><strong>議題清單</strong>：在這個頁面可以瀏覽所有議題，依據自己的工作完成進度去編輯『任務完成百分比』、『狀態』、『紀錄時間』，方便PM了解實際的工作狀況</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-20.webp" width="1400" height="471" alt="STEP 3：組員收到議題的分配通知，根據需求細分子議題（圖 20）" loading="lazy" decoding="async"></p>
<h3 id="step-4uiux-完成設計pm-分配後續工作給前端工程師">STEP 4：UIUX 完成設計，PM 分配後續工作給前端工程師<a class="h-anchor" href="#step-4uiux-%e5%ae%8c%e6%88%90%e8%a8%ad%e8%a8%88pm-%e5%88%86%e9%85%8d%e5%be%8c%e7%ba%8c%e5%b7%a5%e4%bd%9c%e7%b5%a6%e5%89%8d%e7%ab%af%e5%b7%a5%e7%a8%8b%e5%b8%ab" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>PM 在議題狀態轉換時也會收到 email 通知，這時他可以做後續的議題分配</p>
<p>職位/角色：PM/管理人員</p>
</blockquote>
<p><strong>相關的議題清單</strong>：PM 新增議題的方式不再贅述，但這個議題因為需要參考 UI 設計的草圖，所以要在『<strong>相關的議題清單</strong>』與 UI 設計的議題作關聯</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-21.webp" width="991" height="122" alt="STEP 4：UIUX 完成設計，PM 分配後續工作給前端工程師（圖 21）" loading="lazy" decoding="async"></p>
<h3 id="step-5前端工程師細分子議題並開-api-需求給後端工程師">STEP 5：前端工程師細分子議題，並開 api 需求給後端工程師<a class="h-anchor" href="#step-5%e5%89%8d%e7%ab%af%e5%b7%a5%e7%a8%8b%e5%b8%ab%e7%b4%b0%e5%88%86%e5%ad%90%e8%ad%b0%e9%a1%8c%e4%b8%a6%e9%96%8b-api-%e9%9c%80%e6%b1%82%e7%b5%a6%e5%be%8c%e7%ab%af%e5%b7%a5%e7%a8%8b%e5%b8%ab" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>前端工程師在設計前端頁面的同時也會開 api 的需求給後端工程師，兩者間配合才能完善網頁</p>
<p>職位/角色：前端工程師/開發人員</p>
</blockquote>
<p>這塊比較不一樣的是前端工程師應該要更細節具體的描述每個 api 所需要的內容，所以除了『後端 api 需求』這個父議題外，也需要增加細部需求的子議題。</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-22.webp" width="1400" height="459" alt="STEP 5：前端工程師細分子議題，並開 api 需求給後端工程師（圖 22）" loading="lazy" decoding="async"></p>
<h3 id="step-6後端工程師回復議題">STEP 6：後端工程師回復議題<a class="h-anchor" href="#step-6%e5%be%8c%e7%ab%af%e5%b7%a5%e7%a8%8b%e5%b8%ab%e5%9b%9e%e5%be%a9%e8%ad%b0%e9%a1%8c" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>後端工程師在依據前端工程師的需求完善後用回應的方式說明 api 的格式讓前端工程師完成最後的串接</p>
<p>職位/角色：後端工程師/開發人員</p>
</blockquote>
<p>後端 api 不是完成就好，要附上相關說明文件才能節省雙方溝通時間並留存紀錄。</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-23.webp" width="1400" height="637" alt="STEP 6：後端工程師回復議題（圖 23）" loading="lazy" decoding="async"></p>
<h3 id="step-7pm-規劃測試流程">STEP 7：PM 規劃測試流程<a class="h-anchor" href="#step-7pm-%e8%a6%8f%e5%8a%83%e6%b8%ac%e8%a9%a6%e6%b5%81%e7%a8%8b" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>在前端工程師與後端工程師串接完成，也確定基礎的操作都穩定後就可以請 SIT 人員做測試了，相關的測試項目及流程一般會由 PM 做後續安排</p>
<p>職位/角色：PM/管理人員</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-24.webp" width="1333" height="764" alt="STEP 7：PM 規劃測試流程（圖 24）" loading="lazy" decoding="async"></p>
<h3 id="step-8sit-測試新系統功能">STEP 8：SIT 測試新系統功能<a class="h-anchor" href="#step-8sit-%e6%b8%ac%e8%a9%a6%e6%96%b0%e7%b3%bb%e7%b5%b1%e5%8a%9f%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>SIT 依照 PM 分配的測試流程進行測試，如果正式成功就能把該議題狀態改為『已解決』</p>
<p>職位/角色：SIT/測試人員</p>
</blockquote>
<p>SIT 測試過程中如果發現問題除了把議題狀態改為『測試不符合預期』以及回覆哪裡錯誤外；額外發現的問題也可以新增子任務詳細說明問題，並將子任務都先指派給 PM 讓 PM 再分配給相關人員做處理</p>
<p><img src="https://deanlin.net/blog/202102/redmine-project-management-review/images/redmine-project-management-review-25.webp" width="1400" height="755" alt="STEP 8：SIT 測試新系統功能（圖 25）" loading="lazy" decoding="async"></p>
<h3 class="h-nomark" id="-流程總結">🤔 流程總結<a class="h-anchor" href="#-%e6%b5%81%e7%a8%8b%e7%b8%bd%e7%b5%90" aria-label="這個段落的連結"></a></h3>
<p>基本上就是測試到這個專案版本沒有任何問題後會再開新的專案版本，依據新的功能需求去實作；上面所敘述的流程僅供參考，實際的步驟還是需要公司內部有足夠共識才能真正讓這個專案管理工具發揮作用。</p>
<h2 id="三個人使用心得">三、個人使用心得<a class="h-anchor" href="#%e4%b8%89%e5%80%8b%e4%ba%ba%e4%bd%bf%e7%94%a8%e5%bf%83%e5%be%97" aria-label="這個段落的連結"></a></h2>
<ol>
<li>相比之前文章介紹的 <a href="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/">Microsoft List、Planner</a> ，這套系統我個人認為是完勝的，各種功能都非常完善，如果想要更多的功能也能透過 plugin 去做擴充，而且還是免費的XD</li>
<li>但如果跟 Jira 相比，他功能就少了一點，比如：缺少 Sprint 的概念、沒辦法於文章中用@來tag相關人員、一個議題只能有一種追蹤標籤。但基本上功能已經夠用了，也許上面的功能都能透過 plugin 處理，這些就要後續再做研究了。</li>
<li>功能擴充自由度相當高，公司如果想要導入這個專案管理系統建議要有工程師與 PM 一起配合研究，因為一些資訊的顯示還有流程要自己手動修改才能符合真實的需求。</li>
</ol>
<hr>
<pre tabindex="0"><code>想要導入 Redmine 可以參考我之前分享的文章：
👍 Redmine 超詳細安裝教學：Redmine 4.1.1 on Ubuntu 16.04
👍 Redmine Plugins &amp; Themes 介紹：那些我成功擴充的外掛
👍 用 Redmine 做專案管理 — 管理者不可不知的設定
👍 用 Redmine 做專案管理 — 一般用戶不可不知的基礎功能
👍 Redmine 教育訓練 — 依角色權限說明
</code></pre><hr>
<h3 class="h-nomark" id="-讀完這篇文章後">🙂 讀完這篇文章後<a class="h-anchor" href="#-%e8%ae%80%e5%ae%8c%e9%80%99%e7%af%87%e6%96%87%e7%ab%a0%e5%be%8c" aria-label="這個段落的連結"></a></h3>
]]></content:encoded>
    </item>
    <item>
      <title>Redmine 超詳細安裝教學：Redmine 4.1.1 on Ubuntu 16.04</title>
      <link>https://deanlin.net/blog/202102/redmine-installation-ubuntu/</link>
      <pubDate>Thu, 18 Feb 2021 15:00:45 +0800</pubDate>
      <guid>https://deanlin.net/blog/202102/redmine-installation-ubuntu/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>專案管理的工具非常之多，但是 jira、notion、clickup、trello 這類的專案管理都需要付錢，目前公司採用 Teams 的 planner、Lists 又不符合實際使用情境；之前有短暫的導入 testlink，不過那個 20 年前的 UI…</description>
      <media:content url="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-og_hu_c388eeb4ab5b5808.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>專案管理的工具非常之多，但是 jira、notion、clickup、trello 這類的專案管理都需要付錢，目前公司採用 Teams 的 planner、Lists 又不符合實際使用情境；之前有短暫的導入 testlink，不過那個 20 年前的 UI 設計很快就勸退大家。基於上述原因決定嘗試使用 Redmine 這個專案管理工具，本篇文章會詳細說明安裝的步驟即遭遇過的問題，文章大綱如下：</p>
<pre tabindex="0"><code>一、安裝環境
二、安裝順序
  STEP 1：安裝 MySQL
  STEP 2：建立 Redmine 使用者帳號
  STEP 3：安裝 RVM
  STEP 4：安裝 Ruby
  STEP 5：安裝 Passenger and Nginx
  STEP 6：設定 Nginx
  STEP 7：在 MySQL 增加 redmine 的使用者
  STEP 8：安裝 Redmine
  STEP 9：安裝 Redmine 外掛
  STEP 10：設定 Redmine 寄信功能
三、備註
</code></pre><p><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-01.webp" width="1400" height="784" alt="Redmine 超詳細安裝教學：Redmine 4.1.1 on Ubuntu 16.04（圖 1）" fetchpriority="high" decoding="async"></p>
<h2 id="一安裝環境">一、安裝環境<a class="h-anchor" href="#%e4%b8%80%e5%ae%89%e8%a3%9d%e7%92%b0%e5%a2%83" aria-label="這個段落的連結"></a></h2>
<p>官方沒有建議的硬體規格，但是看到有 <a href="https://www.redmineup.com/pages/blog/self-hosted-on-in-the-cloud-how-to-choose-infrastructure-and-hardware-configuration-for-redmine">文章分享</a> 最低硬體配置如下：</p>
<ul>
<li>Processor: Intel Celeron (min 300 MHz)</li>
<li>RAM: 1–2 GB RAM</li>
<li>HDD: 30–40 GB</li>
</ul>
<p>但通常使用最低硬體配置得到的結果就是容易卡，很多人同時上線使用時會讓卡到讓你懷疑人生，下面是我安裝時的配置目前使用起來算是流暢給大家參考用：</p>
<ul>
<li>Processor: 使用 VMWARE 的虛擬單核心</li>
<li>RAM: 8GB RAM</li>
<li>HDD: 500 GB</li>
<li>OS: ubuntu 16.04</li>
</ul>
<h2 id="二安裝順序">二、安裝順序<a class="h-anchor" href="#%e4%ba%8c%e5%ae%89%e8%a3%9d%e9%a0%86%e5%ba%8f" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>操作時請注意角色權限(root、redmine)，否則安裝到一半會卡住</p>
</blockquote>
<h2 id="step-1安裝-mysql">STEP 1：安裝 MySQL<a class="h-anchor" href="#step-1%e5%ae%89%e8%a3%9d-mysql" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 安裝 MySQL 套件
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt install build-essential mysql-server libmysqlclient-dev imagemagick libmagickwand-dev
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 安裝後驗證 MySQL Version
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    mysql -u root -p
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/b38188a5ef4141b93c01b319a80b371b" rel="noopener">mysql_install.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-02.webp" width="1258" height="514" alt="看到類似上方的 MySQL 資訊就代表你安裝成功嚕！" loading="lazy" decoding="async">
  <figcaption>看到類似上方的 MySQL 資訊就代表你安裝成功嚕！</figcaption>
</figure>

<h2 id="step-2建立-redmine-使用者帳號">STEP 2：建立 Redmine 使用者帳號<a class="h-anchor" href="#step-2%e5%bb%ba%e7%ab%8b-redmine-%e4%bd%bf%e7%94%a8%e8%80%85%e5%b8%b3%e8%99%9f" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 建立 Redmine 使用者，資料放在 <span style="color:#a5d6ff">`/data/redmine`</span>
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    adduser --system \
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        --shell /bin/bash \
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        --gecos &#39;Redmine Administrator&#39; \
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        --group \
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        --home /data/redmine redmine;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 建立 rvm group
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    groupadd rvm
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 允許 redmine 可以 sudo
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    adduser redmine sudo
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 設定 redmine 密碼
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    passwd redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 將 redmine 使用者加入 rvm 群組
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    usermod -a -G rvm redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/7443c1b56e1f7a585472834ea2ec65b0" rel="noopener">add_redmine_user.md</a>（GitHub Gist）</p>
<h2 id="step-3安裝-rvm">STEP 3：安裝 RVM<a class="h-anchor" href="#step-3%e5%ae%89%e8%a3%9d-rvm" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 安裝gnupg2
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sudo apt install gnupg2
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 安裝 GPG keys:
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 安裝 RVM
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    \curl -sSL https://get.rvm.io | bash -s stable
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 讓 rvm 指令生效
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    source /data/redmine/.rvm/scripts/rvm
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 確認安裝的RVM版本
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rvm --version
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/c05ee64e18057de7a430df6b474ebd9e" rel="noopener">install_RVM.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-03.webp" width="1400" height="74" alt="看到類似上方的 RVM 資訊就代表你安裝成功嚕！" loading="lazy" decoding="async">
  <figcaption>看到類似上方的 RVM 資訊就代表你安裝成功嚕！</figcaption>
</figure>

<h2 id="step-4安裝-ruby">STEP 4：安裝 Ruby<a class="h-anchor" href="#step-4%e5%ae%89%e8%a3%9d-ruby" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<p>作者的 <strong>RUBY_VERSION 為 2.3.8</strong>，這裡安裝的版本請<a href="https://www.redmine.org/projects/redmine/wiki/redmineinstall#Ruby-interpreter">參考 Redmine 的官方建議</a>，如果安裝其他的版本後續安裝 Redmine 時會發生錯誤</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 檢查 rvm 必要的套件
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rvm requirements
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 安裝指定的 ruby version
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rvm install ${RUBY_VERSION}
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 將此版本設定為預設
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rvm use ${RUBY_VERSION} --default
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 確認安裝的 Ruby 版本
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ruby --version
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/26719eedd99c32afc8f8d5820e058078" rel="noopener">intsall_ruby.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-04.webp" width="1400" height="74" alt="看到類似上方的 ruby 資訊就代表你安裝成功嚕！" loading="lazy" decoding="async">
  <figcaption>看到類似上方的 ruby 資訊就代表你安裝成功嚕！</figcaption>
</figure>

<h2 id="step-5安裝-passenger-and-nginx">STEP 5：安裝 Passenger and Nginx<a class="h-anchor" href="#step-5%e5%ae%89%e8%a3%9d-passenger-and-nginx" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 安裝 Passenger PGP key 和 HTTPS support for package manager
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt install -y dirmngr gnupg
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7 
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt install -y apt-transport-https ca-certificates
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. Add passenger APT repository
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sh -c &#39;echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main &gt; /etc/apt/sources.list.d/passenger.list&#39;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt update
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 安裝 Passenger and NGINX
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt install -y nginx-extras passenger
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/b44c3fa2e4c3a95b133182431af9da3c" rel="noopener">install_Passenger_Nginx.md</a>（GitHub Gist）</p>
<h2 id="step-6設定-nginx">STEP 6：設定 Nginx<a class="h-anchor" href="#step-6%e8%a8%ad%e5%ae%9a-nginx" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 編輯 Nginx 設定檔案
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    vi /etc/nginx/nginx.conf
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 移除此行註解#：`</span>include /etc/nginx/passenger.conf;<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`conf
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ...
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ##
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    # Phusion Passenger config
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ##
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    # Uncomment it if you installed passenger or passenger-enterprise
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ##
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    include /etc/nginx/passenger.conf;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 接下來要調整 Nginx 的網站設定，所以建議先備份原本的設定
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 編輯 Nginx 的網站設定
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    vi /etc/nginx/sites-available/default
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">6. 調整網站的根目錄位置以及 Passenger 設定
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    #root /var/www/html; #將原本的註解或是移除
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    root /data/redmine/current/public;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    passenger_enabled on;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    client_max_body_size 10m;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">7. 把 location 段落註解
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    #location / {
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">            # First attempt to serve request as file, then
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">            # as directory, then fall back to displaying a 404.
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    #       try_files $uri $uri/ =404;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    #}
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/dc2d42e3059a7beff2912bbd34be52ea" rel="noopener">set_nginx.md</a>（GitHub Gist）</p>
<p>完成上述步驟後再做以下驗證：</p>
<ol>
<li>更改目錄權限： <code>chown -R www-data /var/www</code></li>
<li>重啟 Nginx： <code>systemctl restart nginx</code></li>
<li>驗證 Passenger and NGINX: <code>/usr/bin/passenger-config validate-install</code></li>
</ol>
<p><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-05.webp" width="1030" height="426" alt="STEP 6：設定 Nginx（圖 5）" loading="lazy" decoding="async"></p>
<p>4. 檢查 Ngninx 狀態與 Passenger process: <code>/usr/sbin/passenger-memory-stats</code></p>
<p><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-06.webp" width="1400" height="498" alt="STEP 6：設定 Nginx（圖 6）" loading="lazy" decoding="async"></p>
<h2 id="step-7在-mysql-增加-redmine-的使用者">STEP 7：在 MySQL 增加 redmine 的使用者<a class="h-anchor" href="#step-7%e5%9c%a8-mysql-%e5%a2%9e%e5%8a%a0-redmine-%e7%9a%84%e4%bd%bf%e7%94%a8%e8%80%85" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 登入 MySQL
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    mysql -u root -p
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 創建 redmine 資料庫
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    CREATE DATABASE redmine CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 創建 redmine 使用者，密碼記得自行調整
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    CREATE USER &#39;redmine&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;password&#39;;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 給予使用者權限
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    GRANT ALL PRIVILEGES ON redmine.* TO &#39;redmine&#39;@&#39;localhost&#39;;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">6. 使權限生效
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    FLUSH PRIVILEGES;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">7. 離開 MySQL
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    quit;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/f0d6fa77b683a40cec8d44e5be51e36c" rel="noopener">mysql_add_redmine_user.md</a>（GitHub Gist）</p>
<h2 id="step-8安裝-redmine">STEP 8：安裝 Redmine<a class="h-anchor" href="#step-8%e5%ae%89%e8%a3%9d-redmine" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<h3 id="-下載官方-image">下載官方 image<a class="h-anchor" href="#-%e4%b8%8b%e8%bc%89%e5%ae%98%e6%96%b9-image" aria-label="這個段落的連結"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 到[<span style="color:#7ee787">官方網站</span>](https://www.redmine.org/projects/redmine/wiki/Download)了解最新的stable版本（筆者安裝版本為 4.1.1）
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">2.</span> 前往放置 redmine image 的目錄
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cd /data/redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 下載官方 image 並解壓縮
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    wget https://www.redmine.org/releases/redmine-4.1.1.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    tar zxvf redmine-4.1.1.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 建立連結資料夾 current
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ln -s redmine-4.1.1 current
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 前往連結資料夾
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cd current
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/523ff799ed15fd78787e5664bcd589e3" rel="noopener">redmine_download.md</a>（GitHub Gist）</p>
<h3 id="-調整-redmine-裡面的資料庫設定">調整 redmine 裡面的資料庫設定<a class="h-anchor" href="#-%e8%aa%bf%e6%95%b4-redmine-%e8%a3%a1%e9%9d%a2%e7%9a%84%e8%b3%87%e6%96%99%e5%ba%ab%e8%a8%ad%e5%ae%9a" aria-label="這個段落的連結"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 將 redmine 的資料庫範例設定檔複製一份
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cp -pR config/database.yml.example config/database.yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 編輯資料庫設定檔案
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    vi config/database.yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`  
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3.  調整 production 的資訊即可，內容填上 STEP7 建立的使用者資訊即可
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    production:
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      adapter: mysql2
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      database: redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      host: localhost
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      username: redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      password: &#34;your password&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      # Use &#34;utf8&#34; instead of &#34;utfmb4&#34; for MySQL prior to 5.7.7
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      encoding: utf8mb4
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/9cb24f48fd8b8fa969c4138a12186a76" rel="noopener">redmine_database_config.md</a>（GitHub Gist）</p>
<h3 id="-下載相關套件">下載相關套件<a class="h-anchor" href="#-%e4%b8%8b%e8%bc%89%e7%9b%b8%e9%97%9c%e5%a5%97%e4%bb%b6" aria-label="這個段落的連結"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 先確認當前資料夾為 <span style="color:#a5d6ff">`/data/redmine/current`</span>
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    pwd
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 執行 gem, bundle 安裝依賴套件
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    gem install bundler
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    bundle install --without development test
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    &gt; 如果安裝過程中遇到錯誤可能是因為沒有安裝到 ruby 的套件  
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    &gt; 1. 先安裝 `</span>sudo apt-get install ruby-dev<span style="color:#a5d6ff">`  
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    &gt; 2. 再執行一次 `</span>bundle install --without development test` 確認有無報錯
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/540d8de42ff10326664acdb6f29c08d4" rel="noopener">redmine_install_package.md</a>（GitHub Gist）</p>
<h3 id="-初始化-redmine">初始化 redmine<a class="h-anchor" href="#-%e5%88%9d%e5%a7%8b%e5%8c%96-redmine" aria-label="這個段落的連結"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 先確認當前資料夾為 /data/redmine/current
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    pwd
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 用 Rake 啟動 redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    bundle exec rake generate_secret_token
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. Migrate Database Schema(初始化資料庫)
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    RAILS_ENV=production bundle exec rake db:migrate
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. Load Initial Data(下面會請你選擇語言，預設為英文，語言後續都能再做調整)
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    RAILS_ENV=production bundle exec rake redmine:load_default_data
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 用 Nginx 重啟 Redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sudo systemctl restart nginx
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/79b903f7c4f1f22821aa91bbb21dca06" rel="noopener">redmine_init.md</a>（GitHub Gist）</p>
<p>接下來你可以瀏覽 <code>http:&lt;server_ip&gt;</code> ，如果順利的話可以看到 Redmine 登入畫面如下：</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-07.webp" width="1148" height="565" alt="預設 admin/admin 登入" loading="lazy" decoding="async">
  <figcaption>預設 <code>admin/admin</code> 登入</figcaption>
</figure>

<h2 id="step-9安裝-redmine-外掛">STEP 9：安裝 Redmine 外掛<a class="h-anchor" href="#step-9%e5%ae%89%e8%a3%9d-redmine-%e5%a4%96%e6%8e%9b" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<p>Plugin 安裝方式雷同，下面以 <code>Redmine Dashboard 2</code>為範例安裝</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 先進入 redmine 的 plugin 資料夾
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cd /current/plugins
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 下載 plugin，最新的 release 請參考[官方](https://github.com/jgraichen/redmine_dashboard)
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    wget https://github.com/jgraichen/redmine_dashboard/archive/v2.9.0.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 解壓縮檔案
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    tar zxvf v2.9.0.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 移除壓縮檔
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rm v2.9.0.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">6.  安裝相關套件
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    bundle install
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">7. 將套件相關 DB 進行 migrate 到 production
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rake db:migrate RAILS_ENV=production
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">8. 將套件安裝至 production
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    bundle exec rake redmine:plugins:migrate RAILS_ENV=production
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">9. 安裝完畢後重啟讓設定生效
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sudo systemctl restart nginx
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/d625c9f43d9667e086f3eb73328becb6" rel="noopener">redmine_plugin.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-08.webp" width="1148" height="529" alt="安裝成功後的外掛程式會直接出現喔～" loading="lazy" decoding="async">
  <figcaption>安裝成功後的外掛程式會直接出現喔～</figcaption>
</figure>

<h2 id="step-10設定-redmine-寄信功能">STEP 10：設定 Redmine 寄信功能<a class="h-anchor" href="#step-10%e8%a8%ad%e5%ae%9a-redmine-%e5%af%84%e4%bf%a1%e5%8a%9f%e8%83%bd" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<p>如果沒做這個步驟是寄不出信的，需要做下面的調整即可</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-09.webp" width="1400" height="125" alt="設定前在：網站管理&gt;設定&gt;電子郵件提醒選項。會出現的畫面" loading="lazy" decoding="async">
  <figcaption>設定前在：網站管理&gt;設定&gt;電子郵件提醒選項。會出現的畫面</figcaption>
</figure>

<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 進入 redmine 設定的資料夾
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cd /current/config
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 將 redmine 的設定範例設定檔複製一份
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cp -pR configuration.yml.example configuration.yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 編輯 redmine 設定檔案
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    vi configuration.yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 調整 production 的資訊即可，下面用 Gmail 作為範例
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    production:
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      delivery_method: :smtp
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      smtp_settings:
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        enable_starttls_auto: true
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        address: &#34;smtp.gmail.com&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        port: 587
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        domain: &#34;smtp.gmail.com&#34; # &#39;your.domain.com&#39; for GoogleApps
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        authentication: :plain
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        user_name: &#34;email&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        password: &#34;email pw&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">     `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 設定完畢後重啟生效
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sudo systemctl restart nginx
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/120f7f2368b770899f5cacdc8344e61a" rel="noopener">redmine_email.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-10.webp" width="1147" height="488" alt="網站管理&gt;設定&gt;電子郵件提醒選項的右下角會有“寄送測試郵件的按鈕”提供測試喔" loading="lazy" decoding="async">
  <figcaption>網站管理&gt;設定&gt;電子郵件提醒選項的右下角會有“寄送測試郵件的按鈕”提供測試喔</figcaption>
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-11.webp" width="1262" height="484" alt="收到的測試郵件會長這個樣子" loading="lazy" decoding="async">
  <figcaption>收到的測試郵件會長這個樣子</figcaption>
</figure>

<h2 id="三備註">三、備註<a class="h-anchor" href="#%e4%b8%89%e5%82%99%e8%a8%bb" aria-label="這個段落的連結"></a></h2>
<ol>
<li>如果進入網頁時畫面沒有顯示應該是因為防火牆問題，可以用下面指令嘗試：<code>sudo ufw allow http</code> 、<code>sudo ufw allow https</code></li>
<li>參考資源：<a href="https://rickhw.github.io/2019/05/11/Redmine/Install-Redmine40x-on-Ubuntu1604/">Redmine 安裝篇：Redmine 4.0.x on Ubuntu 16.04</a>、<a href="https://rickhw.github.io/2017/03/18/Redmine/Redmine-Plugins/">Redmine Plugins and Themes</a>、<a href="https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_on_Ubuntu_step_by_step">HowTo Install Redmine on Ubuntu step by step</a></li>
</ol>
<hr>
<pre tabindex="0"><code>安裝完後如果想進一步了解如何使用 Redmine，可以參考以下文章：
👍 如何用 Redmine 做專案管理＆體驗心得
👍 Redmine Plugins &amp; Themes 介紹：那些我成功擴充的外掛
👍 用 Redmine 做專案管理 — 管理者不可不知的設定
👍 用 Redmine 做專案管理 — 一般用戶不可不知的基礎功能
👍 Redmine 教育訓練 — 依角色權限說明
</code></pre><hr>
<h3 class="h-nomark" id="-讀完這篇文章後">🙂 讀完這篇文章後<a class="h-anchor" href="#-%e8%ae%80%e5%ae%8c%e9%80%99%e7%af%87%e6%96%87%e7%ab%a0%e5%be%8c" aria-label="這個段落的連結"></a></h3>
]]></content:encoded>
    </item>
    <item>
      <title>用 Microsofts Lists 做專案管理，任務分配到功能測試都一條龍搞定</title>
      <link>https://deanlin.net/blog/202101/project-management-with-microsoft-lists/</link>
      <pubDate>Tue, 12 Jan 2021 14:22:32 +0800</pubDate>
      <guid>https://deanlin.net/blog/202101/project-management-with-microsoft-lists/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>其實 Jira、Notion 是更好的專案管理工具(個人使用後的觀感)，但因為許多公司都有購買 Office 365 來使用 office、excel… 等工具，所以如果專案管理也能用 Office 365 來解決不但能節省一筆經費，更可以讓團隊把注意力集中操作同一個軟體。</description>
      <media:content url="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-og_hu_1fa5fa86d52094f7.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<pre tabindex="0"><code>這篇文章會談到以下事情：
前言：專案管理工具的抉擇
一、建立符合專案管理需求的 Lists
二、模擬專案實際情境
三、操作上的小訣竅
結語：讓工具連結發揮更大功用
</code></pre><figure class="figure"><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-01.webp" width="800" height="400" alt="因為公司要用你，所以只好認命研究惹" fetchpriority="high" decoding="async">
  <figcaption>因為公司要用你，所以只好認命研究惹</figcaption>
</figure>

<h2 id="前言專案管理工具的抉擇">前言：專案管理工具的抉擇<a class="h-anchor" href="#%e5%89%8d%e8%a8%80%e5%b0%88%e6%a1%88%e7%ae%a1%e7%90%86%e5%b7%a5%e5%85%b7%e7%9a%84%e6%8a%89%e6%93%87" aria-label="這個段落的連結"></a></h2>
<p>其實 Jira、Notion 是更好的專案管理工具(個人使用後的觀感)，但因為許多公司都有購買 Office 365 來使用 office、excel… 等工具，所以如果專案管理也能用 Office 365 來解決不但能節省一筆經費，更可以<strong>讓團隊把注意力集中操作同一個軟體，而不是做一件事都需要更換一個軟體</strong>。</p>
<p>Office 365 裡比較適合拿來做專案管理的有 Microsoft Planner 、 Microsoft Lists 這兩個，如果有興趣了解兩者的不同可以<a href="https://deanlin.net/blog/202010/microsoft-planner-vs-lists/"><em>參考這篇文章</em></a>，但經過考量後 Microsoft Lists 更為適合多個單位之間的合作，下面會詳細介紹我是如何使用的。</p>
<h2 id="一建立符合專案管理需求的-lists">一、建立符合專案管理需求的 Lists<a class="h-anchor" href="#%e4%b8%80%e5%bb%ba%e7%ab%8b%e7%ac%a6%e5%90%88%e5%b0%88%e6%a1%88%e7%ae%a1%e7%90%86%e9%9c%80%e6%b1%82%e7%9a%84-lists" aria-label="這個段落的連結"></a></h2>
<h3 id="setp-1-建立空白清單">SETP 1: 建立空白清單<a class="h-anchor" href="#setp-1-%e5%bb%ba%e7%ab%8b%e7%a9%ba%e7%99%bd%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h3>
<figure class="figure"><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-02.webp" width="1400" height="770" alt="這裡你可以選擇建立符合自己需求的空白清單" loading="lazy" decoding="async">
  <figcaption>這裡你可以選擇建立符合自己需求的空白清單</figcaption>
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-03.webp" width="1400" height="1034" alt="依據專案的需求自行填寫" loading="lazy" decoding="async">
  <figcaption>依據專案的需求自行填寫</figcaption>
</figure>

<h3 id="setp-2--依照需求新增欄位">SETP 2 : 依照需求新增欄位<a class="h-anchor" href="#setp-2--%e4%be%9d%e7%85%a7%e9%9c%80%e6%b1%82%e6%96%b0%e5%a2%9e%e6%ac%84%e4%bd%8d" aria-label="這個段落的連結"></a></h3>
<p><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-04.webp" width="1400" height="401" alt="SETP 2 : 依照需求新增欄位（圖 4）" loading="lazy" decoding="async"></p>
<p>➤ 下面說明每個欄位的作用，可依自己的需求再做調整：</p>
<ol>
<li><strong>任務名稱</strong>：簡單明瞭讓被指派的人員初步了解任務</li>
<li><strong>描述</strong>：詳細說明任務內容，如果有子任務建議使用條列式呈現</li>
<li><strong>進度</strong>：顯示該任務完成進度，<em>此欄位會因為任務類型的不同而有不同的文字呈現</em></li>
<li><strong>優先度</strong>：分成 緊急&gt;普通&gt;不重要 3 種</li>
<li><strong>負責人員</strong>：PM 指派的任務對象，此欄位可選擇群組或是由多個人負責</li>
<li><strong>相關人員</strong>：除了負責人員外，需要追蹤該任務的人員，就像是信件的副本概念</li>
<li><strong>負責 PM</strong>：通常就是建立該任務的 PM 本人</li>
<li><strong>任務類型</strong>：分成 文件、設計、程式、測試 4種，方便透過此欄過濾出想要的資訊</li>
<li><strong>相關連結</strong>：可能是要測試的網址、給設計的參考範本、完成的文件連結…</li>
<li><strong>開始日期</strong>：被指派的人員開始作業時的時間</li>
<li><strong>到期日</strong>：完成該任務的時間</li>
</ol>
<h2 id="二模擬專案實際情境">二、模擬專案實際情境<a class="h-anchor" href="#%e4%ba%8c%e6%a8%a1%e6%93%ac%e5%b0%88%e6%a1%88%e5%af%a6%e9%9a%9b%e6%83%85%e5%a2%83" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>需求：今天有一個網站需要新增一個商品清單頁面，並且在這個頁面可以對商品進行新增、修改、刪除、查詢的動作</p>
</blockquote>
<h3 id="-前期">前期<a class="h-anchor" href="#-%e5%89%8d%e6%9c%9f" aria-label="這個段落的連結"></a></h3>
<p>指派設計完成 wireframe，同時 PM 分析這個頁面的細部需求規格</p>
<p><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-05.webp" width="1400" height="203" alt="前期（圖 5）" loading="lazy" decoding="async"></p>
<h3 id="-中期">中期<a class="h-anchor" href="#-%e4%b8%ad%e6%9c%9f" aria-label="這個段落的連結"></a></h3>
<p>在設計的 wireframe 與 PM 的需求規格完成後，後端工程師可以依據需求規格開始撰寫 api ，前端工程師也能依照 wireframe 先完成畫面等 api 完成後串接</p>
<p><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-06.webp" width="1400" height="520" alt="中期（圖 6）" loading="lazy" decoding="async"></p>
<h3 id="-後期">後期<a class="h-anchor" href="#-%e5%be%8c%e6%9c%9f" aria-label="這個段落的連結"></a></h3>
<p>在前端工程師依照 wireframe 完成 UI 並串接好後端 api 後就可以請測試部門做功能上的確認，測試的功能項會建議由工程師做簡易的文件撰寫。</p>
<p><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-07.webp" width="1400" height="596" alt="後期（圖 7）" loading="lazy" decoding="async"></p>
<p>測試後依據測試結果將進度轉為 <strong>測試成功、測試失敗 ，</strong>如果測試失敗要說明原因並重新指派給當初負責的人員處理。</p>
<h2 id="三操作上的小訣竅">三、操作上的小訣竅<a class="h-anchor" href="#%e4%b8%89%e6%93%8d%e4%bd%9c%e4%b8%8a%e7%9a%84%e5%b0%8f%e8%a8%a3%e7%ab%85" aria-label="這個段落的連結"></a></h2>
<h3 id="-善用篩選功能找出需要的資訊">善用篩選功能找出需要的資訊<a class="h-anchor" href="#-%e5%96%84%e7%94%a8%e7%af%a9%e9%81%b8%e5%8a%9f%e8%83%bd%e6%89%be%e5%87%ba%e9%9c%80%e8%a6%81%e7%9a%84%e8%b3%87%e8%a8%8a" aria-label="這個段落的連結"></a></h3>
<p>因為列表上的資訊非常多，所以我們可以依據實際的情境來做調整：</p>
<ol>
<li>將 <strong>優先度度為緊急 </strong>的篩選出來確認進度</li>
<li>測試人員只需要瀏覽 <strong>任務類型為測試</strong> 的就好</li>
<li>可以 <strong>用關鍵字搜尋任務名稱</strong></li>
</ol>
<p><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-08.webp" width="1400" height="816" alt="善用篩選功能找出需要的資訊（圖 8）" loading="lazy" decoding="async"></p>
<h3 id="-使用交談功能討論任務進度">使用交談功能討論任務進度<a class="h-anchor" href="#-%e4%bd%bf%e7%94%a8%e4%ba%a4%e8%ab%87%e5%8a%9f%e8%83%bd%e8%a8%8e%e8%ab%96%e4%bb%bb%e5%8b%99%e9%80%b2%e5%ba%a6" aria-label="這個段落的連結"></a></h3>
<p>使用過本產品的人我想最大的詬病之一就是文字圖片無法複製貼上，目前看到可以複製貼上的區域只有 <strong>任務裡面的交談</strong>，如果你們有很多詳細的內容是寫在交談裡面的請記得在描述中說一下，不然大家都不知道交談裡面有更多內容。</p>
<p><img src="https://deanlin.net/blog/202101/project-management-with-microsoft-lists/images/project-management-with-microsoft-lists-09.webp" width="1400" height="816" alt="使用交談功能討論任務進度（圖 9）" loading="lazy" decoding="async"></p>
<h2 id="結語讓工具連結發揮更大功用">結語：讓工具連結發揮更大功用<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e%e8%ae%93%e5%b7%a5%e5%85%b7%e9%80%a3%e7%b5%90%e7%99%bc%e6%8f%ae%e6%9b%b4%e5%a4%a7%e5%8a%9f%e7%94%a8" aria-label="這個段落的連結"></a></h2>
<p>如果只操作 Lists 你會感覺到有些部分綁手綁腳的，但 Office 365 的工具我想當初設計的想法就是要使用者把裡面的工具互相串聯吧？所以每項工具只做出基礎的功能，如果要更深入的功能需要再與其他工具結合：</p>
<ol>
<li>如果你要 subtask 的功能要與 Microsoft Planner 結合</li>
<li>想要撰寫更詳細的文件內容就直接超連結到 Microsoft Office</li>
</ol>
<p>他不是一款完美的工具，但使用者可以透過其他方法讓他更好用。</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
