现代软件工程讲义 12 绩效管理

我们前文讲了怎样衡量软件工程师的能力,  工程师如何成长, 如何证明自己的成长, 等等. 这些都是在一个独立的, 不受外界干扰的空间中做出来的判断。 我们假设一个有能力的工程师, 到了另一个团队, 仍然是一个有能力的工程师。

如何衡量个人在团队中的绩效?

如果一个工程师能够成长,他/她就应该在团队中发挥较大的作用。但是一个团队中的每一个人都有各自的努力和作用, 如何衡量个人在团队中的绩效呢?  我们看看别的行业的例子:

• 一群人把一堆砖头从A地搬到B地。

• 一个剧组排演话剧

    (有导演, 有主角, 有配角, 有舞美设计, 有灯光师, 角色能随意替换么?)

• 一群画家集体创作 “百里长江图”

    (你画一个局部, 我画一个局部, 如何构成一部好作品?)

• 一群医生/护士轮流值夜班

    (有人值班一个晚上抢救了几个病人, 失败了几次;也有人值班时没人来求医, 谁好?)

• 一群老师教课

    (有人讲得难, 有人讲得容易, 有不同的课程, 谁最有效率?)

• 一群学生做软件工程项目

 

这篇博客讲的是从管理者的角度出发如何管理一群人的绩效。  一群人在一起做事, 事成之后, 就有排座次, 论功劳的问题 - 在有些团队里, 事成之前就为功劳的事吵翻了 Smile 

 

软件团队如何做人员的绩效管理? 这个问题较难回答, 因为所有人的工作被集成在一个软件产品中, 互相依赖, 产品功能被用户赞扬或批评, 都不能简单地完全对应于某一个人的工作。 有些功能看起来好, 有人会说 - 因为这个很容易…  有些功能用户不喜欢, 当事人会说 -

“换别人来做, 可能还不如我呢.” 或者

“这是底层的问题”, 或者

“我已经把我的问题解决了, 别的模块没跟上”, 或者

“PM 根本就没设计好” 或者

“测试人员没有好好测!” 当然, 还有 –

“用户太蠢了 。。。"  

 

在软件工程这门课中, 几个学生组成一个小组, 干活多的人和干活少的人都得到一样的 “团队成绩”, 这似乎不利于调动积极性。 为了解决这个问题, 我给每个团队一些浮动的分数 - 相当于基本工资之外的奖金, 大家决定怎么分这个“团队贡献”的奖金。

 

有人会说, 根据工作量来算就好了!这会出问题 - 以前我写过:

今天一个做技术推广的朋友说他的老板非常重视“量的管理”,“质” 则次之。

这使我想起偶尔看到一本书中的一段回忆文字,虽然不是 IT 行业,但是有异曲同工之妙:

“。。。他是多年在联合国工作的资深外交人员,对议事规则相当熟悉,不断要求上台发言。... 他在代表团内始终是副代表代理常任代表,而他的待遇则依照在联合国内发言时间的多寡做决定。 …他每天游走于联合国大厦各会议室间,进门后即登记发言,随即静听先登记各代表发言内容,他不需准备,轮到他时即席演说,最少三十分钟,随即到次一会议室照样发言,…第二天将有关速记纪录中他的发言辑录起来,月底向祖国报销,根据发言数量由政府核发薪资
十月二十五日下午,大会中他将这项技术发挥尽致,多次依照议事规则相关条文要求发言,每次发言必长,引起与会代表极度反感。”

另外在软件行业, 如何衡量工作量这本身就是一个大问题.

  1. 根据每人代码量, 每天统计进度? 有大牛报告 - 今天我重构了原来的代码, 删掉了原来的2000 行多余的程序, 那我今天的贡献是 负的两千?!
  2. 注释, 空行算么? 如果算的话, 移山公司的果冻同学就高兴了, 他每天快乐地写注释, 边写边说 - 今年旅游的机票钱有了!
  3. 根据目标码大小? 那我们不能用库函数了?

有人建议按照角色来定位, 例如有猪, 鸡和鹦鹉等, 问题是大多数鹦鹉都说自己是鸡, 鸡和猪都觉得自己是猪, 而且分量很重!  

有人建议根据工作时间来衡量,  这规定一宣布, 大家都开始比谁走得晚,  另外,  有人报告 - 我周末的时候一直在想工作上的事, 这算工作时间么? 

 

似乎所有的衡量方法都有致命的空子可以钻。 在 <人件> 这本书中, “衡量劳动生产率” 和 “UFO” 是放在同一个小标题下的. 然而, “任何一种衡量方法都比完全不量要好” - 书中说。

 

这次上课的几个团队都有自己的点子:

第一组(seven):  我们可以按照以上的9级来分,但是对于我们而言,大家在很大程度上都是同一级的劳动者....所以我们可以更加细分同一级的排名,比如将整个任务分为等量的小任务,每个人负责其中的一个,而最终大家的排名可以通过完成这样任务的个数来决定。关于如何评价是否完成“任务”,可以通过功能性、是否准时来评价;而且当整个工程完结的时候,我们可以做一个review,包括功能、性能和代码的评价,然后大家之间讨论互评。

 

第二组 (霸王):  

对于浮动分数,可以通过每个职位对于团队的贡献来添加。队友之间根据各自的贡献给出排序,最后汇总得分。

 

第三组 (铷铯):

一群学生做软工项目 (PM, Dev, Test), PM:0.3(n*30)分, DEV: 0.5(n*30)分 test:0.2(n*30)分

 

第四组 (take it & go):

在团队合作中每个成员的贡献度不仅仅取决于他的工作量,而且还取决于这份工作对团队的意义有多大。我认为贡献度的计算应遵循如下公式:

贡献度 = 工作量 × 工作的影响力 × 工作的不可替代性

这个等式给我们的评测提供了一个方向。与直接估计贡献度相比,分别估计三个分量显得更可操作,准确性也更高。

          //评点: 如果大家都想做 “不可替代的工作”, 怎么办?

第五组(banana):

关于管理体系,可以天花乱坠的说很多,但实际和理论会差的很远,我们并不能完全按照一个专业团队去执行。
大四是一个美好休闲的时光,很难要求大家训练有素地执行进度,我们只能尽可能友情提示大家一起干一些事,但我觉得做完整个工程应该没有问题。

我个人觉得第五组的同学最适合去垄断性国企。 Smile

 

当然, 在这片神奇的土地上, 还有这样的事情: (从 http://weibo.com/trawor 截屏而来)

image

 

我以前听说过第一个网站, 但是没用过。 在五一劳动节的今天, 我想象:

第一个团队说: 我们花了几个月的时间, 几易其稿, 搜集大量用户反馈, 做成这样。。。

第二个团队说: 我们一个星期就搞定了, 主要用了 IE “view source” 这一功能。

 

如何衡量两个团队成员的劳动生产率呢?  或者这已经超越了劳动生产率的范畴, 到了知识产权, 职业道德的领域?

 

 

一帮学生临时组成一个团队, 用什么方法评比并没有重大的影响, 大不了在期末成绩上少一两分。 但是软件公司的团队就不同了, 不合理的绩效考核不但影响各人的收入, 而且会影响人员的士气, 流动, 后续的合作和产品质量,不能不慎重。   

 

比资历?

软件行业的竞争有”赢者通吃”的规律, 一个快要被市场淘汰的产品不能说: 我们是最先进入这一市场的, 我理应继续占有足够份额!  软件团队人员也不能说, 我来的早, 所以我的报酬就应该多!

 

大锅饭?

所有人都评 “优”, 大家平分钱, 好么?  优秀的人会离开, 最后会剩下平庸的人在过平均主义 - 也许整个团队都被淘汰了。 同一团队的成员报酬能差别多大?  我们看看职业篮球的一个例子:

1997-98 赛季, 迈克尔·乔丹挣了八千万美元。 和他同一个队的队友 Joe Kleine 当年挣了27万美元。 两者相差将近300倍! 如果两人挣钱平均分, 谁会离开? 球队因此变强还是变弱?

 

比效率? 

我们也知道软件开发人员的效率有很大的差别, 一流的程序员的效率是普通程序员的10倍; 有些效率的差别还有正负之分。  一个心不在焉的程序员可以一天写 2000 行代码, 然后别的开发/测试人员要花很多时间来修复其中的缺陷, 这些同事本来的任务就被耽误了; 同时, 一个非常用心的程序员发现可以重用以前的稳定模块, 他花很多时间重构和测试, 最后只修改了500行代码, 代码的缺陷特别少, 这样无形中节约了别的同事的大量时间。

 

背靠背评比? 根据所有其他人的评价来决定自己的绩效? 这样会发生小团体抱团, 以及劣币驱逐良币的现象。

 

比不犯错误?  软件项目的进展不是一帆风顺的, 总有问题发生, 出现了问题, 就一定会记在相关人员的帐上,以便总结提高。  但是一定会作为绩效评估的依据? 那倒不一定。

  • 如果成员的行为只影响自己, 或者是探索式的行动,则不是坏事。 例如有些成员自行探索最新的技术, 但是最后决定不采用此技术。 
  • 如果团队成员的行为影响整个团队 (例如 build break 导致daily build 失败), 则要注意。  在一个里程碑中可以统计谁导致这样的错误最多。 对这样的人可以采取 <移山之道> 中提到的 build master 方法处理。

 

如何区别对待?

团队中总有几个人的资历, 成绩, 口碑差不多, 这时要怎么分出一二三呢?  微软公司流传着“lifeboat drill” [救生艇练习] 的办法 - 如果大家在海上遇险, 一帮人挤在救生艇上, 眼看就要沉没, 必须扔一个人下海其他人才能得救, 你选谁呢?  或者是你要开始一个新的项目, 只能带走一个人, 你会带谁呢?  这当然拷问大家的直觉, 但直觉往往是对的。 

在玩过这些游戏之后,  一个一维数组就产生了, 这时候就可以区别对待, 分三段, 来一个好/中/差。  或者想GE 等公司那样,  给最好的 20% 某些待遇; 中间的 70% 某个待遇; 最后的 10% 某个明显不同的待遇。

 

当然这种一维数组总是有一些问题, 因为人的能力, 具体工作项目完成情况, 在一定时间内的贡献是相互影响但是又是相互独立的.  如果二十人的团队, 大家的确做得差不多, 什么人去当那两个 10%呢?  这是折磨很多经理的难题。在统计意义上, 一个几百人的大公司总有一小部分人不适合职位要求, 让排名最后的 10% 惊醒一下很好。 但是公司里往往层层把10% 的指标下放, 最后到了基层团队.  尽管两个团队的贡献和管理水平有很大差别, 这两个团队的经理都必须得选出10% 的成员来作为 [最差的成员]。  差的团队, 这些人不缺; 好的团队, 它的经理陷入了一个困境 - 他/她必须把表现挺不错的团队成员归到 10% 里。    

 

为了更客观地反映员工绩效的不同的因素,  有些公司实施过二维的评价体系:

 

完成任务维度: 主要由团队成员和直接经理商量年度目标, 直接经理有较多的自由度决定 好/中/差.  例如大部分成员都可以得到 “好”这一评价。

团队贡献维度: 还是严格根据人员百分比, 评出团队中最好的20%, 中间的70%, 和最需要改进的 10%.

 

image

 

在理想条件下, 把任务做得很好, 当然贡献会在最上面的 20%;  做的最差的, 贡献应该是最低的 10%.  但是在实践中要复杂得多,  有些人因为任务相对简单, 完成的很好, 但是对整个集体的贡献一般, 这种人可以得到 [好, 70%] 的位置。 有些人敢于做很难的事情, 结果未必令人满意, 但是对团队很重要,  [中, 20%] 应该是一个合适的评价。

 

还用篮球做一个例子, 假设NBA的球星 科比·布莱恩特 到中国某俱乐部打球, 他由于种种原因, 没有打出自己顶峰时的水平, 低于自己和俱乐部的期望, 但是和俱乐部所有球员相比还是高人一筹, 他应该得 [差, 20%] 的评价.  与此同时, 一个刚入队的球员, 大部分时间打替补, 时有超水平表现, 他的评价应该是 [好, 10%]. 与此同时, 在科比到来之前能拿 [好, 20%] 的球员, 则有些要拿 [好, 70%],  因为科比占用了一个 20% 的位置, 但是自己的球队因此变强, 成绩变好, 总的奖金数大大增加, 也许自己到手的报酬比以前还要高。

 

当领导给员工评价时,  员工的绩效可以从两个维度去评价, 就更好办一些了. 当然, 相应的流程和文字工作要做得更多 - 如果员工是公司最宝贵的财产, 多花一些流程和文字又算得了什么呢?  

 

各个公司在实践中会有很多不同的做法, 那么你们团队是怎么衡量绩效, 决定工资, 奖金的?

posted @ 2011-10-10 09:14  SoftwareTeacher  阅读(1661)  评论(3编辑  收藏  举报