一家大型跨國企業(yè)收購了另一家大型企業(yè)的的關(guān)鍵業(yè)務(wù)軟件系統(tǒng),并決定用半年時間在上面進(jìn)行定制開發(fā)狈醉,來適應(yīng)新的需求喝峦。這個收購貌似讓前者能快速開展新業(yè)務(wù),但對于其開發(fā)團(tuán)隊來說剑梳,這不亞于是一場噩夢的開始:沒有一位開發(fā)人員能夠說清這個由多個團(tuán)隊合作開發(fā)的龐大系統(tǒng)從頭到尾的業(yè)務(wù)全貌唆貌。在沒有人能說得清業(yè)務(wù)需求的情況下,開發(fā)團(tuán)隊如何進(jìn)行開發(fā)阻荒?
作為輔導(dǎo)這些企業(yè)進(jìn)行敏捷和DevOps轉(zhuǎn)型的咨詢師挠锥,這幾年來我一直在思考這個問題,期間做了一些努力來嘗試回答侨赡,但成效總是有點差強人意蓖租。直到2017年12月8日我在“領(lǐng)域驅(qū)動設(shè)計中國峰會2017”大會參加了Event Storming 之父 Alberto Brandolini授課的一天“事件風(fēng)暴工作坊”上午的“探索業(yè)務(wù)全景”(Big Picture Exploration)環(huán)節(jié)之后,才讓我有信心解決這個難題羊壹。
工作坊上午的“探索業(yè)務(wù)全景”環(huán)節(jié)蓖宦,能讓說不清遺留系統(tǒng)需求的開發(fā)團(tuán)隊很快了解業(yè)務(wù)需求。適合新團(tuán)隊接手遺留系統(tǒng)油猫、團(tuán)隊有大量新成員加入稠茂、業(yè)務(wù)發(fā)生很大變化等場景。以下是實施步驟:
準(zhǔn)備物料
準(zhǔn)備各種顏色和尺寸的報事貼(詳見下文),給工作坊參加者每人一支Sharpie記號筆睬关∮盏#可以準(zhǔn)備長長的一大卷白色畫卷紙貼在墻上,在上面貼報事貼电爹,以便方便地搬運報事貼蔫仙。邀請包含領(lǐng)域?qū)<以趦?nèi)的團(tuán)隊所有成員參加
團(tuán)隊所有成員包括業(yè)務(wù)、開發(fā)丐箩、測試摇邦、運維等各個角色,其中“知道答案”的領(lǐng)域?qū)<沂潜夭豢缮俚氖嚎薄O挛牡墓ぷ鞣粚嵗且剿鰾randolini的培訓(xùn)機構(gòu)銷售培訓(xùn)課程的業(yè)務(wù)施籍。-
貼領(lǐng)域事件(Domain Event, 橙色)
請領(lǐng)域?qū)<屹N第一張他/她最關(guān)心的領(lǐng)域事件。在報事貼上用類似”票已售出“的句式來寫領(lǐng)域事件概漱。然后大家同時分頭各自寫這個事件之前和之后發(fā)生的其他事件丑慎,并按發(fā)生的事件順序從左到右排序。
-
貼熱點信息(Hot spot, 深粉)
如果發(fā)現(xiàn)某些事件在業(yè)務(wù)上需要額外注意犀概,比如需要花大量時間培養(yǎng)新入行的培訓(xùn)師立哑,那么就可以在“已與新入行的培訓(xùn)師聯(lián)系”事件邊上貼一個粉紅的報事貼,上寫”要花時間“姻灶。
-
貼業(yè)務(wù)子域邊界(Boundary, 黃色膠帶)
等大部分領(lǐng)域事件貼完后铛绰,就在其中一些關(guān)鍵時點,用黃色膠條來分割子域邊界产喉。比如在“培訓(xùn)課程已發(fā)布“右邊貼一個黃色膠條捂掰,在“培訓(xùn)課程已交付”的右側(cè)再貼一個黃色膠條。這樣兩個膠條就劃分了3個業(yè)務(wù)子域——培訓(xùn)課程準(zhǔn)備子域曾沈、培訓(xùn)課程售票與交付子域这嚣、培訓(xùn)課程售后子域。
-
貼核心業(yè)務(wù)子域(Subdomain, 藍(lán)色)
識別橙色領(lǐng)域事件流中屬于同一核心業(yè)務(wù)范疇的相鄰的事件塞俱,并在它們的邊上貼一個藍(lán)色報事貼姐帚,寫上核心業(yè)務(wù)子域的名字,比如“開具發(fā)票”障涯。注意罐旗,此時不要移動橙色的領(lǐng)域事件。如果同樣的核心業(yè)務(wù)子域出現(xiàn)在事件流的兩個不同時點唯蝶,那么就寫兩個相同的藍(lán)色報事貼各自貼到相應(yīng)位置九秀。
-
貼參與領(lǐng)域事件的人(People, 黃色小報事貼)
在橙色的領(lǐng)域事件邊上用黃色報事貼,貼參與該事件的人粘我,上面可以寫這個人的姓名或角色鼓蜒,比如約見新入行培訓(xùn)師的培訓(xùn)機構(gòu)老板Alberto。
-
貼外部系統(tǒng)(External System, 淺粉)
在相應(yīng)的領(lǐng)域事件邊上,用淺粉報事貼都弹,貼這些事件所依賴的外部系統(tǒng)娇豫。比如發(fā)布培訓(xùn)課程所需要的Eventbrite網(wǎng)站。
-
貼新的價值或商業(yè)機會(Opportunity, 淺綠)
在相應(yīng)的領(lǐng)域事件邊上畅厢,用淺綠報事貼锤躁,貼此處可能存在的商業(yè)機會。比如在“培訓(xùn)證書已打印”邊上或详,貼一個制作“電子證書”這樣一個新商業(yè)機會。
-
投票評選業(yè)務(wù)瓶頸(Bottleneck, 畫有箭頭的藍(lán)色豎條報事貼)
每人一票郭计,在你認(rèn)為當(dāng)前在業(yè)務(wù)上表現(xiàn)很糟糕或很有爭議的地方上貼一個畫有箭頭的藍(lán)色豎條報事貼霸琴。比如在“培訓(xùn)課程描述不抓眼球”邊上貼箭頭。那些獲得最多箭頭的瓶頸昭伸,就是今后開發(fā)工作的重點梧乘。因為根據(jù)約束理論,只有突破了這些最大的瓶頸庐杨,才能獲得全局優(yōu)化选调。
說不清遺留系統(tǒng)需求的開發(fā)團(tuán)隊,就好比說不清使命的軍隊一樣灵份,無法高效行動仁堪。要想在新團(tuán)隊接手遺留系統(tǒng)、團(tuán)隊有大量新成員加入填渠、業(yè)務(wù)發(fā)生很大變化等場景下弦聂,讓不熟悉業(yè)務(wù)的團(tuán)隊成員快速了解需求,可以召集包括領(lǐng)域?qū)<曳帐病I(yè)務(wù)莺葫、開發(fā)、測試枪眉、運維在內(nèi)的團(tuán)隊所有成員參加一個“探索業(yè)務(wù)全景”的工作坊捺檬,用每個人貼報事貼的形式來討論和梳理現(xiàn)有的業(yè)務(wù),最終讓團(tuán)隊了解需求贸铜,達(dá)成共識堡纬,以便維護(hù)實現(xiàn)這些需求的遺留代碼。另外還能識別當(dāng)前系統(tǒng)的業(yè)務(wù)瓶頸萨脑,確定下一步開發(fā)工作的重點隐轩。
步驟如下:
- 準(zhǔn)備物料
- 邀請包含領(lǐng)域?qū)<以趦?nèi)的團(tuán)隊所有成員參加
- 貼領(lǐng)域事件(橙色)
- 貼警告信息(深粉)
- 貼業(yè)務(wù)子域邊界(黃色膠帶)
- 貼核心業(yè)務(wù)子域(藍(lán)色)
- 貼參與領(lǐng)域事件的人(黃色小報事貼)
- 貼外部系統(tǒng)(淺粉)
- 貼新的價值或商業(yè)機會(淺綠)
- 投票評選業(yè)務(wù)瓶頸(畫有箭頭的藍(lán)色豎條報事貼)
事件風(fēng)暴之父工作坊下午的“軟件開發(fā)設(shè)計”環(huán)節(jié),可以讓開發(fā)團(tuán)隊了解系統(tǒng)應(yīng)該具備的領(lǐng)域模型及其交互關(guān)系渤早,為編寫單元測試進(jìn)而驅(qū)動重構(gòu)提供指導(dǎo)职车。下一篇博客將會對此進(jìn)行討論。敬請關(guān)注。