如何定義開發完成?(Definition of Done)

最近在拜讀曄的10x程序員工做法,收益良多,文中提出一個概念叫DoD(Definition of Done)給個人感觸頗深。這讓我聯想到實際工做過程當中,常常遇到的扯皮、爭吵等各類場景,其實就和這個DoD分不開。程序員

1、場景描述

  鄭曄在文中描述了這樣一種現象,相信有開發經歷的人多少有同感:單元測試

老張:這有一個任務須要完成,你看一下。
小李:這個不難,兩天就能作完,兩天之後就能上線。

  兩天之後,老張又來到小李的身邊驗收工做:測試

老張:怎麼樣,作完了嗎?今天能上線嗎?
小李:個人代碼寫完了。
老張:測試人員測過了嗎?
小李:尚未。
老張:那今天能測完嗎?
小李:那我就不知道了。
老張:什麼?我但是答應了業務的人,今天必定要上線的!

  兩天之後,老張又來檢查工做。編碼

老張:這個功能開發完了嗎?
小李:寫完了,你看我給你演示一下。

  小李熟練地演示了這個新寫好的功能,此次老張很滿意:spa

老張:作得不錯。單元測試都寫了吧?
小李:啊?還要寫單元測試嗎?
老張:要不爲啥給你兩天的時間?

  很明顯,老張有些憤怒,貌似總在挑刺,而小李也沒有偷懶、有些委屈。因而,老張、小李和測試人員一塊兒度過了一個不眠之夜。設計

2、理解的代溝

  根據上面的場景,我畫了兩幅小李和老張的思考圖,看下二者的代溝在哪兒,以下圖所示。代碼規範

  很顯然二者對完成的定義各不相同。對開發人員小李來講,完成容易理解爲編碼完成;而不去考慮代碼測試和線上測試;對技術主管老張來講,完成的理解可能會更多一些,包括編碼,測試,代碼規範,審查,上線等等,有些老張腦子裏的東西更多,好比下圖所示:對象

  爲何會有上面的差別?從立場來看,小李彙報的對象只有老張,而老張要協做的對象可能有產品經理、老闆、總監、小李們。小李是從我的層面,關注的是一個點,老張是從團隊層面,關注的是一個面。blog

  各自定義差可能反應了一個信號,就是團隊成員總體上缺少職業素養,那麼這個團隊就危險了。從小李的角度不管怎麼努力,都不可能知足老張的需求,從老張的角度總以爲小李偷懶,致使團隊之間總是摩擦、挑刺,最後小李乾的不爽了,老張也以爲小李孺子不可教,最後事沒有作好,人跑了。接口

  接下來就要回到做者提出的DoD概念(完成的定義),從這個概念的名字便不難看出,它就是爲了解決軟件開發中常見的「完成」問題而生的。

3、完成的定義

  這裏的DoD在鄭曄看來包含三個層次的含義:

  • DoD 是一個清單,清單是由一個個的檢查項組成的。
  • DoD 的檢查項應該是實際可檢查的。
  • DoD 是團隊成員間彼此彙報的一種機制。

  藉助這三個含義,我模擬登陸功能列了表格:

 

  以上是站在測試用例的角度來寫,一個簡單的登陸就能夠包含18個開發功能點,作好登陸並無那麼簡單,這也就難怪小李和老張老是意見不一致。若是攤開這份清單用來驗收登陸功能的完整性,我相信小李和老張彼此都不會有什麼意見。

  可是這裏有一個問題,就是老張根本不會去作這份清單!小李也沒有這種意識,那誰來擬定?也許你會說引入中間層,就是測試人員來擬定,假設大家團隊沒有測試人員呢?

  事情老是沒有表面看起來的那麼簡單。這裏再設計一份簡化的驗收清單

 

  如此簡化的功能也能多少避免小李和老張的鴻溝了吧?那麼又回到前面的問題,誰來製做這份清單?

  我我的的意見是小李來作,由於小李的勢能沒有老張高,那就多增長本身的動能了,顯示本身作事的能力,同時也作一個同事眼中的好夥伴,領導眼中的好同事。等小李變成老李了,遇到小張也是小張來作這事。

4、DoD是一種思惟方式

  鄭曄在最後又補充道:

至此,咱們只是從軟件開發團隊內部協做的角度來談 DoD。但實際上,它不只侷限在團隊內部協做上,若是你能夠放開思路,會發現 DoD 的思惟在工做中用途很是普遍。好比,當咱們須要和其餘團隊合做開發一個接口時,咱們都知道第一步就是要把接口定義下來。

  這裏的DoD看起來很完美,定義了驗收清單,羅列了一系列驗收項目,並固化成文檔。可是,過程當中有幾個焦油坑須要去思考:

  • 如何才能符合「可驗收」?
  • 彼此都沒法想到的風險如何管理?

  也許這須要團隊的磨合了,從老張角度若是這事不會死人,其實沒有必要去咄咄逼人,大不了後續進行迭代改進,不然逼得緊其實只會引發反彈,養成小李習慣性的逃避責任,造成團隊推卸責任的文化就得不償失了。

  當咱們有了DoD的思惟方式,後面的事情也許會變得簡單不少,鄭曄舉了個小例子讓人折服:

1.常常會有人過來,讓我幫忙作些事。運用 DoD 的思惟,我首先會問他我具體要作哪些事,確認好細節(至關於定義好「檢查項」),而後我就知道,這個忙我能幫到什麼程度。
2.我請別人幫忙的時候,也會很清楚告訴他,哪些事是須要他作的,儘可能減小沒必要要的誤解。

5、總結

  人與人的協做,總會存在理解上的誤差,如何去解決信息不一樣步的問題呢?DoD是一種最佳實踐,它是包含了檢查項的驗收清單,而如何作到「可檢查」須要雙方重點溝通。DoD從大了看是一種思惟模式,是一種儘量消除不肯定性,達成共識的方式。

借用鄭曄的一句話:「若是今天的內容你只能記住一件事,那請記住:在作任何事以前,先定義完成的標準。」

相關文章
相關標籤/搜索