什麼是scrum? introduction to scrum

其實這應該是第一篇才是 XDD

scrum是英式橄欖球的術語,我也不知道為什麼大師們要用這個詞來稱呼他,反正打橄欖球麻,就是要贏球麻,要贏就是要得分麻,要得分就是要達陣麻,要達陣就是要一步步的一尺一寸的努力的往前推進,整個隊伍撞啊擠啊的,整身是血是汗的,然後達陣得分.

在這樣的情況下,團隊裡面是有凝聚力的,是努力往前進的.

開發軟體也是一樣,團隊裡面不應該有人只會打嘴砲,不應該有人閃事情,不應該有人不負責任的指責對方,不應該有人在團隊裡面搞政治權謀.因為大家的目標是一致的,來打球就是要贏球,來開發軟體就是要把軟體寫出來上線.

如果你發現你現在的開發團隊有以上講到的"不應該",請你要非常非常非常小心.

好吧,我承認,其實,開發軟體跟橄欖球並不能完全類比,大家不要誤會了,所以到底什麼是scrum咧?



scrum is a development framework.

換成中文就是,scrum是一套開發框架.他不是流程,也不是一套系統,目前大家可以先把它想成是一套開發流程吧,但他不是流程喔喔喔喔,我們最後再慢慢解釋吧.

sprint的概念

scrum把開發的時程切成一個一個單位,通常以1到4星期為單位,這樣的一個單位叫做是"sprint".就好比是橄欖球裡面的每次每次往前推進,軟體也是要每次每次的往前衝刺.

至於為什麼需要sprint,為什麼是1到4個禮拜,sprint的長度要怎麼選擇?

先這樣,不要寫太多,不然這篇文章會不小心變一本書.


Iterative and incremental

有了sprint以後,團隊在每個sprint要重複的(iterative)開發軟體,每次開發完產出的軟體都要是完全測試過的,假如今天老闆說”好!出貨吧!“那應該隨時都有ready的東西出貨,這個ready的東西簡稱是potentially shippable,全名是Potentially shippable product increment.

看到increment這個字了齁,所以,這個sprint結束後的產出物是應該奠基於上一個sprint的產出物,但是再加了一點點功能或是修好的bug,每次每次加上去(increment),直到某一天這個potentially shippable夠成熟了,就可以出貨了.

先這樣,不要寫太多,不然這篇文章會不小心變一本書.

角色

一個scrum team由三個角色組成:

  • the team -- 做事的人
  • Product Owner -- 做決定的人
  • scrum master -- 協調大家並教大家什麼是scrum的人
圍繞著scrum team還有:
  • Stakeholders: 客戶阿、老闆阿之類的
  • Managers: 就原本的主管阿,之類的
但這兩個不是重點啦,ㄎㄎ。

先這樣,不要寫太多,不然這篇文章會不小心變一本書.


Overview


這邊簡單講一下scrum開發的流程...

專案開始了的時候

老闆或客戶說“好,來做吧!”,於是把專案交給一個人,他叫做是Product Owner,PO要去蒐集資料,把專案要有什麼功能跟需求紀錄起來,這個紀錄叫做是Product backlog.

至於Product backlog要怎麼生出來,有沒有其他的注意事項等等,就之後再說.

先這樣,不要寫太多,不然這篇文章會不小心變一本書.


sprint開始了的時候

sprint開始的時候,scrum master會召集team跟PO來開會,這個會議叫做是sprint planning meeting,要決定接下來的這個sprint結束後,產生的potentially shippable要做出些什麼,所以做決定的人(PO)要先想好要做什麼,跟團隊開會商量以後,大家就講好sprint的目標了,把這個目標記錄起來,就叫做sprint backlog.

至於,sprint planning meeting要注意什麼,sprint backlog要怎麼生出來,有沒有其他的注意事項等等,就之後再說.

喔!這裏超多內容的,超精采,ㄎㄎ.

先這樣,不要寫太多,不然這篇文章會不小心變一本書.


sprint進行中的時候

接下來就開始開發了,團隊每天都會有固定一個時間,大家自己在cubicle站起來,互相sync彼此的進度.這個會議叫做是daily standup meeting,或是daily scrum.

這個會議要特別注意,不要超過15分鐘.對很多人來說,這很難.scrum的做法是,要求每個人只說三件事:

  • 我昨天做了什麼
  • 今天打算做什麼
  • 有沒有東西卡住我

講完,解散.會議上有提出問題的話,會議後再解決.

另外,在sprint進行中的某一天,PO也會找時間跟所有人開一個簡短的會,想辦法把下一個sprint要做的東西釐清,這個會議叫做product backlog refinement meeting.

先這樣,不要寫太多,不然這篇文章會不小心變一本書.


sprint結束了的時候

前面說到,sprint結束以後的產出物叫做potentially shippable product increment,這個東西要拿出來給PO看,也就是demo給他看,由他來決定這個sprint的工作成果是不是跟預想的一樣,是不是可接受的等等.既然要demo,那也是需要開個會議把大家都找進來,這樣的一個會議叫做sprint review meeting.

demo完了以後,團隊會自己開一個反省檢討會議,叫做是retrospective meeting,這個會議上,每個人都只說兩件事:
  • 什麼做得好
  • 什麼還可以做得更好
這兩個會議,主要都是在蒐集資訊跟feedback,讓團隊的步調跟產出物更好.

然後.下個sprint又開始了.

先這樣,不要寫太多,不然這篇文章會不小心變一本書.

project什麼時候結束

就這樣,sprint一直反覆進行,直到PO決定可以了,於是potentially shippable變成shippable,上線或是出貨.

先這樣,不要寫太多,不然這篇文章會不小心變一本書.


any diagrams?


其實,網路上已經有太多前輩畫了太多太多的示意圖,以我微弱的美術能力與審美觀,就不來傷害大家的眼睛了.


這個連結是用"scrum"當關鍵字去google圖片,大家點前面幾張來看看,搭配我上面那些文字應該會更清楚.

...好吧,其實是懶.


a framework or a SOP?


scrum不是一套流程,不是一套SOP;雖然看起來scrum有一堆規定.不管是角色的分類,不管是這些會議,但這些規定都不是實的,沒有規定一定要怎麼怎麼做才是對的;而是,scrum規定一定要有這些角色跟會議,但這些東西是虛的,團隊要去填進去的,至於要填什麼進去,無所謂.所以實行scrum時,scrum團隊是有發揮的空間的.有點像是java的abstract class的概念.

虛虛實實很難懂齁.

但是scrum還是針對於每個細節有他的建議,照著做會比較好.這些建議麻...

先這樣,不要寫太多,不然這篇文章會不小心變一本書.


OK. let's do Scrum, but...

九把刀說“人生最精彩的就是這個but“.

有很多人花了時間認真地瞭解了scrum以後,會說“scrum真的很不錯噎,但是我們公司怎樣怎樣,所以我覺得怎樣怎樣”等等,然後就自己搞出了一套方法.這些人通常是長官.

要注意的是,千萬千萬不要自己發明自己的scrum.scrum其實已經出現十幾年了,地球上已經多少團隊跟公司採用了scrum,並且獲得了成功,scrum是被證實可行的,不然他不會活到現在.想想看,有多少大師跟前人的經驗凝聚在這上面,如果有人這麼強,強過了這些大師,或是經驗多到比這些人還多,那當然可以去修改scrum framework,自己發明一個.但通常都不是這樣的.

scrum的發明人之一曾經到google 總部去跟google的工程師演講,連結在這裡

如果有人發明了比scrum好的框架或方法或什麼什麼的,趕快去寫一篇論文,投稿,寫書,去google演講,成為台灣之光吧!!


Conclusion


先寫到這裡,以後再慢慢把每個“先這樣,不要寫太多,不然這篇文章會不小心變一本書.”的部分補上吧.我會盡量努力把自己遇到的問題跟經驗寫上去,不要只是上課那一套.


原來看我這篇文章要用BFS的概念來看啊,顆顆.














留言