發(fā):從需求拆分到可驗(yàn)收交付的完整實(shí)踐)
1. 切片開(kāi)發(fā)切的是什么先對(duì)齊定義1.1 垂直切片和水平切片別搞混一說(shuō)“切片開(kāi)發(fā)”很多人的第一反應(yīng)是數(shù)據(jù)庫(kù)分片、視頻文件切片或者監(jiān)控?cái)?shù)據(jù)的采樣切片。這些都對(duì)但我要講的“切片開(kāi)發(fā)”指的是軟件交付過(guò)程中的需求切片更準(zhǔn)確地說(shuō)是敏捷迭代里的垂直切片Vertical Slice。這個(gè)詞我在帶迭代和做技術(shù)管理時(shí)反復(fù)提因?yàn)樗鼛缀鯖Q定了一個(gè)團(tuán)隊(duì)能不能穩(wěn)定交付、能不能快速響應(yīng)變化。垂直切片的意思很簡(jiǎn)單每次交付一個(gè)從用戶(hù)操作到系統(tǒng)反饋都完整可運(yùn)行的小功能滿(mǎn)足一個(gè)具體的業(yè)務(wù)場(chǎng)景而不是按“數(shù)據(jù)庫(kù)層—接口層—界面層”這樣水平地切。水平切片也有人說(shuō)成“按技術(shù)層次切”比如第一周做建表第二周做接口第三周做界面最后三天聯(lián)調(diào)。這種切法在PPT上很好講實(shí)際開(kāi)發(fā)中卻是坑人的。為什么垂直切片是“最核心方法”因?yàn)樗苯踊卮鹆塑浖?xiàng)目中兩個(gè)最致命的問(wèn)題這個(gè)功能什么時(shí)候才能給人看和哪些需求可以先不做水平切片會(huì)把所有風(fēng)險(xiǎn)堆到最后那個(gè)“集成階段”而垂直切片把風(fēng)險(xiǎn)分散到每一次交付里。說(shuō)白了垂直切片追求的是“每一切完用戶(hù)和產(chǎn)品都能看到點(diǎn)東西、能點(diǎn)一點(diǎn)、能驗(yàn)收”。1.2 為什么大家習(xí)慣按“層”切以及這個(gè)習(xí)慣從哪來(lái)按層切幾乎是工程師的本能因?yàn)榇a結(jié)構(gòu)本來(lái)就是分層的。我見(jiàn)過(guò)很多團(tuán)隊(duì)需求下來(lái)第一反應(yīng)是“先畫(huà)表結(jié)構(gòu)”“先把DTO定了”“先把接口定義出來(lái)”。這種習(xí)慣不能說(shuō)錯(cuò)它是技術(shù)分解邏輯但它不是交付邏輯。用交付邏輯看研發(fā)唯一標(biāo)準(zhǔn)是這一個(gè)周期結(jié)束時(shí)有沒(méi)有什么東西可以部署到線(xiàn)上讓用戶(hù)用按層切的問(wèn)題在于前幾周產(chǎn)出的表結(jié)構(gòu)、接口都沒(méi)有獨(dú)立價(jià)值用戶(hù)看不到、驗(yàn)證不了只有到聯(lián)調(diào)階段才第一次出現(xiàn)“可運(yùn)行的整體”一旦有問(wèn)題所有模塊一起返工壓力特別大。按層切的另一個(gè)誘因是團(tuán)隊(duì)協(xié)作模式。前端團(tuán)隊(duì)、后端團(tuán)隊(duì)、DBA各自有職責(zé)范圍大家下意識(shí)就把工作按角色劃分了。但垂直切片并不要求所有人同時(shí)圍著一個(gè)切片轉(zhuǎn)而是要求每一個(gè)切片都跨越這些角色一個(gè)需求切片可能涉及一張新表、兩個(gè)接口、一個(gè)頁(yè)面、一個(gè)狀態(tài)流轉(zhuǎn)。它是橫著跨學(xué)科協(xié)作的不是縱著按專(zhuān)業(yè)分的。很多團(tuán)隊(duì)切換不過(guò)來(lái)是因?yàn)榻M織協(xié)作方式?jīng)]跟著變不是方法論不行。1.3 一個(gè)合格的切片要長(zhǎng)成什么樣我自己判斷切片合不合格用四個(gè)問(wèn)題這個(gè)切片交付后用戶(hù)能完成一個(gè)完整的動(dòng)作嗎比如“選一件商品加入購(gòu)物車(chē)并看到合計(jì)金額”。這個(gè)切片能不能獨(dú)立測(cè)試、獨(dú)立部署、獨(dú)立回滾哪怕其他切片還沒(méi)做完。這個(gè)切片有沒(méi)有明確的驗(yàn)收標(biāo)準(zhǔn)驗(yàn)收標(biāo)準(zhǔn)是不是可以被寫(xiě)成自動(dòng)化測(cè)試或手動(dòng)測(cè)試步驟這個(gè)切片切完之后是否讓整個(gè)系統(tǒng)更接近最終目標(biāo)而不是產(chǎn)生需要后續(xù)重構(gòu)的臨時(shí)邏輯如果四個(gè)問(wèn)題里有任何一個(gè)答不上來(lái)切片就是不合格的。很多人把“一個(gè)功能的一個(gè)步驟”叫作切片比如“用戶(hù)能點(diǎn)擊登錄按鈕”——這是界面行為不是完整動(dòng)作。一個(gè)最小切片至少要形成“輸入—處理—輸出”閉環(huán)中間可以有簡(jiǎn)化邏輯但不能是半成品。2. 切片的核心方法與完整策略2.1 切片的前置動(dòng)作先把需求講到“能演示”很多人問(wèn)“怎么切片”其實(shí)第一步不是切是把需求整理成能講清“誰(shuí)、在什么場(chǎng)景下、要做什么、結(jié)果是什么”的一句話(huà)。這句話(huà)是切片的前提也是后續(xù)驗(yàn)收標(biāo)準(zhǔn)的地基。我常用的要求是每次開(kāi)切片會(huì)前產(chǎn)品經(jīng)理至少要把需求描述到“我能閉著眼描述這個(gè)功能給不相關(guān)的人聽(tīng)他能理解用戶(hù)在干什么”的程度。如果需求本身是模糊的切出來(lái)的每個(gè)切片也會(huì)是模糊的。舉個(gè)例子“做一個(gè)訂單管理后臺(tái)”這話(huà)沒(méi)法切因?yàn)楣芾韱T、客服、財(cái)務(wù)看訂單的角度完全不同涉及的操作也完全不同。先把它拆成“客服希望快速檢索訂單并修改地址”“財(cái)務(wù)希望導(dǎo)出特定時(shí)間段的結(jié)算單”切片才有抓手。這一步做扎實(shí)了后面所有切片都是在“用戶(hù)故事/業(yè)務(wù)步驟”上做文章而不是在技術(shù)空想上做文章。我甚至建議產(chǎn)品經(jīng)理把需求寫(xiě)成“用戶(hù)故事補(bǔ)充條件”的格式作為某類(lèi)角色我想要某項(xiàng)能力以便實(shí)現(xiàn)某個(gè)目的。這句話(huà)寫(xiě)完之后下一步才是切片。2.2 五種實(shí)戰(zhàn)切片方法含具體案例第一種按用戶(hù)完整旅程的關(guān)鍵節(jié)點(diǎn)切拿出一張紙把用戶(hù)從進(jìn)入功能到離開(kāi)功能的每一步都寫(xiě)下來(lái)。比如“優(yōu)惠券功能”完整旅程是查看領(lǐng)券入口—領(lǐng)取一張券—在訂單結(jié)算頁(yè)看到可用券—勾選抵扣—支付成功后核銷(xiāo)—過(guò)期前收到提醒。這里每一步都可以形成一個(gè)獨(dú)立切片越靠前入口的越優(yōu)先做因?yàn)橛脩?hù)沒(méi)入口的話(huà)后面的流程都無(wú)法驗(yàn)證。我做過(guò)一個(gè)案例團(tuán)隊(duì)原本的計(jì)劃是把優(yōu)惠券的創(chuàng)建、發(fā)放、核銷(xiāo)、對(duì)賬全做完再上線(xiàn)那是一個(gè)月的工作量。按旅程拆分后第一周只做了“后臺(tái)創(chuàng)建一張固定優(yōu)惠券 用戶(hù)直接在個(gè)人中心看到并領(lǐng)取”第二周再做結(jié)算頁(yè)的抵扣。第一周的東西雖然簡(jiǎn)陋但確實(shí)讓用戶(hù)在真實(shí)環(huán)境里跑通了“領(lǐng)券”動(dòng)作產(chǎn)品驗(yàn)收和運(yùn)營(yíng)推廣可以提前啟動(dòng)。第二種按數(shù)據(jù)字段的從簡(jiǎn)到繁切一個(gè)功能如果有很多字段先只做核心字段再做外圍字段。“用戶(hù)注冊(cè)”是經(jīng)典例子完整注冊(cè)有手機(jī)號(hào)、驗(yàn)證碼、密碼、昵稱(chēng)、頭像、興趣標(biāo)簽、邀請(qǐng)碼。第一刀只做手機(jī)號(hào)驗(yàn)證碼和密碼昵稱(chēng)不填默認(rèn)為“用戶(hù)隨機(jī)數(shù)”頭像不給上傳入口。這樣注冊(cè)流程在上線(xiàn)當(dāng)天就能用。下一個(gè)迭代再加昵稱(chēng)修改再下一個(gè)迭代加頭像上傳。這種切法特別適合表單類(lèi)、配置類(lèi)功能它能保證每次交付都具備可用性同時(shí)數(shù)據(jù)模型還能平滑演進(jìn)。第三種按業(yè)務(wù)規(guī)則分支切業(yè)務(wù)規(guī)則多的時(shí)候按“主干流程 分支流程”來(lái)切。主干流程是用戶(hù)成功率最高的路徑分支是例外和異常情況。以“退款”為例主干是“發(fā)起申請(qǐng)—審核通過(guò)—原路退回—系統(tǒng)通知”分支包括“部分退款”“余額不足導(dǎo)致退款失敗”“已發(fā)貨狀態(tài)下的退款申請(qǐng)”。第一刀只做全額退款不做部分退款因?yàn)槿~退款的金額計(jì)算最簡(jiǎn)單第二刀才做“部分退款 按比例分?jǐn)們?yōu)惠”第三刀再做“退款失敗自動(dòng)重試”。這里有個(gè)容易被忽略的點(diǎn)盡量把異常分支做成獨(dú)立的“小切片”不要讓它們?cè)谥鞲汕衅镆浴斑壿嫹种А钡男问交祀s存在否則主干切片的驗(yàn)收會(huì)變得異常復(fù)雜。第四種按用戶(hù)角色切同一個(gè)模塊如果服務(wù)多個(gè)角色按角色拆是最穩(wěn)的?!绊?xiàng)目看板”這東西項(xiàng)目經(jīng)理要的是進(jìn)度統(tǒng)計(jì)執(zhí)行人要的是自己的任務(wù)清單老板要的是跨項(xiàng)目匯總。這三個(gè)角色的使用場(chǎng)景、頁(yè)面信息密度、操作權(quán)限都不一樣。切片時(shí)不要讓三個(gè)角色共用一個(gè)大而全的頁(yè)面而是一個(gè)角色一個(gè)切片。第一個(gè)切片先做執(zhí)行人視角的任務(wù)清單至少真實(shí)用戶(hù)能用了再逐步給其他角色加視角。這類(lèi)切片還有一個(gè)額外好處權(quán)限模型是隨著角色切片漸次引入的而不是第一個(gè)版本就把完整的RBAC模型做完。第五種按外部系統(tǒng)依賴(lài)的強(qiáng)弱切很多需求離不開(kāi)外部系統(tǒng)支付、短信、第三方登錄、電子簽章。按“可模擬—真對(duì)接—深度打通”三個(gè)階段切是降低風(fēng)險(xiǎn)最有效的做法。第一刀用Mock數(shù)據(jù)或沙箱環(huán)境把完整流程先跑通第二刀接真實(shí)環(huán)境的只讀/基礎(chǔ)能力第三刀再做狀態(tài)回調(diào)、失敗對(duì)賬等深度集成。我見(jiàn)過(guò)太多團(tuán)隊(duì)一開(kāi)始就追求接真實(shí)支付結(jié)果參數(shù)對(duì)不上、回調(diào)不通整個(gè)版本卡了兩個(gè)星期。如果第一刀先用沙箱把“下單—喚起收銀臺(tái)—支付成功回跳—訂單狀態(tài)變?yōu)橐阎Ц丁闭麠l鏈路跑通業(yè)務(wù)方和研發(fā)都能盡早看到真實(shí)交互真實(shí)對(duì)接的風(fēng)險(xiǎn)就被隔離了。2.3 切片顆粒度怎么定三個(gè)硬指標(biāo)顆粒度沒(méi)有標(biāo)準(zhǔn)公式但有三條硬指標(biāo)可以檢查。第一個(gè)指標(biāo)切片時(shí)長(zhǎng)不超過(guò)一個(gè)迭代周期的三分之一。如果團(tuán)隊(duì)迭代是兩周一個(gè)切片最好控制在兩到三天最長(zhǎng)不超過(guò)一周。超過(guò)這個(gè)時(shí)長(zhǎng)說(shuō)明切片太大需要繼續(xù)切。低于半天則可能切得太碎產(chǎn)生大量管理成本。第二個(gè)指標(biāo)每個(gè)切片必須能回答“誰(shuí)在用、用來(lái)干嘛”的問(wèn)題。如果一個(gè)切片只能回答“這里加了三個(gè)表”那它就不是切片是技術(shù)任務(wù)。技術(shù)任務(wù)不是不能排而是不要假裝它是用戶(hù)可感知的需求切片。第三個(gè)指標(biāo)切片之間可以并行但不強(qiáng)依賴(lài)。兩個(gè)切片如果必須按順序做那么它們其實(shí)屬于同一個(gè)更大的切片。我通常用“如果B還沒(méi)做A能不能獨(dú)立上線(xiàn)”來(lái)判斷這兩個(gè)切片的耦合度。到這里就能回答顆粒度問(wèn)題的核心了切片粒度是“價(jià)值”和“技術(shù)風(fēng)險(xiǎn)”博弈的結(jié)果不是按工作量平均分配的。價(jià)值密度高的部分切小點(diǎn)盡早驗(yàn)證技術(shù)風(fēng)險(xiǎn)高的部分也切小點(diǎn)盡早試錯(cuò)純粹的后臺(tái)數(shù)據(jù)遷移或重構(gòu)可以單獨(dú)列技術(shù)切片但一定要標(biāo)注出它對(duì)用戶(hù)價(jià)值的貢獻(xiàn)在哪。3. 實(shí)操手記從需求到切片的完整流程3.1 實(shí)操示例購(gòu)物車(chē)結(jié)算的一刀一刀我用一個(gè)幾乎所有團(tuán)隊(duì)都做過(guò)的需求“購(gòu)物車(chē)結(jié)算”來(lái)演示完整切法。原始需求是這樣一句話(huà)“用戶(hù)在購(gòu)物車(chē)勾選商品點(diǎn)擊結(jié)算完成支付后生成訂單?!弊⒁膺@就是典型的“能看懂但沒(méi)法直接開(kāi)發(fā)”的需求因?yàn)槔锩娌刂\(yùn)費(fèi)計(jì)算、優(yōu)惠、庫(kù)存、支付回調(diào)、訂單狀態(tài)、超時(shí)取消一堆邏輯。拿到這個(gè)需求我做的第一步是列全量業(yè)務(wù)規(guī)則比如只有選中商品才能結(jié)算運(yùn)費(fèi)按地區(qū)模板計(jì)算部分商品不支持優(yōu)惠券庫(kù)存不足要在結(jié)算時(shí)提示支付成功后并發(fā)扣庫(kù)存超時(shí)未支付自動(dòng)取消。列完后我用主干優(yōu)先法切出了下面這幾刀第1切片勾選商品后顯示合計(jì)金額純前端計(jì)算這個(gè)切片只做金額展示不接支付不生成訂單。它的價(jià)值是讓用戶(hù)看到購(gòu)物車(chē)選品反饋?zhàn)屒岸税堰x中態(tài)和金額聯(lián)動(dòng)調(diào)通。第2切片生成草稿訂單后端點(diǎn)擊“去結(jié)算”后后端根據(jù)勾選商品生成訂單算出商品總額訂單狀態(tài)為“待支付”但不喚起任何支付。這個(gè)切片驗(yàn)證了訂單表結(jié)構(gòu)、金額計(jì)算邏輯、購(gòu)物車(chē)到訂單的數(shù)據(jù)轉(zhuǎn)換。第3切片接入支付沙箱并回調(diào)接上支付平臺(tái)的沙箱環(huán)境用戶(hù)點(diǎn)擊支付后跳轉(zhuǎn)支付成功回調(diào)把訂單狀態(tài)改為“已支付”庫(kù)存可以在這一步先不做扣減只記錄支付時(shí)間。第4切片庫(kù)存校驗(yàn)與扣減支付成功后扣庫(kù)存并在結(jié)算前校驗(yàn)庫(kù)存不足的提示。這一步開(kāi)始涉及并發(fā)單獨(dú)一個(gè)切片便于做壓力測(cè)試。第5切片運(yùn)費(fèi)模板與優(yōu)惠疊加這是規(guī)則最復(fù)雜的部分放到最后。因?yàn)榍懊嫠牡兑呀?jīng)把主鏈路走通了運(yùn)費(fèi)和優(yōu)惠屬于“加條件”相對(duì)獨(dú)立。這套切法最關(guān)鍵的點(diǎn)是每一刀都能獨(dú)立驗(yàn)證每一刀上線(xiàn)之后用戶(hù)在大部分情況下都能正常使用。第2切片做完后用戶(hù)可以生成訂單只是支付不了這個(gè)狀態(tài)對(duì)后臺(tái)演示、運(yùn)營(yíng)了解流程已經(jīng)足夠友好。第3切片做完后用戶(hù)能完整走完一筆支付但對(duì)賬報(bào)表和庫(kù)存還不準(zhǔn)團(tuán)隊(duì)知道這些是已知風(fēng)險(xiǎn)。3.2 切片之后的產(chǎn)出物與驗(yàn)收標(biāo)準(zhǔn)一個(gè)切片在進(jìn)入開(kāi)發(fā)前需要準(zhǔn)備好四樣?xùn)|西需求描述、UI原型哪怕手繪、數(shù)據(jù)影響范圍、驗(yàn)收標(biāo)準(zhǔn)。我在團(tuán)隊(duì)里最常強(qiáng)調(diào)的是驗(yàn)收標(biāo)準(zhǔn)而且要求寫(xiě)成“可執(zhí)行的測(cè)試場(chǎng)景”不寫(xiě)“實(shí)現(xiàn)XX功能”這種話(huà)。切片驗(yàn)收標(biāo)準(zhǔn)可執(zhí)行版本第1切片勾選兩個(gè)商品后合計(jì)金額等于兩個(gè)商品價(jià)格之和并展示取消勾選后合計(jì)變少不勾選時(shí)結(jié)算按鈕置灰第2切片點(diǎn)擊結(jié)算生成訂單數(shù)據(jù)庫(kù)中有記錄且狀態(tài)為待支付返回訂單號(hào)訂單金額與前端展示一致第3切片點(diǎn)擊支付跳轉(zhuǎn)沙箱支付成功回調(diào)后訂單狀態(tài)變?yōu)橐阎Ц吨貜?fù)回調(diào)不重復(fù)修改狀態(tài)第4切片庫(kù)存為1、用戶(hù)買(mǎi)2時(shí)提示庫(kù)存不足不可生成訂單支付成功后庫(kù)存扣減1超賣(mài)數(shù)量為0第5切片不同地區(qū)地址展示不同運(yùn)費(fèi)符合滿(mǎn)減條件的訂單自動(dòng)減價(jià)與優(yōu)惠券同時(shí)生效的順序正確這些驗(yàn)收標(biāo)準(zhǔn)既是研發(fā)的自測(cè)清單也是測(cè)試人員的用例來(lái)源還是產(chǎn)品驗(yàn)收時(shí)的打勾清單。寫(xiě)驗(yàn)收標(biāo)準(zhǔn)有一個(gè)心法從用戶(hù)能觀察到的行為出發(fā)描述不要從代碼實(shí)現(xiàn)出發(fā)描述。比如“狀態(tài)變?yōu)榇Ц丁北取安迦胗唵伪韘tate字段置為0”更容易對(duì)齊各方認(rèn)知技術(shù)細(xì)節(jié)留在研發(fā)自測(cè)里。3.3 在迭代計(jì)劃里怎么排切片切片排進(jìn)迭代還要注意順序背后的邏輯。我用的原則是“先通后優(yōu)、先驗(yàn)證后完善”第一個(gè)切片一定要是最能驗(yàn)證整體方案可行性的通常是主鏈路的打通哪怕界面丑、邏輯簡(jiǎn)陋第二個(gè)切片補(bǔ)上最常用的異常分支第三個(gè)才開(kāi)始做錦上添花的部分。永遠(yuǎn)不要第一個(gè)迭代就去做報(bào)表導(dǎo)出、數(shù)據(jù)大屏這種邊緣功能等核心鏈路跑通再上不遲。另外切片之間還有一個(gè)容易忽略的點(diǎn)——依賴(lài)順序要與團(tuán)隊(duì)能力匹配。如果前端資源緊張第1切片這種純前端任務(wù)可能要延后讓后端先做第2切片如果后端資源緊張第1切片可以先上。不要為了保證“用戶(hù)旅程的完整性”而強(qiáng)行保持切片順序迭代節(jié)奏和資源約束同樣重要。4. AI能幫你切片嗎邊界與配合方式4.1 現(xiàn)在的大模型能做到什么程度回到項(xiàng)目標(biāo)題里那個(gè)問(wèn)題“是人工切片還是AI切片”我直接用實(shí)測(cè)結(jié)論回答AI可以參與切片而且是個(gè)不錯(cuò)的助手但真正拍板的一定是人。我在實(shí)際項(xiàng)目里試過(guò)用大模型切需求。把一段產(chǎn)品需求丟給它問(wèn)“請(qǐng)幫我拆成最小可交付的垂直切片并給出每個(gè)切片的驗(yàn)收標(biāo)準(zhǔn)”它在以下方面表現(xiàn)確實(shí)不錯(cuò)需求描述比較清晰時(shí)能快速列出功能點(diǎn)清單能基于常識(shí)識(shí)別出一些業(yè)務(wù)分支比如注冊(cè)流程需要手機(jī)號(hào)校驗(yàn)、密碼強(qiáng)度限制能生成看起來(lái)像模像樣的驗(yàn)收標(biāo)準(zhǔn)能把模糊的大需求拆成更多小句子提供拆分的候選思路。對(duì)于從未接觸過(guò)該業(yè)務(wù)的人來(lái)說(shuō)AI的輸出作為“初稿參考”完全合格。但AI的問(wèn)題也很明顯。它不知道你們系統(tǒng)的現(xiàn)狀不知道哪些表已經(jīng)存在、哪些接口已經(jīng)能復(fù)用、哪些第三方的聯(lián)調(diào)成本很高。它不清楚團(tuán)隊(duì)的技術(shù)能力邊界一個(gè)切片在A團(tuán)隊(duì)可能兩天做完在B團(tuán)隊(duì)可能兩周做完。它對(duì)業(yè)務(wù)價(jià)值的判斷是局部的它會(huì)關(guān)注功能完整性但不會(huì)主動(dòng)思考“這個(gè)切片對(duì)業(yè)務(wù)策略、用戶(hù)留存、后續(xù)運(yùn)營(yíng)意味著什么”。最關(guān)鍵的一點(diǎn)是它容易把“邏輯上的拆分”當(dāng)成“交付上的切片”結(jié)果切出來(lái)的東西是一個(gè)個(gè)相互交織的模塊而不是可以獨(dú)立上線(xiàn)的閉環(huán)。4.2 我日常用的AI輔助切片提示詞我不會(huì)直接讓AI替我切而是用它做**“信息擴(kuò)充 候選方案生成”**然后我再人工畫(huà)邊界。我常用的提示詞是這樣的你是一個(gè)資深敏捷教練。下面是我的一條產(chǎn)品需求。請(qǐng)完成三件事第一列出這個(gè)需求涉及到的全部用戶(hù)操作步驟第二識(shí)別其中的主干流程、異常分支、復(fù)雜規(guī)則第三按“每個(gè)部分都讓用戶(hù)獲得一個(gè)可感知結(jié)果”的原則給出3到5個(gè)候選切片方案。最后對(duì)每個(gè)候選切片說(shuō)明它的獨(dú)立價(jià)值、潛在風(fēng)險(xiǎn)和被拆分的理由。用這套提示詞得到的結(jié)果通常比我直接問(wèn)“怎么切”要靠譜得多。原因是它引導(dǎo)AI先做“場(chǎng)景拆解”再做“切片建議”而不是讓它一上來(lái)就生成結(jié)構(gòu)。得到AI的候選方案后我會(huì)把它當(dāng)成一個(gè)“急于表現(xiàn)的初級(jí)產(chǎn)品經(jīng)理”的輸出逐條和團(tuán)隊(duì)過(guò)哪些切片在技術(shù)上沒(méi)法獨(dú)立部署哪些切片的驗(yàn)證成本太高哪些可以合并哪些因?yàn)橐蕾?lài)一個(gè)還沒(méi)約定的接口而必須重排這個(gè)過(guò)程里人做的事情是對(duì)齊現(xiàn)實(shí)約束AI做的事情是提供結(jié)構(gòu)化信息。4.3 為什么最終“拍板”還是要以人為主我把切片的決策權(quán)始終保留在人工一側(cè)原因有三個(gè)。第一切片不僅是任務(wù)劃分還是產(chǎn)品優(yōu)先級(jí)判斷。哪一部分先讓用戶(hù)看到這通常涉及業(yè)務(wù)策略和運(yùn)營(yíng)節(jié)奏AI理解不了。比如一個(gè)商城系統(tǒng)先做購(gòu)物車(chē)還是先做收藏夾取決于當(dāng)前業(yè)務(wù)重點(diǎn)是轉(zhuǎn)化率還是用戶(hù)留存這些背景只有懂業(yè)務(wù)的人知道。第二切片必須考慮現(xiàn)有系統(tǒng)的技術(shù)債。AI不知道你的訂單表已經(jīng)有三個(gè)狀態(tài)字段不可更改不知道公司統(tǒng)一登錄SDK二月份才升級(jí)過(guò)不知道某個(gè)老系統(tǒng)的接口調(diào)用成功率只有90%。一旦進(jìn)入這些約束的討論AI的結(jié)構(gòu)化能力就不夠用了需要靠人來(lái)協(xié)調(diào)。第三切片背后是團(tuán)隊(duì)的協(xié)作承諾。把一個(gè)切片分配下去意味著相關(guān)職能的人要在同一時(shí)間段投入這是組織和資源決策不是文本分析能替代的。AI可以輸出完美的切片方案但如果團(tuán)隊(duì)現(xiàn)有的后端力量都在忙另一個(gè)項(xiàng)目方案就執(zhí)行不了。所以我的最終答案很明確這個(gè)“切”的動(dòng)作人來(lái)做主AI來(lái)查漏和提速。項(xiàng)目標(biāo)題問(wèn)“是人來(lái)切片還是用AI來(lái)切片”我給的答案是“人機(jī)協(xié)作人做最終決策”。成熟的團(tuán)隊(duì)可以把AI當(dāng)“先遣偵察兵”用它先掃一遍需求產(chǎn)生候選人再基于現(xiàn)實(shí)情報(bào)劃定最終邊界效率比純粹人工從零開(kāi)會(huì)高不少。5. 常見(jiàn)問(wèn)題與避坑指南5.1 問(wèn)題一切太細(xì)交付碎片化切片切得越細(xì)每個(gè)切片的獨(dú)立價(jià)值就越低這是很多團(tuán)隊(duì)從“切不細(xì)”掉進(jìn)“切太碎”的典型軌跡。切太細(xì)的表現(xiàn)是每個(gè)切片只含有一兩個(gè)前端控件或一兩個(gè)接口研發(fā)半天完成但產(chǎn)品驗(yàn)收時(shí)要反復(fù)看“這個(gè)碎片和另一個(gè)碎片之間連不上”測(cè)試人員也難以下手。更麻煩的是切片之間往往存在隱式的數(shù)據(jù)依賴(lài)比如第3切片假設(shè)第2切片已經(jīng)把某個(gè)狀態(tài)字段寫(xiě)好了一旦第2切片延期第3切片連開(kāi)發(fā)都無(wú)法開(kāi)始。應(yīng)對(duì)辦法是回到我在2.3節(jié)提的硬指標(biāo)切片必須能回答“用戶(hù)能完成一個(gè)什么閉環(huán)動(dòng)作”。如果只差一個(gè)“去重校驗(yàn)”就能讓切片閉環(huán)那就把它并進(jìn)來(lái)一起做不要為了追求體積小而強(qiáng)行切開(kāi)。另外我建議每個(gè)切片排期不少于一天杜絕半天級(jí)切片累積大量管理開(kāi)銷(xiāo)。5.2 問(wèn)題二切太粗集成地獄其實(shí)沒(méi)躲掉有些團(tuán)隊(duì)名義上做垂直切片實(shí)際上還是把一個(gè)完整功能當(dāng)成一個(gè)切片里面塞了三張表、五個(gè)接口、兩個(gè)頁(yè)面、一次第三方對(duì)接美其名曰“一個(gè)用戶(hù)故事”。這種情況下切片時(shí)長(zhǎng)往往會(huì)超過(guò)一周研發(fā)一半時(shí)間在寫(xiě)代碼一半時(shí)間在等待其他模塊的聯(lián)調(diào)產(chǎn)品想提前驗(yàn)收也找不到入口其實(shí)又回到了水平切片的集成地獄。我的判斷標(biāo)準(zhǔn)是如果切片過(guò)程中出現(xiàn)“這個(gè)接口要等XX完成后才能聯(lián)調(diào)”“這個(gè)頁(yè)面依賴(lài)XX團(tuán)隊(duì)的新接口”就說(shuō)明需要繼續(xù)下切。這時(shí)候不是把任務(wù)拆小而是把外部依賴(lài)隔離出來(lái)用Mock或者預(yù)定義契約先推進(jìn)讓主鏈路保持可運(yùn)行。5.3 問(wèn)題三驗(yàn)收標(biāo)準(zhǔn)寫(xiě)成“待辦任務(wù)”而不是“可測(cè)試場(chǎng)景”這個(gè)問(wèn)題常見(jiàn)得讓人驚訝。很多團(tuán)隊(duì)寫(xiě)的驗(yàn)收標(biāo)準(zhǔn)是“完成訂單列表功能”“實(shí)現(xiàn)優(yōu)惠金額計(jì)算”這種描述既不可測(cè)試也無(wú)法約束開(kāi)發(fā)邊界驗(yàn)收時(shí)全靠雙方自由裁量。我要求團(tuán)隊(duì)把驗(yàn)收標(biāo)準(zhǔn)全部改成“當(dāng)……時(shí)系統(tǒng)應(yīng)該……”的行為句式并明確列出可觀察的輸入和輸出。比如“當(dāng)未登錄用戶(hù)訪(fǎng)問(wèn)結(jié)算頁(yè)時(shí)跳轉(zhuǎn)登錄頁(yè)并在登錄后返回原結(jié)算頁(yè)”這句話(huà)任何人都能驗(yàn)收開(kāi)發(fā)也知道寫(xiě)完是什么樣。寫(xiě)驗(yàn)收標(biāo)準(zhǔn)還有一個(gè)技巧每個(gè)切片至少寫(xiě)一條異常場(chǎng)景。通常大家會(huì)先寫(xiě)正常路徑異常路徑容易被忽略這導(dǎo)致開(kāi)發(fā)做完正常路徑后測(cè)試才開(kāi)始發(fā)現(xiàn)異常分支完全沒(méi)實(shí)現(xiàn)。提前寫(xiě)出來(lái)等于提前把邊界條件暴露給研發(fā)測(cè)試階段少一輪來(lái)回。5.4 問(wèn)題四把“切分”當(dāng)“排序”以為只是在排優(yōu)先級(jí)切片和優(yōu)先級(jí)排序是兩件事但很容易混在一起。切片解決的是“一個(gè)需求如何分解交付”排序解決的是“這些交付物哪個(gè)先做”。有些團(tuán)隊(duì)開(kāi)會(huì)時(shí)只討論“先做什么后做什么”根本不做結(jié)構(gòu)拆解結(jié)果是優(yōu)先做完的“優(yōu)先級(jí)高的部分”本身還是一個(gè)無(wú)法獨(dú)立交付的大模塊。正確動(dòng)作是先做切片再對(duì)切片排序排序依據(jù)是依賴(lài)關(guān)系、風(fēng)險(xiǎn)、業(yè)務(wù)緊急度三者的加權(quán)。6. 關(guān)于切片我最后想說(shuō)的幾句實(shí)在話(huà)做了這么多年交付我越來(lái)越覺(jué)得切片開(kāi)發(fā)真正難的不是技術(shù)而是克制??酥谱 耙淮涡园阉羞壿嬜鐾辍钡臎_動(dòng)克制住“按自己專(zhuān)業(yè)領(lǐng)域舒服地切”的沖動(dòng)克制住“把重構(gòu)和技術(shù)優(yōu)化都塞進(jìn)同一個(gè)切片”的沖動(dòng)??酥频幕貓?bào)就是每?jī)芍苣愣寄苣玫贸鲆粋€(gè)看得見(jiàn)摸得著的東西每個(gè)迭代結(jié)束時(shí)團(tuán)隊(duì)都知道自己做了什么產(chǎn)品經(jīng)理能向老板演示的不再是PPT而是真實(shí)功能。如果讓我給團(tuán)隊(duì)定幾條紀(jì)律第一條是“任何切片都必須打通主鏈路再做優(yōu)化”第二條是“驗(yàn)收標(biāo)準(zhǔn)先寫(xiě)異常場(chǎng)景再寫(xiě)正常場(chǎng)景”第三條是“AI可以幫你做初稿但每個(gè)切片的邊界人要有能力解釋為什么這樣切”。這三條拿著就能用至于切片切出來(lái)的東西到底好不好只有一個(gè)檢驗(yàn)方式——把它上線(xiàn)然后看用戶(hù)是否買(mǎi)賬。