专栏名称: 程序员的那些事
最有影响力的程序员自媒体,关注程序员相关话题:IT技术、IT职场、在线课程、学习资源等。
目录
相关文章推荐
51好读  ›  专栏  ›  程序员的那些事

我认识的“最差劲”程序员:绩效是 0,周复一周的零分,部门经理要我立马解雇他!但我力排众议把他留下来了…

程序员的那些事  · 公众号  · 程序员  · 2025-03-29 10:22

正文

请到「今天看啥」查看全文


我认识的“最差”程序员

衡量程序员生产力的美妙之处在于,你很快就能识别出差劲的程序员。

今天我想讲讲我认识的最差程序员,以及我为何力排众议将他留在团队。

几年前我曾在推上发过一个关于"我认识的最佳程序员"的帖子,现在讲讲最差的似乎才算公平。他叫 Tim Mackinnon,我要让你看看他的效率数据有多糟糕。

当时我们在一家知名软件咨询公司工作,客户是某大银行。 他们决定引入个人绩效指标(美其名曰“用于评估和个人发展”)。 这个政策层层传达,最终落实到我们团队时变成了“交付的用户故事数量”。

部门经理还算明智,没有选择代码行数或 bug 数量,比较这类指标太容易造假了。

注:User Story(用户故事),这是敏捷开发的核心概念之一,用于以简洁、用户友好的方式描述软件需求。


用户故事通常以第一人称视角撰写, 例如: "作为一个用户,我希望能够在线预订酒店,以便快速安排行程。 "


它强调功能的价值和用户视角,而非技术细节。

我们改用 Jira 之类的工具追踪用户故事,大家在任务上标注自己的名字,这样就很容易生成效率报表了。

问题就出在 Tim 身上。他的得分始终为零!不是低,不是下滑,是真真切切的零分。周复一周,迭代复迭代,Tim 的得分始终是零。


经理:开除他,换个能做事的人

显然 Tim 必须走人。经理得出这个结论后,让我立马解雇他,换个真正能做事的人。

但我断然拒绝了。这对我来说甚至不是个艰难的决定,我直接说不。

Tim 效率为零的原因在于,他从不认领任何任务。他的日常就是和不同的队友结对编程:

  • 对经验不足的开发者,他耐心让对方主导,用苏格拉底式的提问(“如果……会怎样?”“有没有其他方法?”)引导他们找到解决方案,既不越俎代庖也不强行灌输。

  • 对资深开发者,他更像是共同创作或思想交锋,通过不同视角碰撞出比单打独斗更优的方案。Tim 的编程水平极高,和他结对总能学到新东西。

Tim 没有直接交付软件,但他培养了能交付软件的团队。因为有 Tim 在,整个团队变得更高效、更默契、更有乐趣,代码质量也显著提升。

我向经理解释了这一切,并邀请他随时来观察我们的工作。每次他来,都会看到 Tim 和不同的同事坐在一起,共同打磨“他们的”任务。而这些任务的质量和交付速度(没错,高质量和高速度可以兼得),总是比 Tim 不参与时要好得多。

最终我们留下了 Tim ,悄悄放弃了个人效率指标,转而追踪团队整体的业务影响。我们开始追踪并庆祝作为高效团队为组织创造的实际价值。


简而言之:

  • 我完全支持问责制,可以衡量效率,但应聚焦于可量化的业务影响(节省/创造/保护的资金)

  • 如果难以直接衡量,使用业务替代指标也可以

  • 但绝不要试图在复杂适应系统中衡量个体贡献,因为这种做法本身就有逻辑错误

  • 像 DORA 指标这样的体系,衡量的是工作系统的效能(如 Westrum 文化指标或技术变更的生产流程),关注的是引擎而非单个活塞,这才是合理的

另外,如果你有机会和 Tim 共事,一定要珍惜。


网友留言

上面这个故事在 Hacker News 上引发了热议。

伯小乐摘译部分热评:

morsecodist:

对我来说,衡量开发者个人生产力的想法本身就很荒谬。这倒不是说我们在搞魔法,而是影响因素实在太多了。

采用用户故事或代码行数来衡量生产力,其实是在鼓励开发者做尽可能多的无意义工作。我更希望开发者能简化任务或复用现有工具,这样反而减少了实际编码时间。他们通过经验节省下来的工作量价值极高,但却很难量化。

我们真正需要的是衡量业务成果,但这些成果很难直接归功于某个开发者。

很遗憾,我们最终只能依赖主观判断。与其假装我们有某种科学依据,不如坦然承认这个事实会更好。

JohnMakin:

我曾被类似问题困扰,直到我发现了 Tim 和本文作者显然没意识到的简单解决办法——管理层只需把 Tim 参与过的任何工单都附上他的名字即可。他可以让队友这么做(队友们会很乐意),或者好心的同事通常会在工单里注明“在@Tim 的帮助下解决”。这种方法能有效帮助团队保留像 Tim 这样的成员,抵御这类僵化的进度指标。

生产力指标并非一无是处。比如,当我加入一个团队时,如果发现他们平均每个 Jira 工单对应 1 个 PR,而一个三人团队中某位成员一年提交了 70%的 PR,这并非毫无意义的信息——他很可能是技术负责人。虽然不绝对,且可能存在数据操控,但这至少是个值得注意的参考点。

NalNezumi:

很高兴听到 Tim 留了下来,作者也成功将整个评估体系引向了正确方向——这需要一位愿意倾听的管理者。

我曾经历过这种生产力指标层层传导的"悲剧结局":OKR。那家初创公司不仅要求团队制定季度 OKR(目标与关键成果),还要求个人 OKR,并将股票期权与之绑定。这是一家机器人公司,拥有高度跨领域的团队(软件、硬件、嵌入式、DevOps、硬件设计、硬件测试、硬件维护等等)。

结果如何?开发者们变成了一座座孤岛。团队里再没有" Tim "这样的人。当我(软件集成工程师)遇到一个百思不得其解但直觉是深层问题的技术故障时,去向控制/运动学专家求助,得到的回答却是:"抱歉,我很想帮你,但我的 OKR 截止日期快到了,实在没时间。" 这个问题他本可以在一天内甚至更短时间解决,但最终耗费了两周。

问题的根源异常复杂:在层层嵌套的 C++大型单体仓库中,我发现 Boost 库和自定义运动学库存在隐式结构体复制,而多个库(不止两个)使用了完全不同的平移/旋转表示顺序(xyz、rpy、欧拉角、四元数),且每个分量的排列方式都不一样。令人匪夷所思的是,在两年多的运营中从未有人发现这个问题,直到我们新团队接手时才暴露出来。

据我所知,我向软件团队报告了这个问题,但同样因为 OKR 的存在,最终无人采取行动。

crazygringo:

这种让一个程序员完全不做个人工作、只负责帮助他人的模式很奇怪。

在我看来,更健康的状态应该是:Tim 像其他人一样处理用户故事,当有人需要帮助时,团队成员根据专长或贡献频率互相支援。对于最需要帮助的同事,可以分配更简单的任务,而 Tim 应该独自承担最困难的用户故事。如果团队真的极端失衡(比如全员都是刚毕业的新手,只有一个超级资深开发者),那这位资深开发者难道不应该被明确为专职导师,不参与普通绩效评估吗?

原文的例子并不能说明 "指标无法衡量工作价值",反而暴露了两个关键问题:要么是 Tim 的职位与指标完全不匹配,要么是 Tim 未能贡献最难的代码,且团队没有合理分配 "帮助" 的工作量。在这两种情况下,指标都在正常发挥作用,揭示了需要解决的重要问题(记住,"解雇 Tim " 不是面对指标结果时唯一的选择)。


最后

如果本文主角 Tim 是在国内大厂任职,他能留下来的概率有多大?

你们身边有这种程序员么?

- EOF -

推荐阅读 点击标题可跳转

1、 董事长刺死 CTO:一个要“先发布后优化”,一个坚持先优化

2、 被公司辞退,拿到22万补偿金。结果在准备入职新公司时,原公司HR电话叫我回去上班,涨薪7000,但要把赔偿金还回去…

3、 工资12000,下家给15000,我说考虑下。结果HR又加到18000,下午副总打电话说能给到 2w,不会是骗子公司吧







请到「今天看啥」查看全文


推荐文章
冯站长之家  ·  2016年12月30日财经新闻(语音版)
8 年前
城乡建设一PPP  ·  如何优雅地向爸妈要零花钱?
7 年前