现代软件工程之绩效管理

开发 项目管理
今天我们将介绍的是如何在软件开发中,对开发人员进行绩效管理。如何帮助工程师成长, 如何证明自己的成长。

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

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

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

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

  一个剧组排演话剧

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

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

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

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

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

  一群老师教课

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

  一群学生做软件工程项目

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

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

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

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

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

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

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

  “用户太蠢了 。。。"

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

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

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

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

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

  十月二十五日下午,大会中他将这项技术发挥尽致,多次依照议事规则相关条文要求发言,每次发言必长,引起与会代表极度反感。”

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

  根据每人代码量, 每天统计进度? 有大牛报告 - 今天我重构了原来的代码, 删掉了原来的2000 行多余的程序, 那我今天的贡献是 负的两千?!

  注释, 空行算么? 如果算的话, 移山公司的果冻同学就高兴了, 他每天快乐地写注释, 边写边说 - 今年旅游的机票钱有了!

  根据目标码大小? 那我们不能用库函数了?

  …

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

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

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

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

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

  第二组(霸王):

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

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

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

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

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

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

  关于管理体系,可以天花乱坠的说很多,但实际和理论会差的很远,我们并不能完全按照一个专业团队去执行。

  大四是一个美好休闲的时光,很难要求大家训练有素地执行进度,我们只能尽可能友情提示大家一起干一些事,但我觉得做完整个工程应该没有问题。

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

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

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

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

  第二个团队说: 我们一个星期就搞定了, 主要用了 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%.

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

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

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

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

原文链接:http://www.cnblogs.com/xinz/archive/2011/10/10/2205045.html

【编辑推荐】

  1. 浅谈项目管理中该如何review与重构
  2. 浅析关于物流客户服务平台规划讨论
  3. 软件开发团队中的个人绩效评价
  4. 项目设计与范围管理之项目启动
  5. AgileEAS.NET实现医院信息系统的解决方案
责任编辑:彭凡 来源: 博客园
相关推荐

2021-12-03 09:00:00

企业测试软件

2011-08-30 10:03:59

软件工程

2015-11-18 17:46:37

软件工程

2011-10-08 10:43:06

软件工程

2011-12-01 09:20:41

软件工程

2023-03-31 08:29:54

设计模式软件工程架构师

2011-05-10 09:22:28

软件工程

2023-03-10 07:43:50

UML图OOA面向对象

2011-09-07 08:59:23

2011-04-15 13:39:05

云时代软件工程之挑战及

2011-09-08 10:26:49

2020-06-05 12:01:11

软件工程C++Python

2023-06-05 10:07:13

软件工程平台工程师

2010-06-18 14:06:17

UML软件工程

2017-03-20 11:40:28

Google软件工程经验

2022-01-16 07:12:30

软件工程师吵架开发

2009-07-24 09:43:09

软件工程软件开发

2012-01-09 09:09:15

2022-10-19 15:34:11

架构软件安全

2024-03-05 11:30:00

Kubernetes管理前端
点赞
收藏

51CTO技术栈公众号