我认识的最差程序员(2023)
The Worst Programmer I Know (2023)

原始链接: https://dannorth.net/the-worst-programmer/

这个轶事突显了在软件开发中使用个人生产力指标的弊端。作者讲述了与Tim Mackinnon合作的经历,他是一位程序员,其个人故事点交付量始终为零,因为他把时间都用在了与其他开发人员结对编程上。虽然从数字上看似乎毫无产出,但Tim实际上非常宝贵。他指导初级开发人员,与资深同事合作,提高了团队产出的整体质量和速度。 作者成功地驳斥了解雇Tim的提议,证明了个体指标无法捕捉到他的真正贡献。团队最终放弃了个体指标,转而采用团队责任制,专注于他们作为一个整体交付的业务影响。关键的结论是,在像软件开发这样的复杂系统中,难以隔离和准确衡量个体贡献。与其如此,不如关注团队绩效和DORA之类的系统级指标,这能对生产力进行更全面、更有效的评估。

这个Hacker News帖子讨论了一篇关于一位名叫Tim的程序员的文章。Tim因为没有分配的任务和直接的代码贡献而被认为没有生产力。然而,Tim擅长与队友结对编程,指导初级开发者,并通过冗长且具有教育意义的编程来提高代码质量。 评论者们辩论了代码行数或完成的任务数量等传统生产力指标的价值,认为这些指标很容易被操纵,并且无法捕捉协作工作的成果。一些人建议经理应该了解团队动态以及超越指标的贡献。另一些人强调了那些能够胜任教练和导师角色的个人贡献者的重要性。一位评论者指出了现实世界与理想状态之间的对比:在现实世界中,指标对于商业成功至关重要,许多工程师又缺乏资格。该帖子探讨了可衡量的产出与经验丰富的开发人员(他们通过协作和知识共享来增强团队绩效)的往往无法量化的贡献之间的矛盾。

原文

The great thing about measuring developer productivity is that you can quickly identify the bad programmers. I want to tell you about the worst programmer I know, and why I fought to keep him in the team.

A few years ago I wrote a Twitter/X thread about the best programmer I know, which I should write up as a blog post. It seems only fair to tell you about the worst one too. His name is Tim Mackinnon and I want you to know how measurably unproductive he is.

We were working for a well-known software consultancy at a Big Bank that decided to introduce individual performance metrics, “for appraisal and personal development purposes”. This was cascaded through the organisation, and landed in our team in terms of story points delivered. This was after some considered discussion from the department manager, who knew you shouldn’t measure things like lines of code or bugs found, because people can easily game these.

Source: http://dilbert.com/strip/1995-11-13

Source: http://dilbert.com/strip/1995-11-13

Instead we would measure stories delivered, or it may have been story points (it turns out it doesn’t matter), because these represented business value. We were using something like Jira, and people would put their name against stories, which made it super easy to generate these productivity metrics.

Which brings me to Tim. Tim’s score was consistently zero. Zero! Not just low, or trending downwards, but literally zero. Week after week, iteration after iteration. Zero points for Tim.

Well Tim clearly had to go. This was the manager’s conclusion, and he asked me to make the necessary arrangements to have Tim removed and replaced by someone who actually delivered, you know, stories.

And I flatly refused. It wasn’t even a hard decision for me, I just said no.

You see, the reason that Tim’s productivity score was zero, was that he never signed up for any stories. Instead he would spend his day pairing with different teammates. With less experienced developers he would patiently let them drive whilst nudging them towards a solution. He would not crowd them or railroad them, but let them take the time to learn whilst carefully crafting moments of insight and learning, often as Socratic questions, what ifs, how elses.

With seniors it was more like co-creating or sparring; bringing different worldviews to bear on a problem, to produce something better than either of us would have thought of on our own. Tim is a heck of a programmer, and you always learn something pairing with him.

Tim wasn’t delivering software; Tim was delivering a team that was delivering software. The entire team became more effective, more productive, more aligned, more idiomatic, more fun, because Tim was in the team.

I explained all this to the manager and invited him to come by and observe us working from time to time. Whenever he popped by, he would see Tim sitting with someone different, working on “their” thing, and you could be sure that the quality of that thing would be significantly better, and the time to value significantly lower—yes, you can have better and faster and cheaper, it just takes discipline—than when Tim wasn’t pairing with people.

In the end we kept Tim, and we quietly dropped the individual productivity metrics in favour of team accountability, where we tracked—and celebrated—the business impact we were delivering to the organisation as a high-performing unit.

Measure productivity by all means—I’m all for accountability—ideally as tangible business impact expressed in dollars saved, generated, or protected. This is usually hard, so proxy business metrics are fine too.

Just don’t try to measure the individual contribution of a unit in a complex adaptive system, because the premise of the question is flawed.

DORA metrics, for example, are about how the system of work works, whether as Westrum culture indicators or flow of technical change into production. They measure the engine, not the contribution of individual pistons, because that makes no sense.

Also, if you ever get the chance to work with Tim Mackinnon, you should do that.

We can help your organisation to go faster — ask us how
联系我们 contact @ memedata.com