網頁

2011年4月27日 星期三

2011專案執行省思(時程與人力)

雖然還是一個初出茅廬的小嫩咖,但最近執行專案有點感觸。首先定義一下什麼叫做專案?或許可以說成「一定時間內完成一些目標,取得某種報酬的事情」,所以重要的是「一定時間」、「一些目標」跟「某種報酬」,比如說:一小時內登打10篇論文、一天內搬移200袋水泥、一個月內安裝整棟大樓的遮陽窗簾、一季內完成某某管理系統,依據不同的情況,可能會指派個人,或是交給所謂的領導、工頭或主辦。

而接到專案後,第一件事情莫過於檢視時間、目標與報酬,想著期望中的成果品質,並開始估計需要的成本;以程式開發專案來說,扣除軟硬體採購,撇除委外開發的選項,其成本就會被換算成所謂的"人月",所以要考慮的就是:在時程內於尚存報酬的人月下完成可接受品質的目標。

也就是程式開發專案的四個重要變數:時間、品質、成本(人力)與規模(目標),理想狀況下專案啟動的方式是:
1. 檢視規模與時間後,與使用者暢談(?)品質(系統有多棒),最後提出需要的人力,向長官要人。
2. 長官指派有能力完成該規模,並保有品質的人力。
3. 最後,在時間內完成可接受品質的規模,並有獲利。

過程中有可能遇到一些問題,例如說突然遇到無法拒絕的新需求,而時間也無法延長,品質也不能下降的情況下,就必須投入更多的人力;或是突然遇到提早上線的要求,就必須朝向功能項目減少、品質下降或人力增加的抉擇;或是遇到希望跨瀏覽器、跨平台的要求,就必須延長開發時間、增加人力或功能項目減少;若是人力短缺,則勢必需要延長時間、減少開發項目或是降低品質。

現實情況下,除了特殊情況外很難跟業主說:品質要下降、時程要延長或是減少某些功能,所以可以機動調配的只有一個神奇的項目「人力」,看起來人力似乎可以解決所有的事情,而且很多時候也不得不用人力解決;但現實情況中,時間會縮短,品質要求會提高,功能會增加,但人力卻是搖不可動甚至會減少。

當提出時間縮短、品質提高、功能增加等問題時,某些人會請你重新提出一個新的進度表,而普遍的作法是壓縮原本一個星期可以完成的功能變為三天,塞進那些多出來的部份,接下來我們會交出一張如期如質的進度表,雖然上面執行人員名單並沒有增加。

增加人力似乎是一個萬靈丹,如果能夠拿到適當的人力就好似完成了專案?這取決於另外兩件事情,加入專案時間與執行能力,每一項工作每一個功能即使有能力可以完成的人也需要足夠的上手時間,當專案已經延遲,各項功能都迫在眉睫,這時候加入極大的人力,有可能完成嗎?所以一年的專案在兩個月時增加兩個人力,遠比剩兩個月時增加10人要來的好;另外部門內每個人的能力不同,同樣的事情、同樣的功能所需要的時間可能大不相同,指派人力時往往會忽略training的時間,以案培訓是一個很正常的方式,但認清與計算該做法會延遲的時間也是不可逃避的。

另外一種增加人力的方式,就是加班。一週40小時工時,表列中1-5加班可增加20,6-7加班可增加24,總計下來可增加一倍多的時間,就時程上來說似乎是一個有效的方法?「做不完?加班押。加班做不完?那六日為什麼沒看到你?」,「加班」除了降低每單位時間的產量外、員工個人心情與向心力外,有著另一個潛在的危險;加班在某些情況是必須的,但是當排定的工作內容直接將加班時間算進去,只意味著專案陷入不可出錯的危機,一個小意外或是額外需處理事項都將擴大整個災情。

講起來好像都是因為人力短缺才造成專案時程延後,但其實很多事情沒有做過、沒有執行過,其實是很難預估出時間的,常常聽到某些人說:我預估這個部份要兩個星期、這項工作要你幫忙不會佔用到你太多的時間;往往實際情況是:兩個星期其實必須要3個月、不會佔用時間的工作其實佔滿了全部。所以累積預估時程的功力是必須的,拿到需求後如何將內容轉換成實際時間且相去不遠,是專案時程的第一步也是最重要的一步,或許不斷的工作到退休前這件事情都還是做不好。所以可能的根本原因是:從上到下沒有人可以"比較"準確的估算出合理時程,造成各個專案的人力排擠,想像部門只有兩個專案,一共有六個人,原推算兩個專案都各需要三個人進行一年,結果其中一個專案錯估功能的量,需要調配兩個人幫忙3個月,就擠壓了另一個專案的時程,最後可能導致兩個專案皆延遲的結果。

當部門專案越多,案件內容越複雜,人力執行能力高低不平,排擠的效應越大,每個專案通常都會有一個主要開發人員,而其負責的量通常也較大,並且可能會同時兼為多個專案的主要開發人員,如此工作分派不均的狀況將會在某個專案出現問題後,同步在其他專案爆發,造成時程的一併延後。

無奈的現實情況下,該努力些什麼?
1. 估算更合理且精確的專案時間。
2. 劃分真需要與假需要的功能項目。
3. 瞭解自己與共事者的產量。
4. 講實話的傲骨。
5. 減少加班,預留救人的時間。(囧)

1 則留言:

kolen 提到...

需不需要我幫你CC給.....XD。

張貼留言