这不是你的代码库
原始链接: https://www.seangoedecke.com/not-your-codebase
工程师常常对他们写的代码有很强的"主人翁意识"。这可以理解:代码部分是他们的心血,也是他们的工作环境,所以他们自然希望工作环境舒适。
这导致工程师会强烈反对那些为了赶进度而引入技术债务的"临时修复"。对他们来说,这感觉就像优雅的代码库被破坏了------仿佛有人踩着满脚泥巴闯进了他们的家。
然而,情感上能理解,并不代表事实就是这样。这不是你的代码库。 它是公司的财产。你只是受雇来开发它的专业人员,如果公司认为让你离开更符合其利益,你将不再参与该代码库的开发。
为什么工程师会抗拒?
我觉得大多数聪明的工程师并没有在潜意识里认为自己拥有代码库。但很多人的行为表现却仿佛这是他们的私人财产。例如,当公司想要赶进度时,很多工程师会为了保护代码质量而积极抵制。当然,这么做可能有一些合理的理由:
- 质量下降太严重,以至于会危及公司的明确目标。
- 你认为所谓的优先级不是"真正"的优先级(比如这只是某个经理的一时兴起,而不是实际的战略)。
- 你故意把个人在代码库中的开发体验凌驾于公司目标之上(也就是说,你在故意消极怠工,很多人也会这么做^1^)。
但我见过很多聪明、敬业的工程师,在上述条件都不成立的情况下依然强烈抗拒。我只能得出这样一个结论:他们认为保护代码库免受负面外部影响是自己的责任------换句话说,他们认为代码库是他们的 ,而公司的目标是外部干扰。但实际上,代码库仅仅是为了实现公司目标而存在的。作为工程师,我们才是那个外部干扰。
信任管理者来做决定
你的管理者没有足够的代码层面的背景知识,无法决定代码库里的具体代码怎么写。但与你不同的是,他们在权衡开发速度和代码质量方面有更宏观的背景信息。例如,他们更清楚公司面临多大的财务压力,或者在年度大会上发布新功能有多么重要^2^。工程师们通常对这类事情嗤之以鼻------他们坚信长期质量才是最重要的,而不是在会议上能吹嘘什么------但这确实很重要。
对于工程师针对这一观点的经典反驳,我能想到最有力的论述是:
没错,理论上公司有权决定承担多少技术债务。但是,推高技术债务并尽快交付功能符合每个工程经理的个人利益,因为等恶果显现时他们早就不在公司了^3^。
工程师应该与之抗争,因为不毁掉自己的代码库符合工程师的利益,而且从长远来看,维护一个健康的代码库也符合公司的整体利益(即使个别经理不这么认为)。
这种情况确实时有发生。但这是一种极其愤世嫉俗的工作观。我确实和只看重短期利益的经理及产品经理共事过。但我也遇到过真正想把事情做好的管理者,他们只有在理由非常充分时才会追求短期利益。
根据我的经验,缺乏信任往往会变成一种自我实现的预言 。如果工程师总是强烈反对积累技术债务,他们的经理就会觉得遇到重要事情也无法沟通,从而不再信任他们,转而自己决定在哪里以及如何累积技术债务。工程师看到自己被边缘化,会想:"我就知道!这个经理根本不在乎质量。"但实际上,这只是一场沟通的破裂。
像对待别人的代码库一样对待它
把代码库当成"不是自己的",这意味着什么?这并不意味着毫无原则地随意添加技术债务。你仍然有义务向经理说明风险和后果,并在被要求做极其灾难性的事情时予以抵制。然而,这意味着你应该让你的经理对"哪些风险值得冒"做出最终决定。
同样,这也意味着让公司来做最终的技术决策。如果公司决定转向 React,你的工作就是把代码库迁移到 React。如果公司主推 Postgres,你的工作就是在可能的地方使用 Postgres。有时公司确实会做出糟糕的技术决策,你可以尝试说服他们不要那样做,但最终决定权在他们手里。
这也意味着要为其他工程师 考虑!如果你搭建了一个代码库,团队里的另一位工程师建议重构,这个重构方案需要比现状好多少才值得去做呢?事实上,哪怕重构会让代码库稍微变差一点,可能也值得允许,因为这能让那位工程师成为该部分代码的专家。随着时间的推移,让更多人熟悉代码库所带来的长期收益,远大于代码质量那一点轻微的下降。
最后的想法
对自己写的代码保持一定程度的主人翁意识是不可避免的,也很可能是件好事。你应该关心你所创造的东西!但这并不意味着你拥有任何实际的所有权。你在工作中花时间处理的代码库是属于公司的,他们可以随心所欲地处置它。你应该沟通各项决策带来的风险和后果,但归根结底,这事儿你说了不算。
如果你喜欢这篇文章,可以考虑订阅我的邮件更新,或者[在 Hacker News 上分享](news.ycombinator.com/submitlink?... not your codebase)。以下是一篇拥有相同标签的相关文章预览。
给处于动荡时期工程师的实用建议
自 2023 年以来,利率的上升导致软件公司对待工程师的方式发生了翻天覆地的变化。现在的软件工程师比过去十年里的任何时候都难当。科技界的好日子结束了(至少目前是这样)。这不仅仅是就业市场 艰难,对于已经在职的软件工程师来说,大环境同样艰难。我们能做些什么呢?
继续阅读...