[现代软件工程 讲义 ]

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

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

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

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

• 一个剧组排演话剧     (有导演, 有主角, 有配角, 有舞美设计, 有灯光师, 角色能随意替换么?)

• 一群画家集体创作 “百里长江图”     (你画一个局部, 我画一个局部, 如何构成一部好作品?)

• 一群医生/护士轮流值夜班     (有人值班一个晚上抢救了几个病人, 失败了几次;也有人值班时没人来求医, 谁好?)

• 一群老师教课     (有人讲得难, 有人讲得容易, 有不同的课程, 谁最有效率?)

• 一群编辑在出版社里出书     (有人碰到好题目, 有人碰到不靠谱的作者, 有人的书叫好,有人的书叫座, 有人的书冷门但是有热情,  谁是好编辑?)

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

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

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

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

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

“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):

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

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

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

我以前听说过第一个网站, 但是没用过。 我想象有两个团队:

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

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

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

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

比资历?

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

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

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

比效率?

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

背靠背评比? 根据所有其他人的评价来决定自己的绩效? 这样会发生小团体抱团, 以及劣币驱逐良币的现象。 做游戏的工程师一定听说过 "Valve" 这个公司,他们的员工手册很有意思,大家不妨看看。根据手册的描述, 他们的员工100% 的时间都可以自由支配, 做什么项目,在哪里工作, 等, 都可以由员工来决定。 但是在绩效评估上, 他们用了队友评估这一机制,得出下列四个值:

  技术等级/技术能力;  劳动生产力/结果;  对团队的贡献 (做一些工具让大家的工作更容易,帮助招人); 对产品的贡献 (除了本职工作外, 还有什么可以帮助产品的: 找bug, 预测用户的反馈,推广... )

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

  • 如果成员的行为只影响自己, 或者是探索式的行动,则不是坏事。 例如有些成员自行探索最新的技术, 但是最后决定不采用此技术。
  • 如果团队成员的行为影响整个团队 (例如 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% 的位置, 但是自己的球队因此变强, 成绩变好, 总的奖金数大大增加, 也许自己到手的报酬比以前还要高。

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

[2012年11月更新] 看到某著名互联网公司的一个二维评价体系,  纵坐标是 业绩, 横坐标是 价值观:

 野狗     明星-藏獒
   牧羊犬   
  狗     哈巴狗

网络的解释如下, 话糙理不糙:

刚入门的员工, 业绩和价值观都在培养阶段,  那就就是一条狗, 就像大街上乱跑的中华田园犬。 如果干了很久还没有业绩和价值观, 那就要赶人。

如果价值观不断提高, 但业绩平平, 则是听话的小白兔, 或者哈巴狗。 可以给机会, 但是机会不多了。

如果业绩很好, 但价值观不太对路 (不太听话?), 则是一条野狗。 要坚决清除, 不然功高震主...

如果业绩和价值观都取得双丰收, 那就是 明星 员工了, 可以用藏獒来命名!

其他的同事则属于勤勤恳恳的 牧羊犬.

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

现代软件工程 10 绩效管理相关推荐

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

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

  2. 2010年6月10日俱乐部北京活动,“如何做研发人员绩效管理?”主题研讨活动

    研发人员的考核与激励是俱乐部会员一直关注的话题,为使会员朋友们能更系统地了解到研发绩效考核的知识,6月10日下午CTO俱乐部第23期主题活动邀请到了研发咨询资深顾问曾学明老师,为会员们讲述" ...

  3. 绩效管理方式的升级,极有可能在2023年让组织绩效提升5%-10%

    组织所面临的市场环境在不断变化 近期疫情政策调整之后,旅游行业的发展迎来了一次小高潮.过去三年在疫情的影响下,使得旅游行业的公司面临着巨大的经营压力,当政策调整之后,面对着活跃的大量游客,旅游行业应该 ...

  4. OKR和绩效管理如何一起工作?

    对于人力资源CHO和人事经理来说,将员工的 OKR 绩效与年度评估和薪酬挂钩似乎很直观.虽然绩效管理在与目标和关键结果的联系上有其存在的意义,但必须充分认识到,薪酬不应该与OKR绩效挂钩,这样做可能会 ...

  5. 《敏捷开发绩效管理》扩展阅读(敏捷开发绩效管理,敏捷团队绩效管理)

    本文长期更新,请常来看看. •    序言 –  从代码行到故事点 敏捷估算:故事点与直接估算天数的差异 –  下一步? •    敏捷团队绩效管理 –  谁来管理团队中的个体? 同行压力(兼谈敏捷团 ...

  6. 【渝粤题库】陕西师范大学152212 政府绩效管理 作业(专升本)

    陕西师范大学 内 部 题 库 教育 (yuyueshool) 编制 陕西师范大学 内 部 题 库 教育 (yuyueshool) 编制 <政府绩效管理>作业 一.单选题 1.( )是指公共 ...

  7. 阿里巴巴组织能力建设(政委机制、绩效管理、人才发展等).pdf(附下载链接)...

    大家好,我是文文(微信:sscbg2020),今天给大家分享陈欢于2020年8月份所做的分享<阿里巴巴组织能力建设.pdf>,对阿里组织建设及人才管理感兴趣的伙伴们可以关注下. 本文档共4 ...

  8. 敏捷开发绩效管理之六:敏捷开发生产率(中)(功能点分析,FPA,简化的功能点)...

    这是敏捷开发绩效管理的第六篇.(之一,之二,之三,之四,之五,之六,之七) 直接估天数或用故事点估天数,都很"程序员".如果在项目的甚早期,面临与客户相关的报价问题,或高层领导要统 ...

  9. 敏捷开发绩效管理之七:敏捷开发生产率(下)(简化功能点分析,NESMA,两级简化)...

    这是敏捷开发绩效管理的第七篇.(之一,之二,之三,之四,之五,之六,之七) 续前文-- 功能点估算 第一级简化 上次说到只用数据+操作就能准确计算规模,听起来够简单了,但其实还不够. 谁能在刚拿出2页 ...

最新文章

  1. 机器人操作系统ROS Indigo 入门学习(1)——安装ROS Indigo【转】
  2. mysql事务提交模式
  3. 多域环境下people picker查找不到用户问题的解决(转载jianyi)
  4. 修改Sublime Text3左侧导航字号大小及行高
  5. 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询
  6. 顺序存储二叉树之寻找公共祖先节点
  7. 青蛙的约会 数论 拓展欧几里德
  8. UBuntu CMake工程配置基础
  9. 8.RabbitMQ实战 --- 从Web端管理RabbitMQ
  10. C++初学者该如何写程序?
  11. taro Button按钮组件
  12. 物联网安全 - 对称加密算法
  13. 机器学习系列8:逻辑回归的代价函数
  14. 知群产品经理必修TOP班-31期学习笔记
  15. 九步确定你的人生目标和制定达到目标的计划
  16. 「2020」拼多多数据分析笔试题 | 附解答
  17. neko vm 数据包装翻译
  18. 9行Python代码实现自动抠图 别再自己抠图啦
  19. 如何撰写论文的研究现状
  20. 在哪吒sdk中新建全志D1s方案的方法

热门文章

  1. ubuntu-server-18.04 设置开机启动脚本
  2. 写一些脚本的心得总结系列第3篇------同步数据到其他表
  3. jsonp模拟获取百度搜索相关词汇
  4. MySQL 授权远程登录(Ubuntu 环境)
  5. 一般python项目的结构
  6. 异常单据锁定涉及的数据库表
  7. C#中MSMQ消息队列测试疑问
  8. 年轻的程序员该如何规划自己的未来
  9. 2.1.3码元、波特、速率、带宽
  10. 【剑指offer】面试题50:第一个只出现一次的字符(java)