在行业的某些领域,软件开发的一条公理是快速部署软件与彻底测试该软件是不一致的。团队认为这一点的原因之一是,完全自动化的部署过程意味着没有机会进行手动质量保证。在行业的其他领域,公理是完全不同的:通过使用功能标志来解耦部署(交付代码)和发布(启用新功能),您可以同时获得快速部署和手动质量保证。
我对自己的职业生涯了解得越深,我就越相信这个例子中蕴含着一种可以进行有用权衡的通用模式:
- 二维权衡总是让人失望
- 通常,您可以通过引入新的维度来做出不会令任何人失望的权衡
在“快速与安全部署”的权衡中,额外的维度是将功能激活(“发布”)与交付启用该功能所需的代码(“部署”)分离。引入该维度使工程师能够获得快速、可预测的部署,并保证质量,以便在为用户启用该功能之前有机会进行审查。
虽然大多数人已经在某种程度上凭直觉了解了这些规则,但我认为明确地陈述它们是一种轻微的变革性体验,我将深入研究如何应用这些规则。
例子
在讨论识别维度以改进权衡的机制之前,让我们简要介绍一下添加维度可以实现更清晰权衡的几个示例:
- 项目预算——在年度规划期间,许多公司都在激烈争论是否投资新市场的国际扩张,还是优先考虑现有市场。通过增加固定预算的维度,他们可以获得不同程度的两者,而不是就做其中一个或另一个进行存在性辩论
- 多元化的投资组合——长期以来,投资者感到陷入困境,要么进行跑输股市的安全投资,要么进行可能跑赢股市但也可能为零的高风险押注。伯特·马尔基尔(Burt Malkiel)的《华尔街随机漫步》引入了多元化的维度,这样你既可以获得类似股票市场的表现,又可以降低风险
- 基于数据的限制– 您经常会听到产品和安全团队之间关于用户安全性和产品可用性之间权衡的争论。然而,通过采取数据知情的方法,您通常可以两者兼得。例如,不要争论如何删除用户的权限,而是首先删除每个给定用户当前不使用的所有权限。通过将现实世界的使用情况作为权衡的一个维度,您通常可以确定在不降低可用性的情况下提高安全性的权衡
- 功能标志– 正如简介中所讨论的,许多工程师认为我们必须进行缓慢而安全的部署或快速而有风险的部署,但是通过功能标志解耦部署和发布使我们能够获得快速而安全的部署
除了这一小部分例子之外,我怀疑您还可以从您的工作经历中找出更多的权衡,其中一个额外的维度将混乱的分歧变成了一条明显的前进道路。当你与特别擅长这方面的人一起工作时,整个权衡的想法就会开始消失,并被深思熟虑的解决方案所取代。
如何添加尺寸
一旦您开始以这种方式考虑权衡,您就会注意到人们已经采用这种方法来改进权衡决策。挑战在于,大多数人都是凭直觉执行此操作,而不是遵循一组特定的步骤,这使得他们很难解释它。坦白说,我也面临这个挑战。随着时间的推移,我在这方面做得越来越好,但直到最近我才找到合适的词汇来描述它。
以下是将此实践逆向工程化为步骤的最佳尝试:
-
进入每个权衡讨论时,相信您可以添加一个额外的维度,这将大大减轻当前决策中的紧张情绪。与其他人交流这种信念,以便他们了解您的来源,这可以像这样简单的陈述:“我想知道我们是否可以在这种权衡中添加一个维度,以使其变得更容易。”
-
非常具体地了解所有利益相关者的要求。缺失的维度通常只在细节中显现出来,所以你需要强迫人们准确地表达他们的需求。如果您的利益相关者无法准确表达他们的需求,那么您应该花时间与他们合作以获取更清晰的信息。
是的,无法表达自己的需求是他们的问题,但现在也是你的问题。
-
看到维度与看到上下文的层次是一样的。您要么需要扩展对其他上下文层的认识,要么需要组建一个拥有广泛知识的工作团队。这不需要是决策利益相关者,只需了解相关团队、技术和产品的人即可。
-
测试新维度的实用性。最简单的是,作为您的工作组,“我们如何简化这种与额外维度的权衡?”关键是快速探索许多维度,尝试它们的实用性,然后转向另一个维度。不要深入任何给定的维度,直到它显示出一些希望。
-
通过询问那些以前解决过类似权衡的人来了解周围的情况。我觉得自己的记录被打破了,但询问以前解决过这个特定问题的人确实有效。再次强调,这就是发展同行网络如此有价值的原因。他们可能只能告诉你缺失的维度是什么!
-
最终,只有当它为所涉及的利益相关者提供明显更好的结果时,您才应该在权衡中添加一个维度。一旦你开始考虑这个想法,你就会忍不住在任何地方添加维度,但要避免额外的维度,因为这些维度会使事情决策更难以解释,而不会极大地改善你的选择。
这个过程不会每次都有效,因为一些工作组根本不了解缺失的维度来提出建议。这就是为什么如果您在任何给定的权衡中找不到缺失的维度,您不应该灰心,也是为什么每隔几年重新考虑一次艰难的权衡是有用的。仅仅因为你上次不知道缺失的维度并不意味着你现在不知道它。
职业生涯后期的能力
有时人们会谈论工程师在五到七年内成为高级工程师,然后完全胜任他们所做的工作。从某种意义上来说这是正确的——你可以成为一名拥有五年经验的非常优秀的工程师——但同时也错过了许多此时才开始扎根的能力。在权衡中添加维度是后一类的一个很好的例子:很少有人拥有必要的上下文层和丰富的经验来擅长识别缺失的维度,从而使困难的权衡变得更容易。总是有更多东西需要学习。