[心得] 需求複雜度估算

http://www.accupass.com/go/agilemeetup201501
這是由
https://www.facebook.com/pages/AgileCommunitytw/151865964951100
Agile Community TW 舉辦的固定聚會的其中一次

這次應該是 91 第一次講這個主題~ 第一次看到 91 本人 XD

今天去上了91開的課程,原來這堂課在 1/31舉辦的MVP OpenDay也會有一堂,不過那堂沒有Workshop玩,畢竟一堆人也不適合

簡單來說今天上的課程如果有學過Scrum的流程的話,就是在plan meeting 的前半段要做的事情,就是估Story Point,不過91老師用了一些方式說,讓我更能體會到為什麼要這樣做,而不是只是學會一個Scrum的流程

一開始先講到一個好的估算過程有什麼特徵,一共有三個
S.P.A. => Simple.(簡單) Public(公開) Agreeable (共識)

Simple:用簡單的方式能夠估算,怎麼簡單法呢?用相對的方式來去估計,避免用絕對的方式,好比說 一隻貴賓狗有多大(絕對) 跟 貴賓狗和哈士奇哪種大 (相對)後者肯定可以容易的估計,所以估計需求時,我們可以建立一個大家有共識的東西當作基準,其它的需求就以此為基準來估計;這邊是對應到Scrum玩 Planing Poker的地方;
在這邊有聽到一點之前想錯的,每個Sprint估計Story point的時候,基準點都要相同,我之前以為是要以當下PO拿出來的User Story其中一個當作基準,如果我想的話,這樣就無法再幾個Sprint後修正團隊估計Story Point的準確度
不過其實我覺得這邊其實是一開始導入時候會遇到最大的問題,而且要找尋第一個基準點覺得也沒這麼容易的事情,哈

Public:讓大家參與估計的過程,眾人的智慧就是「對的」,即便事後是「錯的」,但是他是團隊的共識,它還是「對的」;參與估計的人包含PO & Team Member,但是PO僅能提供Team Member有問題詢問,不可以參與估計Story Point,原因是又不是PO寫,當大家都覺得要3天,PO說一小時就好,這肯定是有問題,不然PO你自己來寫好了XD(不過當然Team Member沒有串供的前提下XD) 這樣PO也才會知道RD估計這個需求大小的過程,自然就懂得為什麼估計的東西會比自己想的大或小,同時也能夠在知道團隊的速度後,提早發現是否能做完所有需求單位提出的所有User Story

Agreeable:這點簡單解是就是共識決,我們要以 團隊 為單位來看待,要去共同想辦法解決問題,例如估計的Story point差異很大時,是否可以用熟的人提供不熟的人協助的共識後,再去估計;共識也不僅包含估計時數
此外,要估計需求的時間點是什麼時候比較好呢?是在指派人之前,因為這樣可以排除特定人當下時空的因素(譬如說最近比較忙或比較懶之類的),這也是要先做Planing meeting的理由,而不是像一般分配工作的方式,先指定某個人再問某個人要花多少時間
然後,需求能夠切的越小越好(大化小),這樣才有彈性,能夠讓你遇到一些臨時狀況的時候(生病、別人請假等等),可以減少影響時程的因素(譬如常常Context Switch);並且一個需求越大,越估計不準,好比說要折一台紙飛機和做一台戰鬥機要花多久,你覺得哪一種比較好估呢?

在Q&A的部分,幾個點紀錄一下

一個UserStory要不知道要切多少個Task時候,91說可以以一種方式去切,就是你看這個需求是要幾個人做;但正常的作法還是Team member討論裡面是有真的有哪一些事情要做去切

第一個Sprint的時候,要怎麼估計能做多少個Story呢?可以用一個方式,如果一個Sprint是兩週,就是10個工作天,然後把每個人每天用4小時去算總時數有多少,然後定義一個Story Point 為 1的是代表多少時間,其它Story Point就乘以幾,來去估算

91提到他自己的Team估計一個Sprint應該是9個工作天,因為有一天會浪費在Refinement meeting & Planning Meeting,91他的Team會在一個Sprint的第二週就會在Refinement meeting上面討論下個Sprint要做的Story的需求和切Task等,下個Sprint的Planing Meeting才會估計時數,但這作法我想是因地制宜的,我是想到,這樣PO或Scrum Master的角色挺重要的,哈哈

91說他們在Refinement meeting的時候,一旦開超過三小時,SM就會強制終止會議,所以PO在Refinement meeting上面能拿出多少個Task討論就是他的功力XD 但不知道他們Team的Plan meeting會開上多久?

寫在後面:

Scrum是一個敏捷(Agile)的門派(流程),但是很多細節要怎麼做,只要大家有共識就好,正所謂因地制宜,但是不要違反敏捷的精神,但這也是為什麼我更想要上敏捷的課程的原因,想要更瞭解哪一些是 敏捷的精神,有了「內功」要用哪些「招式」應該會更得心應手,甚至可以「自創拳法」,但我想每個Team跑Agile應該都是用「自創拳法」,但有沒有「走火入魔」就是要看你對敏捷精神瞭解的對不對了,不要搞的一個敏捷各自解釋就不對了XD
(這邊應該沒有 道可道非常道 的問題XD)

幾個敏捷相關的Facebook粉絲團:
https://www.facebook.com/AgileCommunity.tw
https://www.facebook.com/groups/576560519087207/
https://www.facebook.com/groups/179345672472/

貼一次敏捷宣言:http://www.agilemanifesto.org/iso/zhcht/

敏捷軟體開發宣言

 

藉著親自並協助他人進行軟體開發,
我們正致力於發掘更優良的軟體開發方法。
透過這樣的努力,我們已建立以下價值觀:

個人與互動 重於 流程與工具
可用的軟體
 重於 詳盡的文件
與客戶合作 重於 合約協商
回應變化
 重於 遵循計劃

也就是說,雖然右側項目有其價值,
但我們更重視左側項目