0%

[week 19] 淺談產品開發與工作流程

本篇為 [PD101] 淺談產品開發與工作流程 這門課程的學習筆記。如有錯誤歡迎指正!

透過這堂課程,我們能夠在進入職場之前,先試著瞭解開發流程,雖然每間公司實際工作情形不一定相同,但也能先有個初步概念:

課程內容也會以之前 Huli 和助教共同實作的 Lidemy 學習系統作為範例。


在實際開發之前

工程師會根據 PM 提出的產品需求來進行開發,而一個產品需求產生的流程如下:

  • stakeholder 利益相關者,也就是客戶
  • Product Requirement Document 產品需求文件
  • Product Specifications 產品規格書
  • wireframe 設計線稿
  • mockup 模型

接著工程師會透過 spec 瞭解產品需求,根據 mockup 寫出相對應的產品介面與功能。

Product spec 裡面有哪些東西?

實際開發中,寫得越詳細的產品規格書,能夠幫助開發內容與規格達成一致;假如 PM 沒有將需求寫在規格書中,開發產品也需同步進行,避免程式行為與規格不一致,導致後續維護問題。

一般而言,產品規格書屬於公司機密不能對外公開,這裡舉一些網路上公開的範例。

範例一:PRD 到底该怎么写?更全面的文档范例来了

  • 修訂紀錄
  • 全局說明
  • 項目背景
    • 透過現狀、方案、目標來描述
  • 項目範圍
    • 項目對應搭框架
    • 產品結構圖
  • 開發流程
  • 功能需求
    • 對功能逐一描述
    • 透過使用者 + 功能方式來描述
    • 配置條件、介面元素、產品邏輯、異常與分支流程
    • 數據字典
  • 非功能需求
    • 數據、監控、性能需求

範例二:【SOP 不藏私】系列#EP1「連猴子也會的 PRD 指南」

這個例子會比較偏向於介紹產品如何開發以及開發時程,說明產品規格書的文件架構:

  • 文件概況
    • 文件修訂紀錄
  • 產品簡介與功能對照
    • 產品簡介
    • 產品目標說明
    • 「工作排程、使用者故事、對應功能、進版時間」對照表
  • 產品架構與流程
    • 產品功能架構圖(Function Map)
    • 產品信息架構圖(Information Architecture)
    • 功能邏輯圖(Flow Chart)
  • 產品設計原型
    • 產品全局簡介
    • 局部功能 Prototype,有互動的部分
  • 產品指標
  • 字串表
    • 用來顯示多國語言

延伸閱讀:

  • 【產品經理 PM |需求文檔 PRD】優惠券發放的產品設計,需求文檔怎麼寫?

User Story 使用者故事

User Story(使用者故事)是一段簡單的功能敘述,藉由客戶或使用者的觀點寫下有價值的功能(functionality)。除了能更明確化產品需求,工程師也能夠知道客戶會做哪些驗收測試、期望跟假設。

在 User Story 中,對於一個需求的寫法大致如下:

  • As a user… 身為一個使用者..
  • I want to… 我希望…
  • so that I can… 我就可以…

以開發 Lidemy 作業系統為例子,這是初步的產品需求:

若以 User Story 方式撰寫,就能夠使產品需求更加明確化,也能瞭解不同使用者身份的需求以及開發順序:

繪製 Flowchart & Wireframe

此外還有像是 User Flow 使用流程和 Wireframe 設計線稿,也能幫助理解產品邏輯:

  • User Flow

  • Wireframe

繪製 Flowchart 時,也找了一些參考資料,瞭解該如何繪製:

  • 先別急著畫 UI,你聽過 Flow Chart 嗎
  • Flowchart Templates | Editable Online or Download for Free

像是流程圖其實能透過規範的符號來統一:

試做有關會員的 User Flow:

DEMO 連結


Card = Ticket = Task = Issue

在實際開發過程,通常會把每個功能切割成一個任務,以下這些名詞均可代表工作的最小單位:

  • Task:任務
  • Issue:GitHub 上的一個問題或 Bug
  • Card:卡片
  • Ticket:票

通常會利用現成的平台,像是 JiraTrello 來管理任務,通常一個 User Story 就會切割成一張票:

透過這些平台,能夠用來切割工作區塊,也能讓整個團隊快速瀏覽整體工作進度。

參考資料:

  • 什麼是 User Story?
  • Agile 使用者故事
  • 拆解使用者故事

軟體開發方法論 Methodology

在實際軟體開發過程,並不是拿了一張卡就開始工作那麼簡單,而是必須考慮透過哪種模式或框架來進行開發,大致可分成幾種方法:

  • Waterfall 瀑布流
  • Agile 敏捷

Waterfall 瀑布流

  • 從上往下,不能往回,一次性
  • 呈現完整性較高
  • 事前規劃需做完善,若過程中需要增加新功能獲改善,就需要再等下一輪流程
  • 較不適合大型專案

參考資料:

  • What’s the Difference? Agile vs Scrum vs Waterfall vs Kanban
  • 【Podcast EP03】敏捷或瀑布開發哪個好?流程用哪種重要嗎?

Agile 敏捷

  • 及早並持續地交付,精簡化
  • 彈性較高,能夠改變需求
  • 類似於把 Waterfall 的任務切小細分
  • 按照 12 項原則就能夠稱為敏捷,又可細分為不同框架來進行

參考資料:

  • 【文思不藏私】@敏捷宣言 12 原則
  • 什麼是敏捷?
  • 【敏捷系列 - 1】什麼是敏捷?敏捷實例分享

實作 Agile 概念:Kanban 看板

這裡以 Trello 和 Jira 平台為例:

  • Trello

  • Jira 平台的 Kanban Board

實作 Agile 概念:Scrum

透過 Scrum 的開發流程:

  • Product Backlog:列出產品所有功能
  • Sprint Planning:預估所需時間,分配任務
  • Sprint Backlog:這個週期要開發的功能
  • Sprint 開發週期:2-4 weeks 循環
  • Daily Scrum:例行溝通進度
  • Review、Retrospective:檢視進度與檢討

在實際開發扮演的角色:

  • Product Owner:決定產品走向
  • Scrum Master:幫助團隊跑 Scrum 流程
  • Team:實際開發的工程師

參考資料:

  • Introduction to Scrum - 7 Minutes
  • 【敏捷系列 - 3】Scrum 中的短衝 (Sprint)

工程師的兩週生活 & Scrum

這裡以工程師的生活作為範例,通常以兩個禮拜為一個開發週期,流程大致如下:

  • Sprint Planning
    • 預估任務時間 Story Point
    • 分配任務
  • 開發與 Daily Standup
    • Daily Standup:報告昨天進度、今天預計進度、提出遇到的困難,藉此同步團隊資訊
  • Deploy 部署
    • 例如隔週會部署程式到測試環境
  • Sprint Demo
    • PM 藉由 Demo 讓客戶瞭解目前進度
  • Sprint retrospective 檢討會議
    • Went well 做得不錯的點
    • To improve 要加強的點
    • Action items 如何改善

參考資料:

  • 協助做 retro 的工具

關於部署

實際部署程式可分成幾種環境,藉由不同環境,能夠在過程中進行測試,確認功能都沒問題後再進行公開:

  • Local 環境
    • 本機端開發,通常會接 Dev 的資料
  • Development 環境(Dev)
    • 和 Local 的差別:一個在自己電腦測試,另一個則是部署到 Server 環境
    • 例如:Netlify
  • Staging 環境 / QA 環境
    • 和 Production 類似,只是用來測試,不對外公開的環境
  • Production 環境
    • 所有使用者都看得到的環境

關於測試

這邊提到的測試,和我們之前學到的 Unit Test 不同,是工程師針對程式碼進行的測試;但 QA 要測的只是呈現功能是否正常,簡單介紹下列兩種測試方式:

  • SIT(System Integration Testing):系統整合測試,確認功能是否正常,可能透過手動或寫自動化程式來測試
  • UAT(User Acceptance Testing):使用者可用性測試,通常是 PM 會進行測試,確認功能是否符合預期

結語

最後整理產品開發流程的幾個重點:

  1. 由 PM 提出產品需求給工程師
    • spec 產品規格書:需要哪些功能
    • wireframe 設計草圖:用來確認網頁架構
    • mockup:由設計師根據產品規格做出模型
    • 透過 User Flow、User Story,更明確寫出針對不同使用者、需要哪些功能、以及優先順序(例如:身為一個使用者/管理員,我希望可以 XXX)
  2. 實作 Agile 開發
    • 在實際開發之前,可先在 Kanban(看板)列出產品所有功能,並以功能切割任務、預估所需時間
    • 例如:Trello、Jira 等平台
  3. 實際開發流程
    • 以 Sprint 開發週期為例,通常以 2-4 weeks 為週期,根據分配的任務進行開發,最後檢視進度並檢討如何在下個週期改善
    • 可將各個產品功能加上編號,在 commit 時也加上相對編號,之後就能快速找到當初討論的 requirement

延伸閱讀:

  • 做產品真是哭夭難! — Marty Cagan 演講 70 分鐘中文逐字翻譯(附贈 YouTube 錄影)