Saturday, March 7, 2009

從程式員到管理

Jan 15, 2009
從程式員到管理from 獨孤木 by qing

從程式員「晉身」至管理階級,似乎是許多程式員對自己職場生涯的重要規劃。許多人認為程式員這一行是「吃青春飯」,只適合年輕體力充沛之際,一旦逐漸年老力衰,不堪長期加班的勞累,兼之以對新技術玩意的掌握不如新進的長江後浪,所以在過了程式員的「黃金時期」之前,許多程式員都會預先規劃好朝管理性的工作做轉換。當然,這樣的想法大有待商確的空間,許多優秀的程式員將程式設計當做是一生的志業,即使年紀逐漸老邁,但卻也始終寶刀未老,甚至愈發光芒、愈顯其價值。但即使如此,不可否認的,仍有許多程式員相當期待能由工程的職務轉換至管理職務,從單純的程式設計工作內容,轉移到以管理技術團隊為主的工作。



除了自我職場生涯規劃的原因之外,有許多在程式設計領域表現出眾的程式員,也很容易被「拔擢」而進入管理的工作領域中,成了帶領技術團隊的領導者。



不論是因為想要擠身管理階級以更符合社會普遍對工作型態轉變的期待,或者是因為想要避去心中視為「苦力」的程式設計工作,而進到技術管理的工作領域的程式員,還是單純因為程式設計表現優秀,因而被授以管理大任的程式員,面對他們的工作,多半都有一段水土不服、無法適應的時間。甚至有些優秀的程式員,在管理工作上,始終無法表現的如他們在程式設計工作上般的卓越,甚至連一般水平都不到。即使你具備程式設計的背景,甚至是名優秀的程式員,你所要管理的也是程式設計的開發團隊,但管理他們以及管理進行中的開發專案,和單純的開發工作,就是存在著截然不同的模式。倘若無法跳出純程式員的思考及角色模式,便不容易克服在管理時可能會遭遇到的管理問題。



單純扮演一名程式員,和管理(或說帶領著)一群程式員最大的差別在於,當你身為一名程式員時,你的任務極為單純,便是在給定的時程內,妥善的完成自己被指派的工作,所以你可以十分專注的解決自己所遭遇到的問題。而當你的工作是要帶領一群程式員以分工合作的方式來完成開發專案時,你的焦點不應該放在個人,而是放在整個團隊上,而這樣子的心態轉變,正是許多程式員在轉型至管理工作時,所不容易克服的。



或許你有過這樣子的經驗,你初次被賦予一個領導開發團隊的工作,面對被給定的開發目標,你試著將工作逐一的展開為WBS(work
breakdown structure),將團隊中的成員人名填進去,針對WBS中的每一項工作,你自己估算其期限。接著,你召開專案啟動會議,把成員們召集起來,並且公佈你依據專案期限及目標所規劃的WBS,也讓成員們知道自己被指派了那些工作。你或許還指派了若干件工作在你身上,因為你的程式員背景,讓你深信自己在專案管理的餘暇也能為專案貢獻一些心力(或許這是因為你認為專案管理其實也佔用不了太多的時間)。



你手上拿著WBS心想,接下來專案便會依照我的預期,每個成員也會像我當初一樣把期限當做是最重要的事情,逐一的完成每個工作項目,最後專案便能如期的完成並交付,這實在是理想極了。



隨著日子一天一天的過去,你或許忙於自己也被指派的開發項目,而疏於了解其他成員的情況。但漸漸的,在一些固定的查核點上,你開始發現某些工作項目未能如預期完成,負責這些工作項目的成員總是告訴你,已經完成了90%,再多給他一些時間,一定能夠完成。但這些工作項目,有些卻像是無法抵達終點一樣,始終未能完成。延遲的工作項目愈累積愈多,但你始終相信,人力定可回天,憑著程式員的熱血以及可以無止盡燃燒的肝,之後的工作項目其時程一定可以壓縮。



你或許開始在心中質疑延遲的成員們不夠認真,因為同樣的工作項目,倘若交付你來執行,根本不需要這麼多的時間。你或許還開始將其他成員未能及時完成的項目攬在自己身上,以便讓其他成員撥出時間,以完成其他該繼續完成的項目。壓在你身上的工作也愈來愈多,使得你更沒有心力顧及其他成員的情況。愈來愈多的工作發生延遲的情況,為了讓專案仍然如期完成,你或許認為這專案其實不需要那麼多的測試時間,因此決定加以壓縮。



由於你在專案中也如火如荼的埋首於持續加諸在你身上的工作,更是愈來愈不可能分身關心其他成員遭遇到的瓶頸,更甭提為他們尋求適當的解決方案。陷於膠著的成員愈來愈多,專案延遲的情況愈來愈嚴重,堆在你身上的工作也愈來愈多。最後,專案過了期限仍未能交付,同時也因為壓縮了測試時間,也使得軟體品質未能達到一定的水平,專案便在如此不甚成功的氣氛下漸漸收尾。你所帶領的團隊或許在這樣的模式下,持續一個又一個失敗的專案。你開始養成指責團隊成員的習慣,你心裡想,如果這些傢伙都能像我看齊,多在技術層次上提昇,多像我一樣為專案全心全意的付出,那這些專案那有不成功的道理?你的團隊成員既無法從你身上學習到任何東西,更因為你不友善的態度開始疏遠你,也不願意和你打交道,對於你在開發過程所下達的指令也愈來愈有陽奉陰違的傾向,最後你發現你完全管理不了這個團隊。



上述的情境,便是從程式員轉職成為開發團隊的領導者時,時常會遭遇到的種種問題。或許事情沒那麼糟,所有不好的情形都發生了,但是總會有幾項問題發生在我們的管理經驗中。



帶領一個開發團隊,最重要的基礎便是「人」
。軟體產業是一個以「人」為主的產業。人的管理是軟體開發管理的根本。做為一個軟體團隊的管理者,最核心的工作便是了解你的團隊成員,關心他們的工作動態甚至是情緒,並且與他們愉快的一起生活及工作。你需要了解每個成員的專長及技能取向,以便在安排工作時,能夠將工作安排給適當的成員,以達到最佳的效率及品質。每個人都是獨一無二的,而不是WBS中可以任意交換的man-day或man-hour。



你不能忽略專案管理工作對你的負載,甚至你不能假設專案管理工作其實不會佔去太多的時間。即使你精於程式設計,也不應該在開發專案中將和程式設計相關的工作指派給自己
- 你還有更重要的工作要做,也就是關注整個專案的狀態,關注每個成員的情況。或許你是整個團隊中技術能力最強的一位,但這不意謂著你得挑起開發重擔。開發重擔只會讓你無暇顧及管理工作。但強大的技術能力,讓你可以做為每位團隊成員的後盾,你更加能夠察覺他們正深陷於某個技術泥淖中,而為他們發掘出問題,並且為他們提供解決方案。在這個過程裡頭,你無形中將你的技術傳播出來,並且擴散到整個團隊中,漸漸的便能夠提昇整個團隊的整體戰力。同時,你會因此而贏得團隊成員的尊敬,這能持續建立你在團隊中的權威,而且那是來自於真正的尊敬,這樣的尊敬會使得團隊成員更願意相信你所規劃的工作、時程,設定的進行步調與節奏。



身為技術高手的你或許會養成對時程過度樂觀的習慣,你能達成自己所設定的期限,不意謂著你所指派的成員也能做到。任何時程的規劃,都應該和工作的被指派者討論並取得其承諾。你更不應該過度低估測試所需的時間,甚至總是壓縮測試的時程。開發專案並不是只有程式設計一環。



技術能力出眾的程式員轉換至團隊的管理工作,其技術能力絕對是一大正面的助益。但過去的技術能力和背景,有時也會形成不易跨越的障礙,因而影響到管理的工作。管理職務不必然是程式員的職業發展目標,但一旦你開始了你的管理生涯,那麼留意本文中所提到的問題,應能對你提供一些幫

No comments: