iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0

「做退款功能」人人都點頭,因為它什麼都沒排除;一句真正的目標句,說出口的那一刻,就該有一半的想像出局。


兩場各半小時的對話

昨天花了兩天,第一次把「誰說了算」寫下來:規則由客服主管與財務拍板,驗收要兩個人都點頭。知道誰說了算之後,下一步照昨天說的:先決定這一輪真正要解決什麼問題。

所以今天還是不寫程式。PM 約了兩場對話,各半小時,一場跟客服主管,一場跟財務人員。開場都是同一個問題:

「如果這個功能做完了,你的日子哪裡會不一樣?」

客服主管幾乎不用想。她要的從來不是一顆按鈕,是那三個工作天:收信、查單、開單給財務、等、回信;客戶在中間再寄兩封信催,客服在中間替系統的速度道歉。

「我要的不是退款按鈕。我要的是客服不用再替系統道歉。」

財務人員的答案讓在場的人都意外——她開口第一件事不是退款,是上次那筆被標記兩次的訂單,和月底那份對不上的對帳檔。

「我不反對線上退款。我反對對不上帳的線上退款。如果自動化的代價是我每個月底多花三天查帳,那我寧可繼續人工。」

一小時。兩個從 Day 15 那場月會就存在、卻從來沒被說出口的問題,第一次躺在桌面上:

客服的問題
→ 一趟退款平均三個工作天,客服夾在客戶與財務中間
  當人肉轉運站,還要替系統道歉

財務的問題
→ 每一筆退出去的錢,金流商的對帳檔、平台的訂單狀態,
  兩邊要對得起來,月底不用人肉追帳

注意第二條。第三部從頭到尾,沒有任何一張 Ticket 出現過「對帳」兩個字——直到上線之後,財務拿著對不上的帳回頭來追。


有人覺得這一小時很多餘

約這兩場對話之前,團隊裡是有雜音的。每一句單獨聽,都有道理。

目標還要問嗎?目標不就是把退款功能做出來?需求昨天不是才確認過誰說了算?Ticket 上寫得明明白白(就那一句)。再這樣開會下去,我們就要變成瀑布了。

檢驗的方法很簡單:拿「把退款功能做出來」這句話,去回答幾個這一輪遲早要面對的問題。客戶能不能自己按?已出貨的單子要不要處理?退一半的錢行不行?

「做退款功能」對每一題的答案都是:「呃……應該,要吧?」

一個對所有問題都回答「要」的目標,不是目標,是願望。它無法幫任何人做任何一個決定——第三部已經示範過,這樣的一句話最後會被每個人用自己的想像補完,補成三個不同的功能。


白板上的三個版本

那天下午的白板上,目標句總共出現過三個版本。

第一版就是 Ticket 上那句:「做一個線上退款功能。」它是一個工作項目,不是一個問題。

PM 試著寫了第二版:「使用者能對一筆指定訂單申請全額退款,並知道退款是否成功。」好多了——至少有使用者、有動作、有結果。但兩位有權拍板的人,各補了一刀。

客服主管先問:「使用者是誰?如果是客戶自己按,我們的權限規則就管不住了。七天內、未出貨的全額退款,我可以自己核;其他的都要走簽核。你們先做我核得動的。」

財務接著問:「『知道退款是否成功』——誰知道?客服知道就算數嗎?我月底對帳對不上的話,這個功能對我來說就是失敗的。」

於是有了第三版,也是定案的那句:

「客服能對一筆 7 天內未出貨的信用卡訂單發動全額退款,操作後能明確知道退款成功或失敗,財務能對得上帳。」

跟第一版相比,這句話長得多,也「小」得多。而它每多一個字,就有一批想像出局:

「客服能」
→ 客戶自助退款出局:這一輪的使用者是客服,不是客戶

「7 天內」「未出貨」
→ 簽核流與已出貨流程出局:那是另外兩個問題

「一筆」「全額」
→ 退一半的錢出局:部分退款是財務簽核的地盤

「明確知道成功或失敗」
→ Day 18 的教訓寫進了目標本身:收到 200 不叫知道

「財務能對得上帳」
→ 第三部翻車最貴的一環,第一次出現在承諾裡

從「做一個功能」變成「解決一個問題」——這一步,就是第四部與第三部的分水嶺。


Goal 的價值在排除

有一個常見的誤解:目標句是拿來激勵團隊的。

不是。目標句是拿來拒絕事情的。

目標句真正的功能,是讓團隊碰到每一個「順便」的時候,有一個可以指著的判準:這件事有沒有讓目標句更接近成真?沒有,就不屬於這一輪。

這件事瀑布跟敏捷都做,只是載體不同。瀑布把「做什麼、不做什麼」寫進 Scope 定義,凍成 Baseline,估算與驗收全掛在上面,要改就走 Change(Day 02)。敏捷不簽整案,簽一輪:目標句只管這一個回饋週期,下一輪可以重新決定——但在這一輪之內,它說了算(Day 03、Day 04 說過,差別在承諾單位,不在要不要承諾)。

兩邊沒有任何一派的規則叫做「目標就是全部都要」。

而目標句讓一半的想像出局之後,另一半——那些真實存在、遲早要面對的規則——需要一個安放的地方。

那個地方叫 Non-goal。那天白板的右半邊,寫了三條:

Non-goal(這一輪明確不做)
超過 7 天的退款   ——規則存在(要財務簽核),這一輪不碰
已出貨訂單的退款  ——流程不同,這一輪不碰
部分退款          ——這一輪只做全額

至於發票折讓,財務說了一句讓工程師鬆一口氣的話:「這一輪先照人工流程走,我來處理。」也記進了清單尾巴。

對照一下就知道 Non-goal 的價值在哪。這幾條規則在 Day 19 被問出來的時候,工程團隊聽到的是「需求一直加」;同樣的規則寫進 Non-goal、由客服主管與財務點頭之後,它們變成「我們知道、我們同意、先不做」。

第三部其實也沒做簽核流——但那是「不知道有這回事」。這一輪也不做簽核流——這是「知道、同意、擇日再議」。表面上結果一樣,工程上是兩個世界:前者在 Demo 那天爆炸,後者在計畫裡睡覺。

同一件沒做的事,不寫下來叫遺漏,寫下來叫排除。遺漏在最貴的時間點爆炸,排除在約好的時間點回來。


這件事過去是誰做的?

順帶一提:目標句這種東西,第二部的團隊也沒寫過,怎麼以前沒事?

你已經知道答案了。Day 08 那位資深工程師接到「加一個匯入功能」時,能順手問完十件事,是因為他腦中先有一版目標——他知道這功能真正要解決誰的、什麼問題,才推得出哪些該問、哪些不用做。目標句一直都存在,只是住在他腦袋裡,而且不對外發布。

這一輪做的事沒有比較高明:把同一句話從人腦搬到白板上,然後讓真正有權點頭的人點頭。如此而已。


這次到底誰在吸收代價?

第四部第二次檢查。昨天黑的是 Time(兩天買回三週),今天輪到另一格:

Scope       ■   簽核流、已出貨、部分退款被有意識排除——排除是決策,不是損失
Time        □   兩場對話共一小時,目標句一個下午定案
Cost        □
Quality     □   「明確知道成功或失敗」「對得上帳」寫在目標句裡,沒得折
Risk        □   Day 19 問出的隱藏規則,如今條條有名字、有去處
人          □   沒有人需要腦補這一輪要做什麼——它就貼在牆上

還記得 Day 21 結算時 Scope 那格嗎?空的——「一項都沒少做」,然後全數下架報廢。今天這格第一次被勾黑,而且是團隊自己動手勾的,兩位拍板的人在旁邊點頭。

不確定性一定會被吸收。差別只在:由 Scope 在計畫裡吸收,還是由人在上線後吸收。


今日 Artifact|Goal/Non-goal 卡

把那面白板收成今天的 Artifact。開工前填一張:

□ 目標句:這一輪結束時,____(誰)能對____做到____,
   而且____能確認它真的成立
□ Non-goal 1:____這一輪不做,因為____
□ Non-goal 2:____這一輪不做,因為____
□ Non-goal 3:____這一輪不做,因為____
□ 誰同意:以上由____與____點頭(要真的有權點頭的人,見 Day 22)

填目標句的訣竅:主詞是使用者,不是系統;動詞是使用者的動作,不是工程師的動作;句尾要有一個可以被檢查的「成立」。

還有一個警訊要記得:如果一張卡的 Non-goal 三格填不出來,先別急著開工——一個什麼都不排除的目標,跟沒有目標是同一件事。


今日一句

目標句的價值不在它承諾了什麼,而在它替你拒絕了什麼;不會拒絕事情的目標,只是一句口號。

散會前,Goal 與 Non-goal 卡貼上了白板。有人盯著右邊那排越寫越長的「不做」,終於忍不住說出口:

「排掉這麼多……這樣 MVP 會不會太陽春?」

好問題,明天回答它。先講結論:MVP 不是做爛一點。


上一篇
Day 22|不要 Coding:先找出誰真的能決定需求
下一篇
Day 24|MVP 不是做爛一點,是先縮小問題
系列文
你以為自己很敏捷,其實連瀑布都沒做好——30 天從錯誤承諾、大神救火,到沒有大神也跑得動的開發方法27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言