敏捷宣言第四條:持續學習

我認爲敏捷式管理的最終目的就是建立學習型組織,除了在 Scrum 的活動外,我們還可以經由結對編程,也就是兩個人同時一起處理一件事情,來讓彼此在工作中學習各自的專長。另外企業内外各種技術與學習的分享,比如建立企業中的實踐社區(Community of Practice,簡稱COP),參與產業中的社區活動,都是讓企業保持學習文化的具體方法。

『這個採購案不能進行,因爲去年預算沒有編列。』

聼到類似這種説明因爲去年沒有計劃到,所以今年不能做的説辭,我都會想這個計劃到底是幫助公司,還是限制了公司的成長。

敏捷宣言第四條中說到:回應變化 重於 遵循計劃。

這句話聽起來很簡單,就是如果現實環境改變了,我們應該要更改原本的計劃去適應新的情況,而不是一廂情願的按照原定計劃往下走。但我認爲是最難做的的一條,因爲不管是人還是組織都是由慣性的,人們會習慣跟著過去的計劃往下走,直到走不下去爲止。

在敏捷的各種方法論中,Scrum 是最專注在工作模式上的,所以 Scrum 中的各種活動,都是專注在檢視現狀,然後做出相對應的調整。

在 Scrum 短衝中,每日站會、回顧會議(Review meeting)、與自省會議(Retrospective meeting),都是爲了讓團隊慢下來,停止工作,看看目前的情況是否符合預期,只是檢視和調整的目標對象不同。

在每日站會中,團隊成員檢視的是在短衝中每天的工作情況,比如說工作進度是否有遇到阻礙,團隊成員是否有需要協助的地方,然後團隊成員進行協助或是尋求其他人的協助。

每個短衝結束前回顧會議的重點在於產品本身,藉由邀請利害關係人一同來看看這個短衝所做的成果,是否符合他們的預期,有沒有功能需要修改,或是其他可以讓產品更好的點子。除了這個短衝的成品,過去產品的功能績效也應該被追蹤與討論。產品負責人在會議上搜集這些反饋後,會在產品待辦清單上反應出來,比如新增、修改、或是刪除使用者故事。換句話説,有效的回顧會議應有的影響,就是讓產品代辦清單是活的,代表經常性的變動。如果產品代辦清單上的事項長期沒有改變優先級或是内容,這是一個需要注意的警訊,代表我們可能沒有取得反饋,或反饋沒有被接納並反應出來。

自省會議我認爲是 Scrum 的精華所在,也是讓團隊工作效能提升最重要的會議。在自省會議中團隊檢視的是該短衝中的工作情況,然後決定下個短衝中所需要改善的事情。自省會議最重要,也是最難開好的會議,如果處理的不好會流於形式,大家閑聊一會就散會了。所以在實務上,Scrum Master 需要找各種方法讓團隊願意坦誠面對問題、説出建設性的建議、并且還要保持新鮮感,真的是很有挑戰。自省會議中常見的方法包含時間軸回顧、+ – = (多做、少做、維持)、肯定與感謝、慶祝等等,在 Google 上搜尋 Retrospective games 也可以找到許多自省會議的點子。自省會議中最重要的產出是改善事項,即使只有一件再小的事情都好,只要我們每個短衝都比上一個跟好一點,經過一年團隊就會脫胎換骨了。

在原來你才是絆脚石一書中提到,敏捷宣言第四條:回應變化 重於 遵循計劃,背後的價值觀是持續學習,就如同上文在 Scrum 中的活動,都是觀察現況、做出改變、檢視成效的不斷循環,這就反應到團隊的能力是在持續提升的。

我認爲敏捷式管理的最終目的就是建立學習型組織,除了在 Scrum 的活動外,我們還可以經由結對編程,也就是兩個人同時一起處理一件事情,來讓彼此在工作中學習各自的專長。另外企業内外各種技術與學習的分享,比如建立企業中的實踐社區(Community of Practice,簡稱COP),參與產業中的社區活動,都是讓企業保持學習文化的具體方法。

敏捷宣言第二條:透明化

在『在原來你才是絆脚石』中提到,敏捷宣言中第二條:可用的軟體 重於 詳盡的文件,背後代表的價值觀是透明性。對顧客和利害關係人來說,透明性就是在每個迭代都看到團隊做好的產品,然後給意見。如果我們做的符合顧客需求,那很棒我們可以繼續做其他需求。萬一做的不是顧客要的,那我們最多也是損失一個短衝的時間,而不會像傳統的開發方法,都花了好幾個月的時間開發,顧客一句話就被打掉重練。

敏捷宣言第二條提到:可用的軟體 重於 詳盡的文件,為什麽要特別把文件與軟體做比較呢?

我認爲這一條的背景是在傳統的軟體開發模式中,因爲比較像流水綫形式的分工,比如專案經理跟客戶訪談拿需求,專案經理訪談後要整理需求並撰寫需求文件,然後把需求文件交給軟體開發單位的主管,開發單位的主管再依據需求寫出技術設計文件,最後把技術開發文件交給開發人員進行程式開發,而這邊還沒有提到與其他單位所需要的文件,比如說給品質保證部門的測試案例,或是之後程式上綫前的發佈文件。

如果你能充滿耐心的看完上面的流程,就會發現依照傳統的瀑布式開發流程,在開始寫軟體之前,就會需要寫出一堆文件。而且在之後任何的需求變更或設計變更,都需要把文件更新,萬一沒有更新到,後續接手的人就會像是看天書一般,有看沒有懂。而在軟體業界混久的人,都會知道開發文件的作用不大,這主要有三個原因。

第一個原因是軟體專案時程都很急迫,在壓縮專案時程的同時,第一個被放棄掉的都是寫文件,然後把時間留給寫軟體。反正寫文件是爲了讓之後接手的人看懂,現在我顧自己都來不及了,哪有時間考慮未來的事情呢。好一點的就是寫個大概,差一點的就直接把以前的文件複製貼上,當作文件完成了。

第二個原因是軟體是相對抽象的概念,不像是蓋大樓,把藍圖畫好後看圖的人可以視覺化的看到完成的具體形狀。所以顧客只能大略的描述他想象中的情況,也許可以加上圖示 Mock up 幫助顧客想象使用的流程,但許多問題還是在實際使用的時候才會被發現。所以當專案經理在寫需求文件的時候,也沒辦法照顧到太多細節。

最後一個原因也是最根本的原因,更新軟體太容易了,改一行程式碼,也許就需要更新到好幾份文件。更新軟體的速度遠遠快過更新文件的速度,工程師就會想那我等更新程式碼多幾次後再來更新文件,省的麻煩,最後連更新文件都省了。造成很多的文件不如説是歷史記錄。

因爲以上的這些原因,在敏捷開發中提倡的做法是讓程式碼本身就是文件(Code as documentation),就是讓後續接手的人,可以光從程式碼與測試案例就知道大部分的資訊,並可以開始維護與更新程式碼。當然這是個理想中的狀態,所以宣言中説的是『詳盡的文件』而不是說『文件』。能被及時更新的關鍵文件,還是有需要的。

而爲什麽說『可用的軟體』而不直接說『軟體』呢?在傳統專案管理中,客戶大都是接近結案的時候才會看到產品的狀況,而如上面所說的軟體是個抽象的概念,客戶期待的都會跟實際做出來的差很多,然後團隊就會進入不斷修改需求的無間地獄。

俗話說:醜媳婦總得要見公婆。

所以敏捷開發中認爲與其早晚都要見公婆,不然早一點見,讓公婆給些意見和反饋,好讓我們可以儘快改善讓以後的生活更幸福。

在『在原來你才是絆脚石』中提到,敏捷宣言中第二條:可用的軟體 重於 詳盡的文件,背後代表的價值觀是透明性。對顧客和利害關係人來說,透明性就是在每個迭代都看到團隊做好的產品,然後給意見。如果我們做的符合顧客需求,那很棒我們可以繼續做其他需求。萬一做的不是顧客要的,那我們最多也是損失一個短衝的時間,而不會像傳統的開發方法,都花了好幾個月的時間開發,顧客一句話就被打掉重練。

而透明化這個價值觀的體現,在 Scrum 中則是團隊成員都彼此互相理解工作的情況。在企業中的透明化則包含對流程和制度的透明化,和可以方便地取得完成工作所需要的文件。比方説知道什麽職務可以決定交際預算的使用,或是產品的營運狀況如使用人數等等資訊。

透明化的目的是爲了讓大家工作更順暢,所以過度透明會造成資訊爆炸,比如過度會議,反而使得工作的效益降低,所以透明化拿捏要以工作為核心出發,而不是所有事情或資訊都要透明化。