l

2011年8月1日 星期一

People over Process (2)

August 01 21:25~22:40

剛剛去南機場夜市的『芋頭大王』買了一碗冰,現在邊吃著冰,邊吹冷氣,邊寫部落格,這種感覺真是...肚子好脹啊。現在的冰怎麼料那麼多,如果把冰拿去微波,會變成好像在吃『八寶粥』一樣...XD。

***

在第一集中談到 people challenges 的第一點『Developer fear of skill-deficiency exposure』,今天談一下第二點。

Broader Skill Sets for Developers

傳統的軟體開發團隊,依據所負責的工作內容不同,可以區分為架構師,系統分析師,程式設計師,資料庫管理員,使用者介面設計師,測試員等等。Agile methods 則傾向打破這些角色的界線並且要求 developers 儘量具備各種技能。Paper 中引用了 company M 某位經理的話:

To be a successful agile developer, you need to be a coder, a tester, an architect, a customer, a quality assurance expert, and a multitude of other things software-related.

理想上,agile developers 應該是十項全能的『全才』,為什麼呢?因為這樣有很多好處:
  • 能夠真正依據重要性來挑選 stories :Product Owner (PO) 每個 sprint 在挑選 stories 時,理論上要先挑重要性比較高的那些 stories 先做。但問題來了,假設這個 sprint PO 挑了三個 stories 都需要寫很多的 SQL,但是在一個五個人的團隊中,只有一個人懂 SQL,這樣子 PO 挑選 stories 的彈性就變小了(因為還要考量到 developers 實做 stories 的能力)。如果團隊成員都是全才,或者至少有 1-2 人 SQL 很熟,其他人的 SQL 屬於中等水準,這樣子問題就很少很多。
  • 認領 tasks 的自由度變高:和前一點很類似,當 stories 被切割成 tasks 時, developers 理論上應該要先做重要性較高的 tasks。但是如果團隊成員不是全才,那麼很可能會造重要性較高的 tasks 剛好都只有某位 developer 會做,而他剛好很忙,以至於開發活動卡在他一個人身上,無法在 sprint 結束時完成所有的 stories。
  • 較容易達到 Shared Code 的目標:XP 有一個 practices 叫做 shared code,要做到這一點,如果團隊成員不是全才,不可能達到。
  • 有人請假不怕事情沒人做:這一點很重要,根據莫非定律,每次你請假的時候,就是你負責的工作出包的時候。如果大家都是全才,那麼就不用說什麼事情都非你不可了。
  • 不怕員工拿翹或是人員異動:這是從比較負面的角度來看,如果有員工耍大牌,或是有人離職,對於團隊『戰鬥力(生產力)』的影響可以降到最低。
講是這樣講,但是鄉民們一定都懂『說的比唱的還好聽』這句話的道理...要達到團隊成員都是全才的境界,講起來容易,做起來難啊。
  • 人才難尋:幾乎所有十七個專案都有遇到很難找到具備所有所需 agile skills 開發人員的困難(無論從公司內部或是外聘)。
  • 訓練困難:有四個公司把整個團隊送去上課以便學習所有需要的技能,但是這樣做成本很高。在這些公司導入 agile methods 之前,開發人員只受到與他工作相關的某個特定領域的訓練(例如,寫 Java 程式,寫 SQL,寫 Javascript 等等)。因為 agile methods 要求全才,因此開發人員被迫要『東學一點,西學一點』,有些人因此擔心會淪落到『什麼都懂一些,但什麼都不專精』的下場。
***

要求『全才』這件事是 agile teams 成功的關鍵,但也是很多 teams 實施 agile methods 失敗的原因。短期來看,要開發人員『什麼都懂』的確是不容易,尤其是那些『很有經驗』或是『上了年紀』的開發人員(Teddy 內心獨白:這是在影射 Teddy 嗎?),原本已經很熟悉某一塊特定領域的軟體開發,只要『固守』這塊領域就可以平安度過晚年。導入了什麼鬼 agile methods 之後,這個也要學,那個也要懂,沒事還要被迫去做 pair programming,誰受得了。

以 Teddy 的經驗,『變成全才』這件事,要『以時間換取空間』。不要希望短時間(幾個月)內開發人員都變成專才,這是不可能的,除非這幾個月大家都不開發功能,全部在學習 skills(即使是這樣也不太可能,因為 skills 永遠學不完,而且不開發功能,怎麼知道有那些 skills 是真正需要的呢!)。所以應該把時間拉長到 3 - 5 年來看,希望到時候每個開發人員的技能至少能夠有 80% - 90% 以上是重疊的。軟體專案一開始每個開發人員都有自己專精的那一塊,慢慢地每一個 sprint 藉由 pair programming 的方式把自己專精的技能傳授給其他人。久而久之,團隊個人專精的技能,就會在整個團隊中發散開來。這樣的作法同時可以兼顧到『技術越專精,開發速度愈快,品質愈好』與『全才的 agile 團隊』這兩個要求。

***

最後以 paper 上面的一句話作為本篇的結尾:

Developers must have broad knowledge on all aspects of software development but should also specialize and hone their skills in certain areas.

***

友藏內心獨白:認命吧,做軟體這一行就是沒有學完的一天。

2 則留言:

  1. 關於全才這一點 我始終認為 這是從程式開發的角度看問題 但很多UI相關的問題 是跟美工或美感有關 這一項是工程師的弱項 除非專案不是很在乎UI漂不漂亮 不然我是認為工程師很難擔任這項工作 ps. 當然也有懂美術的工程師 但這畢竟是少數

    回覆刪除
  2. To Spirit Du:

    Teddy 完全同意,美工這項工作大部分的 programming 是無法做的很專精的。所以『全才』是一個『理想』,實際上有些領域的專長還是需要分工滴。

    回覆刪除