「最小可行」四個字,很多團隊只讀了「最小」;MVP 縮的是問題的範圍,不是做工的品質。
昨天散會前,目標句拍板了,Non-goal 清單卻越寫越長:超過 7 天的先不做、已出貨的先不做、部分退款先不做……有人盯著白板看了很久,終於把不安說出口:
「這樣 MVP 會不會太陽春?」
沒有人接得上話。於是今天多開了一場會,議程只有一項:把第一輪的邊界正式定下來。這場 MVP 邊界會議,就從那句不安開始。
PM 先把昨天的目標句貼回白板正中央:
「客服能對一筆 7 天內未出貨的信用卡訂單發動全額退款,操作後能明確知道退款成功或失敗,財務能對得上帳。」
然後照著它,把邊界一條一條釘死:
只做
信用卡、單筆訂單、全額退款、
未出貨、7 天內、客服操作
不做
批次退款、部分退款、多幣別與多通路、
已出貨、超過 7 天的簽核流(介面先留)、
手續費與發票折讓計算
狀態機
申請 → 處理中 → 成功/失敗
清單成形,昨天那股不安也跟著具體成形。前端工程師把話講白:
「客服主管當初要的是『線上退款功能』。這張清單給她的,是只認信用卡、只退全額、只收未出貨、只看 7 天內的一小塊。她會買單嗎?」
會議差點在這裡轉彎。有人提議把部分退款加回來——「不過就是多一個金額欄位」;有人提議已出貨「先做個簡化版」。邊界眼看要被善意泡軟的時候,PM 說了今天最值錢的一句話:
「我們全部的人都在替客服主管擔心。她就在樓下,去問她。」
十分鐘後答案回來了。客服主管幾乎沒有思考:七成的退款申請就是這種——下單沒多久反悔、貨還沒出、整筆退掉。剩下的三成,本來就要查狀況、走財務,快不起來。然後她補了一句:
「你們把那七成從三天變三分鐘,我就很感謝了。」
「太陽春」的疑慮,由當事人親自撤案。
那股不安值得解剖,因為它不是這個團隊獨有的。攤開來大概是四句話,每句單獨聽都有道理:
「客戶要的是完整的退款功能,交這麼一小塊,像偷工減料。」
「MVP 不就是先求有、再求好?那就先隨便做一版,每個情境都沾到。」
「反正之後會迭代,細節以後補。」
「上次我們三週就『全部做完了』,這次一輪只做一小塊,進度怎麼交代?」
注意這四句其實在講兩件相反的事。第一句和第四句說:範圍不能縮,少做就是沒產出。第二句和第三句說:品質可以先縮,隨便做、以後補。合在一起,MVP 就變成一個「什麼都要沾到,但都可以先做爛」的東西。
這個東西不需要想像它長什麼樣子。第三部,就是它。
第三部的退款功能,硬要說的話,它也很「快」。但它縮的是什麼?
範圍一項都沒縮——從頭到尾沒有人說過「已出貨先不做」「部分退款先不做」,所有情境都躺在預設要支援的想像裡。被縮掉的是品質:成功是猜的、狀態是假的、webhook 沒人接、重送沒防護、月底對不上帳。
兩條路擺在一起看:
路線一:範圍不縮,品質先縮
每個情境都沾到 → 沒有一條路走得完
→ 上線 → 下架
(第三部,實測過)
路線二:品質不縮,範圍先縮
只做一塊 → 這一塊每條路走到底
→ 真的可用 → 下一塊再排
(第四部,今天選的)
MVP 的 M 是問題最小化,不是品質最小化。
具體到這個案子,「品質不縮」的意思是:留下來的那一小塊,要做到真的能用。「申請 → 處理中 → 成功/失敗」這條狀態機一格都不能省——「處理中」正是為非同步金流而存在的,那是 Day 18 全隊用一場鴉雀無聲的聯調換來的教訓;失敗要走得到、看得懂;結果要等真的確認才算數,財務隔天要對得上帳。這些不是進階功能,是「可行」兩個字的最低消費。
「範圍縮」的另一半責任則是:不做的部分要明說。昨天的 Non-goal 已經寫下,今天再多釘一根釘子:每一條不做,都寫上什麼時候回來看。超過 7 天的簽核流不做,但介面先留位置;手續費與折讓不做,財務知道、也同意先不做。不做而明說,叫邊界;不做也不說,叫地雷——第三部的隱藏規則,就是這樣一顆一顆踩響的。
最後回頭處理「太陽春」。陽春不陽春,比較基準不是想像中的完整版——那個版本上過線,活不滿一個月。正確的基準是現況:三個工作天的人工流程。七成的申請三分鐘辦完、狀態誠實、帳對得上,對照現況,這叫哪門子陽春?
縮小後的問題,仍然是真問題。七成,就是證據。
順帶一提,「先交一小塊完整的」在兩邊方法論裡都有正規做法:瀑布叫分期交付,第一期的範圍白紙黑字寫清楚,驗收照做;敏捷叫 Increment,每一輪交出的東西小,但每一輪交出的都真的能用。兩邊同樣沒有任何一條規則叫做「先隨便做一版」。
第二部的世界裡,「先做哪一塊」是大神的招牌能力之一。他總能「直覺地」先做客戶最常用的那塊,事後大家讚嘆 sense 好。
這次他不在。團隊用一個毫無神祕感的動作得到同一個答案:走下樓,花十分鐘問掉。
所謂 sense,有一部分只是他比別人早問過、多看過。答案從頭到尾都放在客服主管的日常裡——差別只在有沒有人去拿。
老規矩。第四部的檢查表,繼續往第三部的反方向走:
Scope ■ 主動縮小:七成案件裡切出最小一塊完整的,其餘記錄在案
Time □ 沒有為了「看起來完整」多排一天工
Cost □ 沒有加人
Quality □ 做的部分不打折:處理中、失敗路徑、對帳,一項不少
Risk □ 不做的全部明說,沒有藏在想像裡的未爆彈
人 □ 沒有人需要用加班把範圍撐大
Scope 這格連著兩天是黑的,但它是被「選」黑的,不是被「輸」黑的。對照 Day 21 的全案結算:第三部的 Scope 從頭到尾一格空白,一項都不肯少,最後整包下架歸零,黑掉的是 Time、Quality 跟人。
範圍這種東西,你不主動畫它,它就會挑一個最貴的時間點,反過來畫你。
再看 Quality 那格。第三部它一勾再勾;今天第一次,它是憑實力空白的——不是沒有代價,而是代價被指名記在 Scope 帳上。而 Scope 是六個變數裡唯一「之後補得回來」的:品質債要還利息,加班的人會離開,時間不會倒流;但不做的功能,下一輪排進來就好。
把代價記在 Scope,是六格裡唯一可以退款的一筆。
把今天會議的結果收成三格。任何要切 MVP 的功能都適用:
□ 只做:______
(每一條都要能真的用:中間態、失敗路徑、
怎麼驗證,缺一不可)
□ 不做:______
(每一條寫一句「為什麼現在不做」,
讓它是決策,不是遺漏)
□ 不做的什麼時候回來看:______
(寫輪次、日期或觸發條件,不准寫「以後」)
第三格是「切割」與「丟棄」的差別:填得出來,不做的東西有回程票;填不出來,你不是在切範圍,是在許願它自己消失。
MVP 的 Minimum 用來縮小問題,Viable 用來守住品質;兩個字只讀了前一個的團隊,做出來的不是最小可行產品,是第三部那個版本。
邊界釘死了,第一輪的問題夠小,也夠真。下一件事:這一小塊,需求該寫成什麼樣子?
會議散場時,已經有人在找 User Story 的格式範本,準備把「As a... I want...」抄好抄滿。先說結論:格式不是重點。明天來看 User Story 真正值錢的是哪個部分。