敏捷協(xié)作——Daily Scrum 的重要性
我不僅發(fā)揮了自己的全部能力,還將我所仰仗的人的能力發(fā)揮到極致。
——伍德羅·威爾遜,美國(guó)第28任總統(tǒng)(1865—1924)
只要是具備一定規(guī)模的項(xiàng)目,就必然需要一個(gè)團(tuán)隊(duì)。靠單打獨(dú)斗在自家車(chē)庫(kù)里面開(kāi)發(fā)出一個(gè)完整產(chǎn)品的時(shí)代早已不再。然而,在團(tuán)隊(duì)中工作與單兵作戰(zhàn),二者是完全不同的。任何一個(gè)人的行為都會(huì)對(duì)團(tuán)隊(duì)以及整個(gè)項(xiàng)目的生產(chǎn)效率和進(jìn)度產(chǎn)生影響。
項(xiàng)目的成功與否,依賴(lài)于團(tuán)隊(duì)中的成員如何一起有效地工作,如何互動(dòng),如何管理他們的活動(dòng)。全體成員的行動(dòng)必須要與項(xiàng)目相關(guān),反過(guò)來(lái)每個(gè)人的行為又會(huì)影響項(xiàng)目的環(huán)境。
高效的協(xié)作是敏捷開(kāi)發(fā)的基石,面對(duì)面的會(huì)議是最有效的溝通的方式。每日例會(huì)(Daily Scrum)是最早引入并被極限編程所強(qiáng)調(diào)的一個(gè)實(shí)踐。它是將團(tuán)隊(duì)召集起來(lái),并讓每個(gè)人了解當(dāng)前項(xiàng)目進(jìn)展?fàn)顩r的一種會(huì)議。它是一個(gè)快速的會(huì)議,每個(gè)參與者只能被給予很少的發(fā)言時(shí)間(大約兩分鐘)來(lái)介紹自己的項(xiàng)目進(jìn)展概要。為了保證會(huì)議議題不會(huì)發(fā)散,每個(gè)人都應(yīng)該只回答三個(gè)問(wèn)題:
- 昨天有什么收獲?
- 今天計(jì)劃要做哪些工作?
- 面臨著哪些障礙?
Daily Scrum 有諸多好處:
- 讓大家盡快投入到一天的工作中來(lái)。
- 如果某個(gè)開(kāi)發(fā)人員在某一點(diǎn)上有問(wèn)題,他可以趁此機(jī)會(huì)將問(wèn)題公開(kāi),并積極尋求幫助。
- 幫助團(tuán)隊(duì)帶頭人或管理層了解哪些領(lǐng)域需要更多的幫助,并重新分配人手。
- 讓團(tuán)隊(duì)成員知道項(xiàng)目其他部分的進(jìn)展情況。
- 幫助團(tuán)隊(duì)識(shí)別是否在某些東西上有重復(fù)勞動(dòng)而耗費(fèi)了精力,或者是不是某個(gè)問(wèn)題有人已有現(xiàn)成的解決方案。
- 通過(guò)促進(jìn)代碼和思路的共享,來(lái)提升開(kāi)發(fā)速度。
- 鼓勵(lì)向前的動(dòng)力:開(kāi)到別人報(bào)告的進(jìn)度都在前進(jìn),會(huì)對(duì)彼此形成激勵(lì)。
總之,Daily Scrum 能幫助所有的團(tuán)隊(duì)成員全心投入到項(xiàng)目中,并且一起向著正確的方向努力。IBM® Rational® Team Concert (RTC)對(duì)于團(tuán)隊(duì)來(lái)說(shuō),已經(jīng)被證明是一種在軟件開(kāi)發(fā)過(guò)程中進(jìn)行協(xié)作的高效方式。RTC 實(shí)現(xiàn)了源代碼管理與工作項(xiàng)管理的完美集成。它能夠幫助進(jìn)行敏捷計(jì)劃、并生成報(bào)告,方便管理工作項(xiàng),并且它還提供了一種有效的框架來(lái)支持每日例會(huì)(Daily Scrum)。下面,本文將介紹三種使用 RTC 進(jìn)行 Daily Scrum 的方式。
在 RTC 里使用默認(rèn)的 sprint backlog 進(jìn)行 Daily Scrum
雙擊打開(kāi)項(xiàng)目當(dāng)前所處于的 sprint backlog(sprint 是 scrum 中的術(shù)語(yǔ),指敏捷開(kāi)發(fā)周期中的一個(gè)迭代計(jì)劃),如圖 1 所示,在窗口底部選擇“Planned Item”標(biāo)簽,在窗口右側(cè)選中 Schedule Risk 單選按鈕,窗口將呈現(xiàn)將列出當(dāng)前 sprint 中的所有工作任務(wù)項(xiàng) story 和 task。在進(jìn)行 Daily Scrum 時(shí),團(tuán)隊(duì)成員可以根據(jù)這個(gè)窗口,逐一更新這些任務(wù)的狀態(tài)。
圖 1. 默認(rèn)的 sprint backlog 窗口
用戶(hù)可以展開(kāi)任務(wù)項(xiàng)來(lái)顯示其各個(gè)子任務(wù),了解子任務(wù)是由誰(shuí)負(fù)責(zé),進(jìn)展等詳細(xì)信息。如圖 2 所示。
圖 2. 展開(kāi)的默認(rèn) sprint backlog 窗口
這種召開(kāi) daily scrum 的方式非常簡(jiǎn)便。它能夠展示整個(gè)項(xiàng)目的進(jìn)展和最近的變化,但是任務(wù)項(xiàng)不是按照?qǐng)F(tuán)隊(duì)成員分組的,不太適應(yīng)于了解各個(gè)團(tuán)隊(duì)成員狀態(tài)。為了解決這個(gè)問(wèn)題,本文下一章介紹另一種用 RTC 進(jìn)行 daily scrum 的方式。
在 RTC 里定制 sprint backlog 進(jìn)行 Daily Scrum
定制的 sprint backlog 又稱(chēng)為“開(kāi)發(fā)者任務(wù)一覽表”。一覽表按照?qǐng)F(tuán)隊(duì)成員展示任務(wù),每一行表示一個(gè)正被開(kāi)發(fā)的任務(wù)。任務(wù)顯示在第一列,其余幾列顯示其子任務(wù)的開(kāi)發(fā)狀態(tài):ToDo(將要做),In Progress(正在做)和 Done(完成)。并且,各任務(wù)根據(jù)其當(dāng)前狀態(tài),分別用不同的顏色顯示,一目了然。定制 sprint backlog 的具體步驟如下:
- 打開(kāi)項(xiàng)目所在的當(dāng)前 sprint backlog,點(diǎn)擊 Copy 拷貝這個(gè)計(jì)劃的模式。如圖 3 所示:
圖 3. 拷貝當(dāng)前計(jì)劃的模式
- 修改某些選項(xiàng)的值。比如修改定制 sprint backlog 的名字為“Developer's Taskboard”,風(fēng)格選擇“Taskboard”,分組選擇“Owner”,排序選擇“Creation Date”,進(jìn)度條選擇“Progress”。如圖 4 所示:
圖 4. 修改某些選項(xiàng)
- 修改視圖的布局。從窗口底部選擇“View Layout”標(biāo)簽,從左側(cè)列表中選擇“Effort Tracking”和“Owner”到右側(cè)列表。如圖 5 所示:
圖 5. 修改視圖布局
- 為 sprint backlog 添加色彩。從窗口底部選擇“Colorize”標(biāo)簽,根據(jù)自己的需要添加、修改、刪除各種顏色。如圖 6 所示:
圖 6. 添加色彩
- 保存所做的修改,用戶(hù)將得到自己專(zhuān)屬的 sprint backlog。顯示的效果如圖 7 所示:
圖 7. 用戶(hù)定制的 sprint backlog 顯示結(jié)果
當(dāng)工作任務(wù)項(xiàng)不是很多的時(shí)候,這種方式非常適合進(jìn)行 daily scrum。但是,如果當(dāng)?shù)?jì)劃中的工作任務(wù)項(xiàng)很多時(shí),這種方式就不再適合了。為了解決這個(gè)問(wèn)題,下一章將介紹最后一種用 RTC 進(jìn)行 daily scrum 的方式。
在 RTC 里創(chuàng)建自定義的查詢(xún)進(jìn)行 Daily Scrum
一般在進(jìn)行 daily scrum 時(shí),項(xiàng)目管理者需要查詢(xún)出最近正在被修改的任務(wù),這包括狀態(tài)是“New”和“In progress”的任務(wù)。創(chuàng)建這種自定義的查詢(xún)具體步驟如下:
- 在“Work Items”下的“My Queries”上點(diǎn)擊鼠標(biāo)右鍵,選擇“New Query…”,如圖 8 所示:
圖 8. 創(chuàng)建一個(gè)查詢(xún)
在打開(kāi)的窗口中點(diǎn)擊“start from scratch”,如圖 9 所示:
圖 9. 從零開(kāi)始創(chuàng)建一個(gè)查詢(xún)
- 在打開(kāi)的窗口底部選擇“Conditions”標(biāo)簽,在窗口右上角點(diǎn)擊加號(hào),選擇“Add Conditions…”添加查詢(xún)條件,如圖 10 所示:
圖 10. 添加查詢(xún)條件
根據(jù)需要選擇一些查詢(xún)條件,為這個(gè)查詢(xún)?nèi)∫粋€(gè)名字,保存。如圖 11 所示:
圖 11. 添加如下查詢(xún)條件
- 共享剛剛創(chuàng)建的這個(gè)查詢(xún),供每個(gè)團(tuán)隊(duì)成員使用。如圖 12 所示,在窗口底部選擇“Details”標(biāo)簽,在窗口右上角點(diǎn)擊“Share”,選擇“Team or Project Area…”。
圖 12. 共享查詢(xún)
在彈出的窗口中選擇共享這個(gè)查詢(xún)給哪個(gè)團(tuán)隊(duì),如圖 13 所示,然后點(diǎn)擊 OK,保存。
圖 13. 選擇共享團(tuán)隊(duì)
- 根據(jù)需要定制查詢(xún)結(jié)果的布局,包括選擇顯示哪些列,按照哪些列排序等,如圖 14 所示:
圖 14. 定制查詢(xún)結(jié)果的布局
- 顯示查詢(xún)結(jié)果。如果按照上述配置,查詢(xún)結(jié)果將在“Work Items”標(biāo)簽下顯示,如圖 15 所示:
圖 15. 查詢(xún)結(jié)果
這種召開(kāi) daily scrum 的方式能夠列出在最后一天工作任務(wù)項(xiàng)的變化,以及哪些工作任務(wù)項(xiàng)還沒(méi)有完成。但是它們都是以列表的方式顯示出來(lái),界面友好性和可讀性不是很好。
結(jié)束語(yǔ)
本文介紹了 daily scrum 在團(tuán)隊(duì)項(xiàng)目開(kāi)發(fā)中的重要性,以及三種用 IBM Rational Team Concert 進(jìn)行 daily scrum 的方式:默認(rèn)的 sprint backlog,定制 sprint backlog,和創(chuàng)建自定義查詢(xún)。這三種方式各有其優(yōu)缺點(diǎn):
- 當(dāng)團(tuán)隊(duì)人員比較少,一般小于 5 人,并且只是關(guān)注當(dāng)前 sprint task 時(shí),比較適合采用第一種方式進(jìn)行 daily scrum。使用它可以清楚的看到 Task 與 User Story 之間的層次關(guān)系,以及 User Story 的開(kāi)發(fā)進(jìn)度。
- 當(dāng)團(tuán)隊(duì)人員比較多,規(guī)模比較大,有自定義的 RTC Task 或者有子 Scrum Team 時(shí),比較適合采用第二種方式進(jìn)行 daily scrum。使用它與第一種方式一樣,也是只關(guān)注當(dāng)前 sprint task,但它還可以按照自定義的方式分組顯示,更清楚的了解每個(gè)團(tuán)隊(duì)成員的 task 狀態(tài)。
- 當(dāng)希望關(guān)注團(tuán)隊(duì)中所有 Task,而不僅僅是當(dāng)前 sprint task 時(shí),前兩種方式都無(wú)法滿(mǎn)足 sprint plan 的顯示需求,可以考慮使用第三種方式自定義創(chuàng)建查詢(xún),進(jìn)行 daily scrum。與前兩種方式相比,它更加靈活,建立查詢(xún)的條件非常豐富,可以根據(jù)需要?jiǎng)?chuàng)建多個(gè)查詢(xún)同時(shí)使用。
請(qǐng)用戶(hù)根據(jù)自己的需要選擇不同的方式進(jìn)行 daily scrum,進(jìn)行高效的團(tuán)隊(duì)項(xiàng)目開(kāi)發(fā)。
@import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);