优秀的工程师如何打破规则

优秀的工程师如何打破规则

原始链接: https://www.seangoedecke.com/breaking-rules

在所有大型科技公司中,总有一些工程师因为公然打破规则而获得奖励。这让那些看重"循规蹈矩"的软件工程师感到十分沮丧。但事实上,大公司有一套系统性奖励打破规则的机制,且理由充分。不过,打破规则是一把双刃剑------你如何以及何时打破规则非常重要。优秀的工程师在打破规则时会深思熟虑、小心谨慎,并且懂得保护他们的经理。

打破规则的第一定律是:

只有当打破规则能让你的经理满意时,你才会获得奖励

假设公司规定某模块的所有代码更改必须由特定工程团队进行审查。你正在做一个即将上线的项目,需要更改那个模块,但如果去催那个团队审核,至少要耽误一天。你要不要跳过审查直接发布代码?这很难说,具体取决于很多细节:

  • 项目有多紧急?
  • 你的代码更改有多安全?
  • 另一个团队会有多反感这事?
  • 等等...

这些细节之所以重要,是因为它们能帮你预测这两个决定对你经理的影响。如果等审查导致项目延期,这会给你的经理带来多大麻烦?如果直接发布,另一个团队越级投诉,会给你的经理惹麻烦吗?你的经理是更愿意为你掩护"项目延期",还是更愿意掩护你"打破了强制审查规则"?

当你打破规则时,一切只看结果

当你遵守规则时,如果出了问题,你总有理由推托:项目延期不是你的错,是另一个团队审查太慢(或是制定规则的人的错)。但是,一旦你打破了规则,只要出了问题,你就得背锅,哪怕错不在你。

换句话说,如果你跳过审查直接发布了代码,结果因为一些意外导致经理很不爽------比如 CTO 刚好和那个团队在外面聚餐,他们直接向 CTO 告了状------你就会受到惩罚。这只能怪你倒霉,抱怨也没用。

因此,只有当你对评估后果非常有把握时,才应该去打破规则。

经理不会教你何时该打破规则

经理能从成功的"打破规则"中获益,但他们绝不能公开支持这种行为。打破规则依靠的是"合理的推诿(plausible deniability)":你的经理必须能对其他团队说"这是我们的错,没有遵守流程,我会提醒工程师下次注意"。如果你跑去对别人说"其实我问过经理能不能打破规则,他同意了",或者你的经理担心你会这么说,那就是个大麻烦。一个工程师打破规则没啥大不了,但如果一个经理被发现故意打破规则,就会惹怒他的上级,这最终也会变成你的大麻烦。

通常,经理很反感你拿这种问题去问他们,因为这显然是你在"找人背锅(ass-covering)"。他们会想:"我自己又不懂技术细节,无法判断打破规则会不会成功,凭什么让我来承担责任?"除非潜在的下行风险真的非常大,你才需要寻求这种"自保"策略,平时不要总这样做。在决定是否要打破规则时,几乎全得靠你自己。

经理喜欢那些敢于打破规则的优秀工程师,因为这能让他们享受打破规则带来的好处,又不用承担责任。如果成功了,项目上线更快,赚得更多(或者用户增加,以及达到他们的任何目标);如果搞砸了,他们大可以把锅甩给那个"鲁莽"的工程师。

为什么公司不制定更好的规则?

既然有很多规则可以被打破,为什么公司不制定更合理的规则?难道是为了故意让工程师承担风险?我认为并非如此。规则之所以死板且宽泛,是因为很多工程师并不值得信任。

在特定情况下是否值得打破规则,完全取决于判断力:这需要基于大量实际因素做出全面慎重的决定。良好的判断力需要时间积累。那些死板的规则(比如"不要直接在生产环境中运行 SQL")是为判断力最差的工程师准备的,防止他们做出明显的破坏行为(比如删掉生产数据库)。

当一个优秀的工程师为了让项目顺利上线而直接在生产环境中运行 SQL(而不是花两天时间编写、审批、部署和运行一个一次性的批处理任务)时,这其实是这套系统在完美运作。规则依然存在,以防止粗心的工程师盲目效仿;但那个运行了 SQL 的工程师却因为打破了规则而获得了奖励,而不是惩罚。

总结

我刚才一直在讲哪种"打破规则"不仅不会受罚还会受到奖励。但"你究竟应该打破哪些规则"则是另一个问题。例如,如果你面临的是真正的法律风险(而非职业风险),那大概率是不划算的。有些规则出于道德原因而存在,比如尊重用户隐私,不使用"暗黑模式"欺骗用户。即便打破这些规则对你的职业生涯有好处,你也绝对不要这么做。总而言之:

  • 优秀的工程师会在有助于业务并能保护经理的前提下打破规则
  • 如果结果很糟,哪怕不是你的错,你也要承担责任
  • 不要指望你的经理帮你做决定,"合理的推诿"是系统的一部分
  • 只有当风险低、回报高且你的判断力过硬时,再去打破规则
  • 规则是用来限制判断力差的工程师的,而不是用来束缚判断力强的工程师的

写这篇文章的灵感来源于这篇文章及其 Hacker News 上的评论


如果你喜欢这篇文章,欢迎订阅我的邮件更新,或者[在 Hacker News 上分享](news.ycombinator.com/submitlink?... strong engineers break the rules and get away with it)。以下是一篇带有相似标签的相关文章预览:

我在大厂如何决定该做什么工作

在科技行业,最重要的职业技能之一就是学会识别真正重要的工作是什么 。很多工程师在整个职业生涯中都没有真正做过这种决定。他们可能偶尔会在冲刺计划会上就某个特定问题发表意见,但他们的脑海中并没有一张"团队当前最重要工作"的清单。把这种决定推给经理很容易。毕竟,决定哪些项目重要并非你的本职工作------你的工作是执行项目并在技术层面发表意见。
继续阅读...


相关推荐
jonjia2 小时前
引入新维度化解权衡难题
程序员
jonjia2 小时前
在大厂交付大型项目的策略
程序员
jonjia2 小时前
RFC 与设计文档
程序员
jonjia2 小时前
为什么你(或任何人)应该成为一名研发经理?
程序员
jonjia2 小时前
管理技术质量 (Manage Technical Quality)
程序员
jonjia2 小时前
大厂软件工程师职业发展路径
程序员
jonjia2 小时前
关于工程师与影响力
程序员
jonjia2 小时前
多层上下文 (Layers of Context)
程序员
jonjia2 小时前
工程师与管理者的职业钟摆
程序员