l

2014年9月2日 星期二

誰失敗?

Sep. 10 08:15~10:30

image

 

昨天的〈不是Scrum也不是Kanban的問題,是Story有待加強〉這一篇,才剛「上架」沒多久就有一位鄉民留言:

匿名 2014年9月1日 上午12:36

這跟邪教有什麼不一樣
宗教本身都不會失敗,失敗的都是人? 那還要宗教幹什麼?
什麼時候scrum/kanban成為方法論的唯一真理了?
容不下其他看法的看法本身就是失敗的。Teddy你已經不是個稱職的trainer了。

這位鄉民讀完〈不是Scrum也不是Kanban的問題,是Story有待加強〉之後得到的結論是「邪教」、「scrum/kanban成為方法論的唯一真理、容不下其他看法的看法本身就是失敗、Teddy不是個稱職的trainer」,看來這個案件其中必定有很大的冤情,應該要「發回重審」

在上一篇文章中Teddy談的是很多軟體從業人員引進方法(不管是流程而好,實務做法也罷),但卻沒有考慮到方法本身適用的情境(context),以及實施方法的個人或單位是否有落實方法的規範,最後導致實施結果不如預期。這樣的下場,是方法失敗,還是實施方法的人或組織失敗?Teddy的看法是後者。

對於Teddy在文章中提到的看法,要擴大解釋為:「scrum/kanban成為方法論的唯一真理, 容不下其他看法的看法本身就是失敗」,Teddy也只能說「鄉民們自有公評」。

***

失敗的原因

螢幕截圖 2014-09-01 08.50.05

 

請參考上圖左手邊,軟體工程方法,無論是流程(Waterfall、PSP/TSP、RUP、Agile等),或是技術與實務做法(OOAD、自動化測試、review、BDD/TDD、CI、version control、refactoring等),除了方法本身所規範的實施步驟以外,每個方法都有其應用情境(context)。在適用的情境之下,實施某種方法,可以得到某種預期的結果

接下來請看上圖右手邊,當實施者(人或組織)去實踐某個方法的時候,實施者有自己的應用情境(公司文化、專案特性、團隊成員組成現況),實施後的結果與方法所宣稱的結果如果差異很大,甚至適得其反,在此稱之為「實驗失敗」。實驗失敗是一個結果,一種現象,探究其原因,有以下三種可能:

  1. 應用情境和適用情境的差異:簡單的說,就是「吃錯藥」。例如,Waterfall適用於需求與技術變異較小的專案,你把它拿來用在需求與技術不斷變更的專案中期待Waterfall可以解決你的問題,這不是緣木求魚嗎?類似的情況,把敏捷開發拿來應用在需求與技術變異很小的專案中也不一定合適,可能導致很多重工(rework)與浪費。
  2. 實踐方法有問題:實施者沒有「按照醫師處方用藥」,藥效當然會打折或沒有藥效,甚至導致病情加重。例如,敏捷開發建議要舉辦Daily Standup Meeting,你也舉辦了。但是你的Daily Standup Meeting是每個開發人員跟專案經理報告,再由專案經理指派工作給開發人員。形式有了,但實質面還是傳統command and control的專案管理方式。Teddy在〈不是Scrum也不是Kanban的問題,是Story有待加強〉提到的是另一個例子,敏捷開發建議盡量將需求寫成粒度較小的end-to-end story。你也照做,寫了story,但是你的story非但粒度很大(epic等級的story),而且還不是end-to-end。最後,每一個需求都花兩、三個月以上才能夠做完,然後你要怪敏捷開發的iteration沒有用,因為你沒辦法在1~4周內完成一個story。
  3. 方法本身有問題:最後一個原因,就是方法本身有問題,它的假設(應用情境)不明確、方法所規範的實施步驟不完整、方法所宣稱的療效被誇大。簡單的說,就是「吃到假藥」。

***

誰的嫌疑最大

看到這邊鄉民們可能會想:「Teddy你自己也承認導入某種方法失敗,也有可能是方法本身有問題啊。」在一般情況下,是有這種可能。例如,很多老一輩的人習慣購買電台販賣的藥品,這些藥品不但價格昂貴而且來源可議,但電台主持人卻不斷宣稱藥品有著神奇可治百病的療效。如果是方法本身有問題(吃到假藥),就好像開發軟體的時候需求有問題一樣(需求是錯的),就算實作正確,做出來的功能也沒人要用。這種情況,不只是失敗,而且是失敗中的失敗。

但是,Teddy談論的不是「一般情況」,而是多年來已經被很多單位驗證過的軟體工程方法。如果別人,而且是很多人實踐過後都獲得一定的成效,而你實踐的結果卻成效不佳,在這種情況下,失敗的原因是上述的第一點與第二點的機率極高。

以上所言,不光是讀了幾本書、看了一些文章之後「紙上談兵」的結論。成立泰迪軟體兩年多以來,被問到有關軟體開發的問題,沒有數千個,也有數百個。分析這些問題,脫離不了上述的第一點和第二點。現行被接受的軟體工程方法會不會有錯?可能會,如果鄉民發現了,也證明了這些錯誤,恭喜你,可以將你的發現寫出來,改進現有方法,造福社會大眾。

***

傻地願意相信

Teddy在〈傻的願意相信〉提到:「要先『願意相信』這是可以 work 的方法,嘗試照著去做,而不要在學會之前就先急著去否定這些方法。聽起來好像很簡單,但是要咱們『聰明的台灣人』傻傻的一步一步按照規矩辦事,說真的還真是不太容易。」

方法是一種工具,是死的,人是實踐方法的主體,是活的。方法需要依據使用的情境、對象加以調適。調整前請先確定已經正確學習到該方法,否則任意調整藥方的內容、用藥數量與時間點,很容易發生危險。古人說:「久病成良醫」,自己開藥方之前,請先確定是否真的「久病」了嗎?

***

友藏內心獨白:這算可與之言還是不可與之言呢?

1 則留言:

  1. 在多層次傳銷業,這叫歸零xd(無惡意,只是覺得很有趣)

    回覆刪除