优秀的工程师如何打破规则
原始链接: 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)。以下是一篇带有相似标签的相关文章预览:
我在大厂如何决定该做什么工作
在科技行业,最重要的职业技能之一就是学会识别真正重要的工作是什么 。很多工程师在整个职业生涯中都没有真正做过这种决定。他们可能偶尔会在冲刺计划会上就某个特定问题发表意见,但他们的脑海中并没有一张"团队当前最重要工作"的清单。把这种决定推给经理很容易。毕竟,决定哪些项目重要并非你的本职工作------你的工作是执行项目并在技术层面发表意见。
继续阅读...