區塊 5 畫完端對端流程圖,使用者的視角已經很清楚了:按了什麼、跳到哪個畫面、出錯回哪裡。但有一類需求,光有這張圖還不夠。

舉個例子。一個「序號領取」功能,使用者那邊很單純:進來、領一組序號、看到「剩餘 488 組」。可是這個「488」是怎麼來的?背後可能是:後台先上傳了一批序號、前台即時扣減、外部廠商定期回報哪些序號其實已經被用掉、再有人工去把那些釋放回庫存。使用者完全看不到這一串,他只覺得「數字自己就會對」。
需求方PM 也常常只看到自己那一格。你問他流程,他講的是前台那段;那些在後台、廠商、人工之間流動的資料,他要嘛沒想到,要嘛覺得「那是系統的事」。但對工程師來說,最容易出事的恰恰是這些跨方的交接點。參與者協作圖,就是把這張「誰跟誰在交接什麼」的地圖攤開。
協作圖跟區塊 5 的端對端流程圖長得有點像,但它們回答的是不同問題:
兩張互補,不互相取代。同一個需求只要牽涉到多方,兩張都該畫。
協作圖不是每個需求都要畫,它有明確的觸發條件。區塊 5 流程圖確認後,鼠勾以會去數這個流程到底牽涉幾個參與者:
只有一個參與者(純前端彈窗、單一系統內的功能、純查詢),就跳過,PRD 直接標「N/A 單一參與者」。兩個以上,才畫。
判斷「有幾個參與者」這件事,需求方PM 又會漏。所以鼠勾以會用選項幫他點名,把容易被忘記的非系統角色一起撈出來:
這個流程看起來會牽涉到好幾方一起合作。先確認有沒有漏掉的角色,會涉及以下哪幾類?(可複選)
A. 多個系統(前台、後台、App、簡訊系統⋯⋯)
B. 不同部門或角色(業務、客服、法遵、主管⋯⋯)
C. 第三方(外部廠商、金流商、政府單位、外部 API)
D. 人工作業(人工修正、對帳、書面審核)
E. 排程/自動化(每日批次、定時任務、事件觸發)
這五類(系統、角色、第三方、人工、排程)是刻意分開列的,因為需求方PM 通常只會想到「系統」這一類,後面四類最常被漏掉,尤其是人工作業跟排程。但一個功能會不會準時、會不會出錯,經常就取決於那個沒人提到的「每日凌晨批次」或「人工對帳」。
先講結論:協作圖用 Mermaid 的**循序圖(sequenceDiagram)**畫,每個參與者一條垂直的生命線(lane),訊息箭頭在它們之間由上往下傳遞。
沒有採用一般印象中那種一條一條車道的 BPMN 泳道圖,原因是 Mermaid 沒有原生的泳道語法。硬用 subgraph 去框,結果會是一堆分組方塊、車道也對不齊;要 PM 改用 draw.io 那類工具自己畫又太重。循序圖原生支援、會自動排版,而且生命線本來就對應參與者、訊息箭頭本來就對應資料流向,跟協作圖要表達的內容一致。
拿上面那個序號領取來說,畫出來像這樣:
sequenceDiagram
participant BO as 內部後台(系統)
participant FE as 會員前台(系統)
participant VEN as 外部廠商(第三方)
participant OP as 人工修正(人工作業)
BO->>FE: 上傳 500 組序號(初始化庫存)
Note over FE: 使用者領取,扣減庫存
VEN->>OP: 提供已使用名單
OP-->>FE: 釋出已使用序號回庫存
Note over FE: 顯示最新剩餘組數
這張圖的重點在那幾條箭頭:序號從後台流到前台、使用名單從廠商流到人工、再由人工流回前台庫存。交接點畫出來之後,工程師會直接問到關鍵問題:廠商多久回報一次?人工釋出有沒有時間差、會不會超賣?這些只看前台流程圖都看不出來。
實作上的幾條規範:每個 Actor 宣告成一個 participant;呼叫用實線箭頭、回應用虛線箭頭;每一條訊息都必須標清楚傳遞的內容,不能只有一條光禿禿的箭頭;條件分支用 alt、會重試的用 loop、同一個參與者自己內部的處理用 self-message 或一條註記。圖旁邊再附一張「參與者清單」表,把每條生命線的職責寫成文字,跟圖一起進 PRD。
協作圖跟使用者確認後就鎖定,不會隨後面的區塊一直變。唯一的例外是:區塊 7 談例外情境時,如果冒出一個前面沒提到的角色(例如「出錯時客服要介入」「異常要通報資安」),才回頭補一條生命線。
這個「鎖定 + 例外才補」的設計是刻意的。協作圖如果每個區塊都跟著動,維護成本太高,也容易跟其他圖對不齊;但例外情境又確實是最容易長出新角色的地方,所以留一個明確的後門,而不是完全凍結。
參與者協作圖是一個可選的進階機制:流程牽涉兩個以上的參與者時,就用 Mermaid 循序圖把「誰負責什麼、資料在誰之間流動」畫成一張圖,補上端對端流程圖看不到的跨方交接。它用五類 Actor 提示把最常被忽略的人工與排程角色找出來,每條訊息都要標傳遞內容,畫完之後鎖定,只在區塊 7 出現新角色時回頭補。單一參與者的需求可以直接跳過這一張。
Day 19 進到區塊 6「The Data」:當畫面要使用者填一個欄位時,那個看似簡單的輸入框,背後其實藏著一整排該問的規格:字數、格式、必填、驗證時機,一個都不能少。
這是 iThome 鐵人賽系列文章。明天見。