The Improbability Company home page
Search by The Improbability Company
BLOG POST

工程师还是开发人员?

决定你的项目是扩展规模——还是在生产环境中悄无声息地崩溃的思维差距

TL;DR:
大多数团队都说他们想要“工程师”,但许多团队实际上奖励的是“开发人员”。不是作为头衔——而是作为思维方式。开发者模式优化的是吞吐量 (throughput)。工程师模式优化的是长期的产品完整性。你需要两者,但你必须诚实地面对你的系统实际上在激励什么。


这是一个让领导者彻夜难眠的问题(通常是在本季度的第三次“为什么这个又坏了?”的事故之后):

你正在建立一个开发人员 (developers) 团队……还是一个工程师 (engineers) 团队?

在这一点被斥为语义上的吹毛求疵之前:这种差异已经决定了高风险项目、甚至整个行业的命运,以及人们赖以生存的产品的长期健康状况。

剧透一下:这与学位几乎毫无关系


首先,让我们打破学历的神话

地球上一些最优秀的技术专家是自学成才的。有些人拥有博士学位。大多数人介于两者之间。

在某些受监管的、安全至关重要的领域(医疗设备、航空、基础设施),学位很重要。但对于大多数产品团队来说,分界线不是学术性的。

而是这个:

开发人员优化产出 (outputs)。工程师优化成果 (outcomes)。

记住这一点。这就是这整篇文章的核心。


开发者模式:交付任务 (Ship the task)

开发者模式从根本上讲是任务导向的。

有一个工单 (ticket)。
它有验收标准。
它被完成了。
下一个工单。

这不是一种侮辱——这是一种至关重要的能力。开发者模式在以下情况下蓬勃发展:

  • 需求相当明确,
  • 优先级是保持势头 (momentum),
  • 执行需要稳定且可衡量。

它也非常适合仪表板和状态报告(因为产出很容易计算)。

失败模式: 开发者模式可以在永无止境的待办事项列表 (backlog) 中永远前行……而从未询问团队是否正在向正确的目的地移动。

你可以不断地交付,但仍然:

  • 构建了错误的东西,或者
  • 在一个无法支撑的根基上构建了正确的东西。

工程师模式:审视现实

工程师模式始于一种不同的本能:

“这有意义吗?”

工程师质疑需求。他们挑战假设。他们关心在这个变更之后系统会变成什么样——而不仅仅是这个工单是否能在周五之前关闭。

开发人员看到的是一张工单,而工程师看到的是:

  • 一个系统,
  • 具有依赖关系,
  • 具有权衡,
  • 具有长期后果。

工程师模式提出的问题在当下让人感到不便,但在以后却价值连城:

  • 我们是在解决真正的问题——还是只是在解决最吵闹的症状?
  • 为什么这会再次发生?
  • 这个解决方案是变得更简单了……还是只是变得更庞大了?
  • 我们正在制造什么样的技术债务,以后要为此付出什么代价?

现实最终会审计每个人。


为什么许多管理者更喜欢开发者模式(以及为什么这很危险)

这部分令人不适:

许多组织的结构是为了奖励开发者模式,因为它产生干净、可报告的指标

  • 关闭的工单数
  • 发布的特性数
  • 燃烧的故事点 (story points)
  • “我们按计划进行”

那是管理者的“安慰食物”。它能安抚利益相关者。它适合放在演示文稿中。

工程师模式产生一种不同的句子——通常是真实的,通常是必要的,也通常是可怕的:

“我们发现了一些根本性的错误。我们应该停下来并正确地修复它。”

这句话不太适合放在每周状态更新中。
它威胁到时间表。它迫使人们公开权衡利弊。它让不确定性变得可见。

但这也是防止昂贵灾难的那句话。


三个现实世界的视角

这些不是“陷阱”。它们是模式——激励机制如何在大规模范围内塑造行为。

1) 当“完成”并不意味着“工作” (Healthcare.gov)

Healthcare.gov 的早期推出被广泛引用为一个案例,其中许多团队交付了组件和里程碑——然而整个系统在现实世界的需求下却举步维艰。

教训并不是“人们不会写代码”。
而是这个:

当团队因为在孤岛中完成任务而获得奖励时,系统在纸面上可能看起来是完整的……但在整体上却是失败的。

2) 停止生产线的权力 (丰田)

丰田制度化了一种许多软件组织只是假装拥有的工程原则:

如果出了问题,任何人都可以停止生产线。

这种文化不庆祝运动。它庆祝预防:

  • 尽早发现缺陷,
  • 修复根本原因,
  • 避免重复同样的问题。

这就是转化为组织肌肉的工程思维。

3) 一次性构建基础 (爱沙尼亚)

爱沙尼亚的数字政府故事经常被引用,因为它不是从“数字化每一个表格”通过开始的。

它专注于架构:建立一个安全的、可互操作的基础,以便服务可以在其上可靠地构建多年。

这是一个工程师的问题:

“什么样的基础能让接下来的 1,000 个特性成为可能?”


标注:真正的区别 (产出 vs 成果)

这是最简单的诊断方法。

产出 (开发者优化): 关闭的工单,发布的特性,燃烧的故事点,修复的错误。
成果 (工程师优化): 消除重复发生的事故,降低复杂性,消除客户痛点,提高系统弹性。

产出感觉像是进步。成果就是进步——但它们更难计算。


那么……你现在需要哪一个?

答案不是“工程师好,开发人员坏”。那是懒惰的思维。

你需要两者。真正的问题是:

你的组织奖励什么?

一个实用的经验法则:

  • 早期阶段 / 范围明确 / 快速迭代 → 开发者模式可能会赢。
  • 日益增加的复杂性 / 重复发生的事故 / 用户规模扩大 → 工程师模式变得生死攸关。

最好的团队不会永远只雇佣一种类型的人。他们培养可以切换帽子的人:

  • 当速度至关重要时发布,
  • 当完整性至关重要时慢下来,
  • 并用通俗易懂的语言解释权衡。

标注:领导者如何获得更多的工程师思维(而不损失速度)

如果你想要工程师模式的行为,请奖励以结果为导向的行为。明确地奖励。

  • 庆祝那个能防止接下来五次事故的修复——而不仅仅是关闭今天工单的补丁。
  • 追踪重复出现的问题并减少它们(“为什么这会再次发生?”)。
  • 即使简化工作变得可见(消除复杂性就是进步)。
  • 像保护特性交付一样保护系统健康的时间。
  • 创造安全感,让人可以说“这个需求没有意义”,而不会被贴上“难搞”的标签。

最后的想法

如果你的待办事项列表正在缩小,但你的产品正变得:

  • 更难改变,
  • 更难测试,
  • 容易崩溃……

你没有生产力问题。

你有一个激励机制问题

开发人员让机器保持运转。
工程师防止机器变成一个脆弱、过度复杂的装置,仅仅靠希望维系在一起。

所以——你的团队今天奖励什么:产出,还是成果?


TIC Insights | 为驾驭技术、创新和变革的高级领导者提供的视角。