一、引子
以我个人的从业经验认为,研发人员的量化考核,始终是一个世界难题。正巧不久前在园子里看到了“一切不谈考核的管理都是扯淡!”一文(下面简称为“扯淡”),该文实际是一篇软文,是想推广一个带绩效管理功能的项目管理系统。这个实际的系统我虽然没有用过,但作者把该系统的设计思想阐述的还是很清楚的。文章的评论也比较多,多数人认为作者比较理想化。 从文章的支持,反对数来看, 目前(2022-7-15)11反对 6支持,也是反对多于支持。
评论较多的是——“太理想化”,锅叔就是如此评论的,因为在评论篇幅所限,所以写一篇随笔,来系统说一下,“太理想化的”含义。"扯淡"中作者提出的绩效方式,其实也是我个人曾经思考过的,客观的说,这种设计逻辑是很自洽的,理论上完美。但随着实践阅历经验的增加,锅叔已经不觉得这是一种实际可行的绩效方案了。
另外,想多写几句的原因是,虽然在园子里,大家作为业内参与者,多数能够识别出,这是一种“很理想化的”方案,但对于非专业,或者半专业人士, 他们很可能觉得这是一个合理方案。而这些半专业,或者非专业的人之中,可能就包含了你的BOSS和高管们,这里希望老板们在看到那篇软文的同时,也能看到点不同观点 ,三思而后行 :-)。
二、“扯淡”的观点概括

“扯淡”的原文,可以点链接过去看。 在这里也还是简要的概括下
作者的主要意思:
0. “人性化”管理,是一种消极管理行为,是管理不作为、管理无能的遮羞布!
1. 任务的分配, bug 的提出 使用 统一系统。
2. 分配任务的人需要对每个任务进行评估, 包括 难度 和标准产出, 可以理解为 设置一个完成得分
3. 每个bug的提出,根据影响等,也设置 一个扣分。
4. 员工对项目的投入实际工时,也记录在系统中。
5. 按周期搞一个下对上,上对下的"主观"评分
6. 基于以上各种得分, 设计一个算法,进而就可以归一化的比较员工的表现如何了。
7. 用我们的管理系统,就可以实现上面的6点
以上能带的神奇体验
0. 员工肯定不敢轻易偷懒,因为你偷懒而你的同事不偷懒,那么这7个数字就会让你原形毕露;
1. 员工自主性很高,如果这段时间工作效率很高,那完全可以适当休息一下,如果这段时间工作遇到难题,为了不让自己的数字变得难看,自己都会主动加班;
2. 员工对团队公平充满信心,他们会相信干得多干得好就一定会有回报;
3. 员工之间更加注重职业能力的竞争,而不是职业关系的经营,同事关系更加单纯;
4. 员工会更加注重工作质量,大幅减少返工;
5. 小人和庸才在团队中很难生存,而团队越来越能聚集优秀的人才;
6. 任何一个新人加入,这套机制都可以帮助管理者在很短时间内就对新人做出准确的评价,通常仅需一周,让招聘变得更容易;
7. 管理者会发现员工晋升、奖金发放等工作不再令人头疼;
8. 工作和人情分家,工作是工作,人情是人情,工作合作中少了人情的牵绊,你会发现整个团队的工作效率都大幅提升了;
9. 管理者会感受到前所未有的那种对团队的掌控感,包括对项目进度、项目质量、下属人员的掌控感。
等等等等。
三、世界难题难在哪里?

研发绩效之所以会成为世界难题, 显然不是因为前无古人,能想到这样“客观数值化”的绩效方法, 也不是因为技术限制,实现不出这样的项目管理系统。所以,想出了这样的方法,做出了这样的系统, 也未必能够解决绩效的世界难题。
“难量化”是研发人员难以客观考核的根本原因
考虑下田径运动员如何绩效,这个非常简单,绝对公平的环境, 更高、更快、更强的,就更优秀。 相信没有人会有异议。
销售人员的绩效也一般认为相对简单, 请继续考虑下, 如何对你公司销售人员进行绩效考核呢?“按签单销售额算提成啊!再好理解不过,根本无需多言,所有人都会觉得很公平,卖的多赚得多”。
然而深想一下,可能未必这么简单。比如你们公司有两款产品,一款“王者农药”,一款“星际争霸2”(RTS时代已经逝去,星际2因为经营惨淡,已经停止更新),如果自愿选择, 你觉得会不会有人愿意去卖星际2? 如果强制分配,但使用同样的绩效方式,那么卖星际2的人是不是很容易离职?
但公司高层此时相信,RTS游戏的未来光明 ,力推星际2,打算调动下星际2 销售运营人员的积极性,给他们的销售任务设置一个“难度值”,那你觉得这个难度值,怎么设,才会让大家觉得公平呢? 再设想,如果“王者农药”打算扩展海外市场,同时推广,韩国 和 津巴布韦。 那么给推广 津巴布韦的销售人员是不是应该设置一个更高的难度值,具体应该设置多少才客观科学呢?
从上面可以看出, 量化的基础是可比性,可比性要求客观条件完全相同,即大家在相同条件下做相同的事。同时,还要求多人次重复的参与,人类历史上只进行过一次的事情,是没法评价绩效的。比如大家都去津巴布韦 推广星际2, 推广的区域发达程度都接近,那这些销售人员的业绩具有可比性。先拍脑袋定个提成,试运行一段时间,发现大家都吃不上饭,或者大家都成了百万富翁,就可以根据重复形成的历史经验,调整到一个大家刚好温饱的提成比例。
研发活动中人员的可比性
研发活动的可比性是较低的。
客观条件:大家基本上不可能做同样的一件事。你写登录,我写用户管理,那么写登录和写用户管理的效率是无法客观比较的。或者你写web的用户登录, 我写IOS 的用户登录。 同样无法比较。
多次重复:完全相同的功能不可能开发两次。他写上一个APP的登录只用了3天, 你为什么用了9天? 肯定有不同啊, 框架更新, 需求更多,UI效果更复杂。如果完全一样的代码,那就直接复制好了。
难度系数的客观性
当两件事物,无法直接比较的时候就会引入一个难度系数,从而让他们可以对比。这非常容易理解,如大家熟悉的跳水运动, 运动员做不同动作有不同的难度系数,做更难的动作,完成的更好,会得到更高的分数。但深入想一下一个恰当的难度系数应该如何设置?
例如上面去津巴布韦 推广星际2 究竟比韩国难多少的问题, 简单来说可以统计下平均努力下的平均销售额,韩国比津巴布韦高多少(应该是高哈?),然后这就可以作为一个系数。 关于跳水动作的难度系数,假设可以这样考虑。 平均水平的运动员,把该动作做到平均水平的百分比例。越小的越高,归一后,再适当调高以鼓励运动员做高难动作。
从上面的思考我们发现,难度系数的设定,本质也是依赖于可比性的,依赖于历史重复累积的经验。对于缺乏可比性的活动,也很难设定难度系数。例如做 IOS 的登录比WEB登录相同功能多用了1倍时间。你可以可能可以得出结论, IOS难度是2,web是1。 但下次开发的可能是android 的登录了。或者是不同需求的登录。无法有效利用历史经验。
个人目标与公司目标
运动员和销售人员,绩效问题简单的另外一个原因是,他们是个体孤军奋战,基本互相不需要合作。 而程序员是一个团队。团队的成就才是最终目标。 而数值化个人绩效后,很可能个人追求的个人绩效会与团队目标背离。设想下,如何对足球队的每个球员表现进行绩效? 进球数? 断球数? 助攻数?同样也很复杂, 如果你的绩效没有考虑周全,进球奖金太高,会不会所有人,都有机会就射,门前还有配合?回到研发活动,大牛为什么要做技术分享? 看到别人代码中的bug,我为什么要提示他? 难做又得分低的模块我为什么要去做?那么最终谁会去做呢?
四、驳“扯淡”的观点概括

0. 难度系数的设置不可能客观,因为研发活动中重复活动非常少(如果有,只需要复制)。如果硬要推行,根本上只是个纯主观数值。作为管理人员也不可能全栈,样样精通,很多时候,不如一线开发专业是正常现象。
1. 下级对上级评分没有意义,上级不需要下级肯定,公司层面应当关注业绩。下级不喜欢的上级,但团队业绩很好,难道公司把他绩效掉?
2. 如果任务是强制分配, 员工会经常与主管争论难度系数,如果任务是自愿领取。除了员工会挑肥拣瘦外,会导致切换频繁,各模块无人专精,为了绩效尽快完成会各种短视,怎么方便怎么来,系统越来越难以维护。
3. 同事间关系和公司文化都将变得非常非常“单纯”,唯利是图,各扫门前雪,个人目标背离组织目标。
4. 管理者如非专业, 得到的所谓掌控感只能是个心里安慰,坑的是自己的团队。
五、人性化管理

作者说人性化管理是消极管理行为,是管理不作为,管理无能的遮羞布。不知支持人性化管理的同学作何感想 -_-|| 。
百度百科:以人为本,是XXX同志提出的科学发展观的核心,体现了中国XXX全心全意为人民服务的根本宗旨。
不知道“扯淡”的作者有没有思考过, 为什么管理岗的薪资待遇通常会比较高,技术岗位到了一定阶段实际也会负管理责任。这就是市场机制对管理这项技能的定价结果。老板升你做主管,每月发你好几个W,难道你只需要比其他的技术人员多操作一个系统? 到底是以人为本简单,还是操作一个项目管理系统简单?那管理人才就随处可见,不符合物以稀为贵的规律了。
管理的核心是人, 人是有很多需求的, 除了物质需求外, 还有精神需求。我个人在面试过程中是很看中,一个人的技术素养和情怀的。如果一个人对研发工作充满热爱,热情,很愿意分享和挑战,, 这样的成员谁会不喜欢吸纳呢? 一部分人为了赚钱做事,也有另外一部人,是通过做事,顺便赚钱。就像园子里的同学,来这里分享技术博文,难道是为了绩效么?
公平并不是客观存在的, 公平是一种感觉。 让大家觉得公平是管理者重要责任之一,也是管理者价值能力的体现。我个人对研发管理者的定位,少数时候需要决策,而多数时候是一个服务者角色。 研发的岗位这么多, 产品,UI,开发,测试,用户,需要一个技术上和他们能沟通, 情商能兼容他们的人,来把它们调和到一起,使他们开心愉快地共同合作。
客观的绩效公平,公开全公司所有人的薪资,接受所有人挑战,然后让每个员工都觉得公平; 主观的绩效公平, 所有员工薪资保密, 满足每个人各自内心对公平的追求。哪一种更现实呢?
绩效是管理者的管理工具之一, 不是管理唯一工具,更不是目的。 学校都不排名了 :-)
结语:最后想说,“扯淡”的作者推系统,卖工具没问题, 但请不要标题哗众取宠,教大家如何管理。这个行业确实已经被各种管理方法残害已久,你所宣扬的这些老板们确实喜欢看,真的被忽悠上路,无脑执行了,坑的是他们自己的公司,坑的是广大程序员同胞。。。
另: 有同学推荐了另一篇相关讨论的文章,大厂顶级大牛所著, 其中观点我都非常认同, 链接如下:
https://mp.weixin.qq.com/s/jECI-lx0nEo92Jr2W97Qxg
另外一篇管理相关:
https://www.cnblogs.com/linvanda/p/16516781.html
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
这个问题在这里已经有了答案:Rubymetaclassconfusion(4个答案)关闭7年前。我对Ruby对象模型不太了解。首先,Ruby中的一切都是Class的实例吗??这些都产生true:pObject.instance_of?(Class)pClass.instance_of?(Class)pModule.instance_of?(Class)pBasicObject.instance_of?(Class)classHello;endpHello.instance_of?(Class)我不太明白这怎么可能,如果Object是Class的父类(superclass),它怎么可能都
文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分
我为Devise用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了我需要能够以用户或管理员身份进行身份验证的一些Controller和操作外,一切都运行良好。目前我有authenticate_user!在我的application_controller.rb中设置,对于那些只有管理员才能访问的Controller和操作,我使用skip_before_filter跳过它。不幸的是,我不能简单地指定每个Controller的身份验证要求,因为我仍然需要一些Controller和操作才能被用户或管理员访问。我尝试了一些方法都无济于事。看来,如果我移动authentica
所以我在Ruby方面几乎是个新手,我整理了一个代码来解决MinCut问题(对于一个作业,是的——我整理并测试了那部分代码),并且我无法弄清楚如何读取文件并将其放入数组数组中。我有一个文本文件要阅读,其中包含不同长度的列,如下所示137791642123134348123134109我想将它读入一个二维数组,其中每一行和每一列都被拆分,每一行都进入一个数组。因此,上述示例的结果数组将是:[[1,37,79,164],[2,123,134],[3,48,123,134,109]]我读取文本文件的代码如下:defread_array(file,count)int_array=[]File.f