現(xiàn)代軟件工程之績效管理
我們前文講了怎樣衡量軟件工程師的能力, 工程師如何成長, 如何證明自己的成長, 等等. 這些都是在一個獨立的, 不受外界干擾的空間中做出來的判斷。 我們假設一個有能力的工程師, 到了另一個團隊, 仍然是一個有能力的工程師。
如何衡量個人在團隊中的績效?
如果一個工程師能夠成長,他/她就應該在團隊中發(fā)揮較大的作用。但是一個團隊中的每一個人都有各自的努力和作用, 如何衡量個人在團隊中的績效呢? 我們看看別的行業(yè)的例子:
一群人把一堆磚頭從A地搬到B地。
一個劇組排演話劇
(有導演, 有主角, 有配角, 有舞美設計, 有燈光師, 角色能隨意替換么?)
一群畫家集體創(chuàng)作 “百里長江圖”
(你畫一個局部, 我畫一個局部, 如何構成一部好作品?)
一群醫(yī)生/護士輪流值夜班
(有人值班一個晚上搶救了幾個病人, 失敗了幾次;也有人值班時沒人來求醫(yī), 誰好?)
一群老師教課
(有人講得難, 有人講得容易, 有不同的課程, 誰最有效率?)
一群學生做軟件工程項目
這篇博客講的是從管理者的角度出發(fā)如何管理一群人的績效。 一群人在一起做事, 事成之后, 就有排座次, 論功勞的問題 - 在有些團隊里, 事成之前就為功勞的事吵翻了
軟件團隊如何做人員的績效管理? 這個問題較難回答, 因為所有人的工作被集成在一個軟件產(chǎn)品中, 互相依賴, 產(chǎn)品功能被用戶贊揚或批評, 都不能簡單地完全對應于某一個人的工作。 有些功能看起來好, 有人會說 - 因為這個很容易… 有些功能用戶不喜歡, 當事人會說 -
“換別人來做, 可能還不如我呢.” 或者
“這是底層的問題”, 或者
“我已經(jīng)把我的問題解決了, 別的模塊沒跟上”, 或者
“PM 根本就沒設計好” 或者
“測試人員沒有好好測!” 當然, 還有 –
“用戶太蠢了 。。。"
在軟件工程這門課中, 幾個學生組成一個小組, 干活多的人和干活少的人都得到一樣的 “團隊成績”, 這似乎不利于調(diào)動積極性。 為了解決這個問題, 我給每個團隊一些浮動的分數(shù) - 相當于基本工資之外的獎金, 大家決定怎么分這個“團隊貢獻”的獎金。
有人會說, 根據(jù)工作量來算就好了!這會出問題 - 以前我寫過:
今天一個做技術推廣的朋友說他的老板非常重視“量的管理”,“質(zhì)” 則次之。
這使我想起偶爾看到一本書中的一段回憶文字,雖然不是 IT 行業(yè),但是有異曲同工之妙:
“。。。他是多年在聯(lián)合國工作的資深外交人員,對議事規(guī)則相當熟悉,不斷要求上臺發(fā)言。... 他在代表團內(nèi)始終是副代表代理常任代表,而他的待遇則依照在聯(lián)合國內(nèi)發(fā)言時間的多寡做決定。 …他每天游走于聯(lián)合國大廈各會議室間,進門后即登記發(fā)言,隨即靜聽先登記各代表發(fā)言內(nèi)容,他不需準備,輪到他時即席演說,最少三十分鐘,隨即到次一會議室照樣發(fā)言,…第二天將有關速記紀錄中他的發(fā)言輯錄起來,月底向祖國報銷,根據(jù)發(fā)言數(shù)量由政府核發(fā)薪資。
十月二十五日下午,大會中他將這項技術發(fā)揮盡致,多次依照議事規(guī)則相關條文要求發(fā)言,每次發(fā)言必長,引起與會代表極度反感。”
另外在軟件行業(yè), 如何衡量工作量這本身就是一個大問題.
根據(jù)每人代碼量, 每天統(tǒng)計進度? 有大牛報告 - 今天我重構了原來的代碼, 刪掉了原來的2000 行多余的程序, 那我今天的貢獻是 負的兩千?!
注釋, 空行算么? 如果算的話, 移山公司的果凍同學就高興了, 他每天快樂地寫注釋, 邊寫邊說 - 今年旅游的機票錢有了!
根據(jù)目標碼大小? 那我們不能用庫函數(shù)了?
…
有人建議按照角色來定位, 例如有豬, 雞和鸚鵡等, 問題是大多數(shù)鸚鵡都說自己是雞, 雞和豬都覺得自己是豬, 而且分量很重!
有人建議根據(jù)工作時間來衡量, 這規(guī)定一宣布, 大家都開始比誰走得晚, 另外, 有人報告 - 我周末的時候一直在想工作上的事, 這算工作時間么?
似乎所有的衡量方法都有致命的空子可以鉆。 在 <人件> 這本書中, “衡量勞動生產(chǎn)率” 和 “UFO” 是放在同一個小標題下的. 然而, “任何一種衡量方法都比完全不量要好” - 書中說。
這次上課的幾個團隊都有自己的點子:
***組(seven): 我們可以按照以上的9級來分,但是對于我們而言,大家在很大程度上都是同一級的勞動者....所以我們可以更加細分同一級的排名,比如將整個任務分為等量的小任務,每個人負責其中的一個,而最終大家的排名可以通過完成這樣任務的個數(shù)來決定。關于如何評價是否完成“任務”,可以通過功能性、是否準時來評價;而且當整個工程完結的時候,我們可以做一個review,包括功能、性能和代碼的評價,然后大家之間討論互評。
第二組(霸王):
對于浮動分數(shù),可以通過每個職位對于團隊的貢獻來添加。隊友之間根據(jù)各自的貢獻給出排序,***匯總得分。
一群學生做軟工項目 (PM, Dev, Test), PM:0.3(n*30)分, DEV: 0.5(n*30)分 test:0.2(n*30)分
在團隊合作中每個成員的貢獻度不僅僅取決于他的工作量,而且還取決于這份工作對團隊的意義有多大。我認為貢獻度的計算應遵循如下公式:
貢獻度 = 工作量 × 工作的影響力 × 工作的不可替代性
這個等式給我們的評測提供了一個方向。與直接估計貢獻度相比,分別估計三個分量顯得更可操作,準確性也更高。
//評點: 如果大家都想做 “不可替代的工作”, 怎么辦?
關于管理體系,可以天花亂墜的說很多,但實際和理論會差的很遠,我們并不能完全按照一個專業(yè)團隊去執(zhí)行。
大四是一個美好休閑的時光,很難要求大家訓練有素地執(zhí)行進度,我們只能盡可能友情提示大家一起干一些事,但我覺得做完整個工程應該沒有問題。
我個人覺得第五組的同學最適合去壟斷性國企。
當然, 在這片神奇的土地上, 還有這樣的事情: (從 http://weibo.com/trawor截屏而來)
我以前聽說過***個網(wǎng)站, 但是沒用過。 在五一勞動節(jié)的今天, 我想象:
***個團隊說: 我們花了幾個月的時間, 幾易其稿, 搜集大量用戶反饋, 做成這樣。。。
第二個團隊說: 我們一個星期就搞定了, 主要用了 IE “view source” 這一功能。
如何衡量兩個團隊成員的勞動生產(chǎn)率呢? 或者這已經(jīng)超越了勞動生產(chǎn)率的范疇, 到了知識產(chǎn)權, 職業(yè)道德的領域?
一幫學生臨時組成一個團隊, 用什么方法評比并沒有重大的影響, 大不了在期末成績上少一兩分。 但是軟件公司的團隊就不同了, 不合理的績效考核不但影響各人的收入, 而且會影響人員的士氣, 流動, 后續(xù)的合作和產(chǎn)品質(zhì)量,不能不慎重。
比資歷?
軟件行業(yè)的競爭有”贏者通吃”的規(guī)律, 一個快要被市場淘汰的產(chǎn)品不能說: 我們是***進入這一市場的, 我理應繼續(xù)占有足夠份額! 軟件團隊人員也不能說, 我來的早, 所以我的報酬就應該多!
大鍋飯?
所有人都評 “優(yōu)”, 大家平分錢, 好么? 優(yōu)秀的人會離開, ***會剩下平庸的人在過平均主義 - 也許整個團隊都被淘汰了。 同一團隊的成員報酬能差別多大? 我們看看職業(yè)籃球的一個例子:
1997-98 賽季, 邁克爾·喬丹掙了八千萬美元。 和他同一個隊的隊友 Joe Kleine當年掙了27萬美元。 兩者相差將近300倍! 如果兩人掙錢平均分, 誰會離開? 球隊因此變強還是變?nèi)?
比效率?
我們也知道軟件開發(fā)人員的效率有很大的差別, ***的程序員的效率是普通程序員的10倍; 有些效率的差別還有正負之分。 一個心不在焉的程序員可以一天寫 2000 行代碼, 然后別的開發(fā)/測試人員要花很多時間來修復其中的缺陷, 這些同事本來的任務就被耽誤了; 同時, 一個非常用心的程序員發(fā)現(xiàn)可以重用以前的穩(wěn)定模塊, 他花很多時間重構和測試, ***只修改了500行代碼, 代碼的缺陷特別少, 這樣無形中節(jié)約了別的同事的大量時間。
背靠背評比? 根據(jù)所有其他人的評價來決定自己的績效? 這樣會發(fā)生小團體抱團, 以及劣幣驅(qū)逐良幣的現(xiàn)象。
比不犯錯誤? 軟件項目的進展不是一帆風順的, 總有問題發(fā)生, 出現(xiàn)了問題, 就一定會記在相關人員的帳上,以便總結提高。 但是一定會作為績效評估的依據(jù)? 那倒不一定。
如果成員的行為只影響自己, 或者是探索式的行動,則不是壞事。 例如有些成員自行探索***的技術, 但是***決定不采用此技術。
如果團隊成員的行為影響整個團隊 (例如 build break 導致daily build 失敗), 則要注意。 在一個里程碑中可以統(tǒng)計誰導致這樣的錯誤最多。 對這樣的人可以采取 <移山之道> 中提到的 build master 方法處理。
如何區(qū)別對待?
團隊中總有幾個人的資歷, 成績, 口碑差不多, 這時要怎么分出一二三呢? 微軟公司流傳著“lifeboat drill” [救生艇練習] 的辦法 - 如果大家在海上遇險, 一幫人擠在救生艇上, 眼看就要沉沒, 必須扔一個人下海其他人才能得救, 你選誰呢? 或者是你要開始一個新的項目, 只能帶走一個人, 你會帶誰呢? 這當然拷問大家的直覺, 但直覺往往是對的。
在玩過這些游戲之后, 一個一維數(shù)組就產(chǎn)生了, 這時候就可以區(qū)別對待, 分三段, 來一個好/中/差。 或者想GE 等公司那樣, 給***的 20% 某些待遇; 中間的 70% 某個待遇; ***的 10% 某個明顯不同的待遇。
當然這種一維數(shù)組總是有一些問題, 因為人的能力, 具體工作項目完成情況, 在一定時間內(nèi)的貢獻是相互影響但是又是相互獨立的. 如果二十人的團隊, 大家的確做得差不多, 什么人去當那兩個 10%呢? 這是折磨很多經(jīng)理的難題。在統(tǒng)計意義上, 一個幾百人的大公司總有一小部分人不適合職位要求, 讓排名***的 10% 驚醒一下很好。 但是公司里往往層層把10% 的指標下放, ***到了基層團隊. 盡管兩個團隊的貢獻和管理水平有很大差別, 這兩個團隊的經(jīng)理都必須得選出10% 的成員來作為 [最差的成員]。 差的團隊, 這些人不缺; 好的團隊, 它的經(jīng)理陷入了一個困境 - 他/她必須把表現(xiàn)挺不錯的團隊成員歸到 10% 里。
為了更客觀地反映員工績效的不同的因素, 有些公司實施過二維的評價體系:
完成任務維度:主要由團隊成員和直接經(jīng)理商量年度目標, 直接經(jīng)理有較多的自由度決定 好/中/差. 例如大部分成員都可以得到 “好”這一評價。
團隊貢獻維度:還是嚴格根據(jù)人員百分比, 評出團隊中***的20%, 中間的70%, 和最需要改進的 10%.
在理想條件下, 把任務做得很好, 當然貢獻會在最上面的 20%; 做的最差的, 貢獻應該是***的 10%. 但是在實踐中要復雜得多, 有些人因為任務相對簡單, 完成的很好, 但是對整個集體的貢獻一般, 這種人可以得到 [好, 70%] 的位置。 有些人敢于做很難的事情, 結果未必令人滿意, 但是對團隊很重要, [中, 20%] 應該是一個合適的評價。
還用籃球做一個例子, 假設NBA的球星 科比·布萊恩特 到中國某俱樂部打球, 他由于種種原因, 沒有打出自己頂峰時的水平, 低于自己和俱樂部的期望, 但是和俱樂部所有球員相比還是高人一籌, 他應該得 [差, 20%] 的評價. 與此同時, 一個剛入隊的球員, 大部分時間打替補, 時有超水平表現(xiàn), 他的評價應該是 [好, 10%]. 與此同時, 在科比到來之前能拿 [好, 20%] 的球員, 則有些要拿 [好, 70%], 因為科比占用了一個 20% 的位置, 但是自己的球隊因此變強, 成績變好, 總的獎金數(shù)大大增加, 也許自己到手的報酬比以前還要高。
當領導給員工評價時, 員工的績效可以從兩個維度去評價, 就更好辦一些了. 當然, 相應的流程和文字工作要做得更多 - 如果員工是公司最寶貴的財產(chǎn), 多花一些流程和文字又算得了什么呢?
各個公司在實踐中會有很多不同的做法, 那么你們團隊是怎么衡量績效, 決定工資, 獎金的?
原文鏈接:http://www.cnblogs.com/xinz/archive/2011/10/10/2205045.html
【編輯推薦】