最近在拜讀鄭曄的10x程式員工作法,收益良多,文中提出一個概念叫DoD(Definition of Done)給我的感觸頗深。這讓我聯想到實際工作過程中,經常遇到的扯皮、爭吵等各種場景,其實就和這個DoD分不開。
一、場景描述
鄭曄在文中描述了這樣一種現象,相信有開發經歷的人多少有同感:
老張:這有一個任務需要完成,你看一下。
小李:這個不難,兩天就能做完,兩天以後就能上線。
兩天以後,老張又來到小李的身邊驗收工作:
老張:怎麼樣,做完了嗎?今天能上線嗎?
小李:我的程式碼寫完了。
老張:測試人員測過了嗎?
小李:還沒有。
老張:那今天能測完嗎?
小李:那我就不知道了。
老張:什麼?我可是答應了業務的人,今天一定要上線的!
兩天以後,老張又來檢查工作。
老張:這個功能開發完了嗎?
小李:寫完了,你看我給你演示一下。
小李熟練地演示了這個新寫好的功能,這次老張很滿意:
老張:做得不錯。單元測試都寫了吧?
小李:啊?還要寫單元測試嗎?
老張:要不為啥給你兩天的時間?
很明顯,老張有些憤怒,貌似總在挑刺,而小李也沒有偷懶、有些委屈。於是,老張、小李和測試人員一起度過了一個不眠之夜。
二、理解的代溝
根據上面的場景,我畫了兩幅小李和老張的思考圖,看下兩者的代溝在哪兒,如下圖所示。
很顯然兩者對完成的定義各不相同。對開發人員小李來說,完成容易理解為編碼完成;而不去考慮程式碼測試和線上測試;對技術主管老張來說,完成的理解可能會更多一些,包括編碼,測試,程式碼規範,審查,上線等等,有些老張腦子裡的東西更多,比如下圖所示:
為什麼會有上面的差異?從立場來看,小李彙報的物件只有老張,而老張要協作的物件可能有產品經理、老闆、總監、小李們。小李是從個人層面,關註的是一個點,老張是從團隊層面,關註的是一個面。
各自定義差可能反應了一個訊號,就是團隊成員整體上缺乏職業素養,那麼這個團隊就危險了。從小李的角度無論怎麼努力,都不可能滿足老張的需求,從老張的角度總覺得小李偷懶,導致團隊之間老是摩擦、挑刺,最後小李乾的不爽了,老張也覺得小李孺子不可教,最後事沒有做好,人跑了。
接下來就要回到作者提出的DoD概念(完成的定義),從這個概念的名字便不難看出,它就是為瞭解決軟體開發中常見的“完成”問題而生的。
三、完成的定義
這裡的DoD在鄭曄看來包含三個層次的含義:
- DoD 是一個清單,清單是由一個個的檢查項組成的。
- DoD 的檢查項應該是實際可檢查的。
- DoD 是團隊成員間彼此彙報的一種機制。
藉助這三個含義,我模擬登入功能列了表格:
以上是站在測試用例的角度來寫,一個簡單的登入就可以包含18個開發功能點,做好登入並沒有那麼簡單,這也就難怪小李和老張總是意見不一致。如果攤開這份清單用來驗收登入功能的完整性,我相信小李和老張彼此都不會有什麼意見。
但是這裡有一個問題,就是老張根本不會去做這份清單!小李也沒有這種意識,那誰來擬定?也許你會說引入中間層,就是測試人員來擬定,假設你們團隊沒有測試人員呢?
事情總是沒有錶面看起來的那麼簡單。這裡再設計一份簡化的驗收清單
如此簡化的功能也能多少避免小李和老張的鴻溝了吧?那麼又回到前面的問題,誰來製作這份清單?
我個人的意見是小李來做,因為小李的勢能沒有老張高,那就多增加自己的動能了,顯示自己做事的能力,同時也做一個同事眼中的好夥伴,領導眼中的好同事。等小李變成老李了,遇到小張也是小張來做這事。
四、DoD是一種思維方式
鄭曄在最後又補充道:
至此,我們只是從軟體開發團隊內部協作的角度來談 DoD。但實際上,它不僅侷限在團隊內部協作上,如果你可以放開思路,會發現 DoD 的思維在工作中用途非常廣泛。比如,當我們需要和其他團隊合作開發一個介面時,我們都知道第一步就是要把介面定義下來。
這裡的DoD看起來很完美,定義了驗收清單,羅列了一系列驗收專案,並固化成檔案。但是,過程中有幾個焦油坑需要去思考:
- 如何才能符合“可驗收”?
- 彼此都無法想到的風險如何管理?
也許這需要團隊的磨合了,從老張角度如果這事不會死人,其實沒有必要去咄咄逼人,大不了後續進行迭代改進,否則逼得緊其實只會引起反彈,養成小李習慣性的逃避責任,形成團隊推卸責任的文化就得不償失了。
當我們有了DoD的思維方式,後面的事情也許會變得簡單很多,鄭曄舉了個小例子讓人折服:
1.經常會有人過來,讓我幫忙做些事。運用 DoD 的思維,我首先會問他我具體要做哪些事,確認好細節(相當於定義好“檢查項”),然後我就知道,這個忙我能幫到什麼程度。
2.我請別人幫忙的時候,也會很清楚告訴他,哪些事是需要他做的,儘量減少不必要的誤解。
五、總結
人與人的協作,總會存在理解上的偏差,如何去解決資訊不同步的問題呢?DoD是一種最佳實踐,它是包含了檢查項的驗收清單,而如何做到“可檢查”需要雙方重點溝通。DoD從大了看是一種思維樣式,是一種盡可能消除不確定性,達成共識的方式。
借用鄭曄的一句話:“如果今天的內容你只能記住一件事,那請記住:在做任何事之前,先定義完成的標準。”
原文地址:https://www.cnblogs.com/jackyfei/p/10244806.html