l

2012年7月17日 星期二

Scrum框架下的跨界開發(4):分組方式

July 16 22:13~23:50

螢幕快照 2012-07-16 下午11.59.13

畫面節錄自維基百科。

 

昨天談到「Scrum框架下的跨界開發(3):遊戲開發的四個階段」,接下來談一下分組的方式。如果對Scrum稍有了解的人,應該會覺得有點奇怪:「啊Scrum不是說要組成cross-functional team嗎,那分組這個問題還有什麼好談的?」有,如果鄉民們還記得「ezScrum系列講座(7) 快速回顧:下集」,其中Jonathan在活動中有提到兩種開發多平台系統的分組的方式:

  • 依據平台分組,例如iPad、iPhone、Android、Windows、Cloud五個平台把開發人員分成五組。
  • 依據功能模組區分,例如照片管理系統一組、音樂管理系統一組。這種分組方式Scrum稱之為feature team(依據feature來分組)。

所以,同樣是cross-functional team,在如何分組方面還是有一點小技巧。

接著要介紹《Agile Game Development with Scrum》這本書所提到的幾種分組方式:

  1. Feature team:這個feature team剛剛有介紹過了,這算是Scrum標準建議的分組方式。Feature team的成員是由「跨職能成員」所組成,也就是所謂的cross-functional team。翻成白話文就是說,完成某項功能或是某個專案所需要的人才,全部都拉到同一個團隊裡面。這裡有一個小地方要補充說明一下,在書中Keith用cross-discipline來稱呼cross-functional,有買書的鄉民們稍微注意一下。
  2. Functional team:這個分法就跟feature team剛好相反,把同一種專長的人擺在一個團隊中,主要用來解決某個特定的問題。雖然functional team在Scrum團隊中比較少見,但是作者認為在某些時候還是有它的作用。例如,遊戲開發團隊做出一款可以執行在X360與PS3上面執行的遊戲,但是遊戲做好之後還是要針對這兩個平台做很多最佳化的處理。由於針對X360與PS3做最佳化處理是一項很專門的工作,如果把這些專長的人打散到不同的遊戲團隊,這些單兵在不同的團隊中可能無法發揮個人的功能(因為他們需要聚在一起研究平台最佳化的技術)。但是,採用Scrum的團隊如果要組織functional team要非常、非常的小心,因為基本上Scrum是不建議採用functional team的。就像Teddy很久以前曾經說過的,「逆練九陰真經是很危險滴,非不得已不要輕易嘗試」。所以作者建議,functional team應該只被用於非常基礎或是核心的架構開發。最後補充一點,functional team又稱為component team,後者是Teddy在一般Scrum文獻中比較常看到的說法。
  3. Production team:這個團隊的組成方式也是由「跨職能成員」所組成,和上面第一種feature team的差別在於,production team是指當專案已經進入到production(量產)階段所組成的團隊。Teddy在這邊特別說明一下,由於本書主要在討論遊戲開發,而作者又把遊戲開發分成concept、pre-production、production、post-production這四個階段。當進入production階段的時候,對遊戲開發團隊來講,技術上或是需求上的風險相對來講已經很低了,所以要組織一個可以應付大量量產遊戲素材的團隊編組。至於詳細的編組方式,作者是建議採用Lean production的模式,細節等之後再專文介紹。
  4. Shared infrastructure team:這個分組模式和functional team很像,主要成員由某種特殊專長的人所組成,但是可能會搭配穿插一些其他領域的人才。例如,以遊戲開發而言,可以組織shared infrastructure team來開發遊戲引擎。在這個團隊中,主要部隊由程式設計師所組成,但是也可能有包含多媒體專長的人或是物理學家、數學家一起合作。Shared infrastructure team主要用來服務多個團隊,例如開發遊戲引擎或是虛擬寶物交易系統給不同的遊戲團隊使用。
  5. Tool team:工具團隊主要用來開發支援遊戲開發的工具,例如遊戲伺服器壓力測試工具、地圖驗證工具、地圖編輯工具、3D模型建造工具等。很顯然的,工具團隊也是由「跨職能成員」所組成,所開發出來的工具也要支援多個遊戲開發團隊。
  6. Pool team:這個團隊可說是公司內部的「人力派遣團隊」,通常由單一專長的人所組成。例如,公司可能會有若干的UI/UX設計師,這些設計師都隸屬於同一個團隊(與其稱之為團隊,還不如稱為pool)。當公司其他團隊需要UI/UX人才的時候,就到這個pool裡面來拉人。
  7. Integration team:對於大型專案而言,可能包含了很多個不同的團隊,而整合這些團隊的產出物將變成一件非常複雜的工作。所以,在此情況下可以成立integration team,專門用來負責處理團隊之間的整合工作。Integration team的組成方式也是採用「跨職能成員」,為什麼?很簡單,因為你要整合別人的產出物,而別人又是由一大堆不同專長的人所組合而成的,所以你的團隊當然也要包含各種專長的人士啊。

看完以上「一拖拉庫(一堆)」團隊分類之後,Teddy有一個很直覺的想法:這也分得太細了吧。

總之,這邊有一個重點,就是當團隊很大的時候,尤其是職能差異很大的時候,光光是採用feature team這種分組方式,有可能無法滿足專案的需要。但是,Teddy還是要先提醒一下鄉民,依據Scrum的精神,先用力想想,feature team是否真的無法解決專案的問題。唯有在想盡辦法之後,發現光光靠著feature team無法解決問題時,再來考慮是否引進其他的團隊模式。


***

友藏內心獨白:春秋戰國時代的四大公子,食客三千,三教九流的人都有。這不就是cross-functional team嗎?

1 則留言:

  1. 其實怎麼分組我都沒什麼意見,問題在於領task時,領域跨太大,某些領域的task還是落在某些人身上,但如果某個sprint在某個領域的task太多時,變成有人沒task能領,有些task沒人敢領,以最現實的情況,程式工程師敢領角色3D建模的工作嗎?那不是說3ds max摸一摸玩一玩就能做的事,連手繪稿都畫不出來的人,是不可能領這種工作的,更別說動畫、音樂或音效了。所以才會有concept、pre-production、production、post-production四種不同階段,因為這不同的階段,美編、音樂、音效、動畫、程式所需的工作量差很多,即便是cross-functional team,每個階段不同領域的team member人數要些微調整。

    回覆刪除