原文:https://www.linkedin.com/pulse/when-your-tech-debt-comes-due-kevin-scott/
译者:冬哥
那是 2011 年 10 月,就在 LinkedIn 上市后的第二次财报发布之前的几周。LinkedIn的业务做得很好,从任意可见角度来衡量,可以说是非常好。我们成功地完成了从私人控股初创公司到上市公司的转变;股票在交易的第一天上涨了 171%;我们很快就会宣布,第二季度的收入同比增长了 126%;在过去的 12 个月里,有超过 5000 万人加入了我们的专业网络,使我们的会员总数达到 1.312 亿。突然之间,我们变成了一家价值 90 亿美元的公司。
然而,在我们蓬勃发展的业务背后,是一个保险丝已被点燃的技术火药桶。当时我刚加入 LinkedIn,担任工程主管,我对科技初创公司并不陌生,曾在 Google 和后来的 AdMob 领导工程团队。初创公司在分配宝贵的资源时必须平衡许多条线。如果你在设法构建正确的产品之前,花费太多时间构建技术上完美的东西,那么你就会倒闭。这种情况每天都在硅谷和其他地方发生;另一方面,如果你在构建正确的产品时采取了太多的技术捷径,最终你可能会背负大量技术债务需要偿还;如果你像我们一样的极为幸运,并且你的产品也非常好,以至于它开始经历指数级增长,那么给你偿还技术债务的时间窗口可能会非常短。
那是一个深秋的晚上,在取得如此巨大的成功之后,我发现自己所处在一个挤满了沉思、焦躁的 LinkedIn 产品经理的房间。我站在他们面前,传递的是一个没有任何工程主管想要去传达的消息:我们将在接下来的两个月内冻结所有 LinkedIn 新功能的开发,以重建我们的软件开发基础设施,在此期间将不会有很酷的新的功能。我们将有可能会窒息,因为我们将从头开始重建我们的系统。
这些都是一群雄心勃勃的产品经理,所抱持的期望是,业务的成功所带来的持续增长和出色表现。他们有责任帮助我们构建新功能和产品,使 LinkedIn 能够继续取得成功。在一个以“快速行动并打破常规”为主导心态的高风险世界中,停止两个月并不是他们计划中的一部分。而我,一个新人,告诉他们需要慢一点移动才能更快地移动,让我成为不受欢迎的人。特别是他们看到我的前辈过去尝试过类似的壮举,并失败了。
“你有且只有一次机会,所以你最好希望你做对了”,其中一位产品经理断言。
“请大家不要担心我,”我回击道,“如果我们不能一起解决这个问题,我们谁都不会再有机会。”
LinkedIn 成立于 2003 年 5 月 5 日, 到 2011 年我们将公司上市时,我们已经积累了 8 年的善意和无辜的技术妥协,这些妥协已经累积成我们这些软件工程人员所说的狗屎秀。我们的初衷是业务扩展的同时尽可能快地开发软件的能力,此刻带来了真正的压力。加入团队的工程师越多,事情进展得越慢。每个人都受够了所有阻碍我们前进的摩擦,因为我们无法按照我们想要的速度前进,并且只有前进才能继续成长。
技术债务是每个技术公司,无论大小,上市或私有,都必须处理的事情。在你构建软件时,技术债务以各种令人眼花缭乱的方式累积起来。有时它是通过明确的、个人的妥协产生的:你有意识的选择以不可持续的方式做某事,以便更快地将某事推向市场,并告诉自己稍后会清理这些事情;有时技术债务会悄悄的累积,因为构建技术很困难,人们会犯错误,即使是最聪明的工程师也无法预测未来,这意味着有时你会构建错误的东西;有时技术债务的产生,是因为你的团队主要关注点在于如何更快地交付,而不是清理他们匆忙而制造的混乱。尤其是,你很难去解释为什么需要额外的时间“以正确的方式”构建东西,而外面的世界正焦急的等待你把事情“做完”。
我们将这些妥协和错误称为技术债务的原因是,真正的意义上,你是在借用你的未来以完成某事,而将在未来以某种方式为此付出代价。当你做出这些妥协或错误时,有时几乎不会注意到它们。更多时候,即便你完全注意到了,它们也似乎是不错的赌注,因为它们正在让你获得一些令人向往的东西,例如上市时间,因为未来似乎并没有那么大的牺牲。但就像真正的债务一样,技术债务,除非管理得当,否则会累积到你唯一要做的事情就是偿还债务,而不是在你融资的产品上取得进展。
不管它如何累积,避免技术债务压倒和压垮你的诀窍是制定一种偿还债务的纪律。不幸的是,没有某种唯一正确的方法可以帮助你处理技术债务,而且我认识的每一家公司都以不同的方式处理这些问题。一些公司有严格的评审流程,有助于他们更加了解他们所承担的债务。当他们选择承担技术债务时,他们有一个现实的计划来偿还它,即在合理的时间内修复这些技术妥协。一些公司承认,即使经过全面审查,技术债务仍会累积,因此,他们将一部分研发预算分配给不断识别和偿还技术债务。或许最开明的公司会尝试预测技术债务的类型,考虑到他们所做工作的性质,哪些债务将最有可能自然积累起来,并尝试构建基础设施、工具和流程,以帮助最大限度地减少其累积。
无论采用哪种方法,每家公司迟早都需要偿还债务。如果你正在判断需要花费多少精力来偿还技术债务,一个好的经验法则是:如果你正在快速增长,那么你很有可能做得还不够;如果你增长缓慢,或者根本没有增长,偿还技术债务可能还不是你最大的问题;如果你不知道什么是技术债务,以及你的计划是怎么能确保它在未来不会成为你的问题,那么你可能已经陷入困境。
LinkedIn 的案例,对于快速发展的初创公司来说很常见,我们没有为我们的技术债务支付足够的利息,2011 年到期了。因此,在我们成为一家上市公司的短短几个月内,在一支坚实的工程师团队(包括该项目的负责人Mohak Shroff及其架构师Dan Grillo的带领下,开始了我们称之为InVersion 的项目,彻底重建 LinkedIn 破旧的、过时的软件开发基础设施。在为期两个月的项目中,每个 LinkedIn 工程师都同时工作在 InVersion项目的不同点上。大约进行到一半时,我们真的烧毁了我们身后的桥梁,拆除了 LinkedIn 旧的软件开发基础设施。再次提供新功能的唯一方法是完成新平台,我们需要将这一梦想变为现实。
InVersion项目有许多技术上的挑战,让大型工程师团队高效和敏捷的处理超大的软件,对任何公司来说都是一个巨大的挑战。但是,我们通过InVersion项目为 LinkedIn 带来的东西——持续集成、生产环境的自助化部署、基于主干的软件开发、 A/B 测试、生产环境金丝雀发布等——并不是在放卫星。有大量的工作,我们正在做很多创新的事情,但我们有一个计划并且知道该做什么。更为困难的事情,是决定做这项工作,然后不断的重新说服自己,我们可以一遍又一遍地完成这项工作,因为我们只是遇到了在这种困难和复杂的旅程中自然会遇到的诸多障碍。
有两件事让我们渡过了难关——一个普遍的信念,我们正朝着正确的方向前进;以及足够多的人承受着领导者的压力,即在任何给定的时间里,至少有一个人油箱里有足够的燃料,可以让人们相信我们有能力最终成功的信念。
到 2012 年 1 月中旬,我们再次能够为我们的成员部署很酷的新功能。即使在最初的几周,开发基础设施存在一些原始的错误,客观上也比从前的更好。到了2012 年年中,InVersion项目取得了毫无疑问积极的结果。
我们每天多次的发布部分LinkedIn实验,而不是每月发布一次。工程师更快乐,花更多的时间为会员构建东西,而不是与工具搏斗。考虑到我们过时的系统使创新工作变得多么困难,本可以发生的人才离职并没有实现。外部观察者开始注意到LinkedIn官网和我们的移动应用程序的改进速度正在加快 ,并想知道发生了什么变化,与此同时业务继续表现良好。
对于你应该如何应对应对技术债务的挑战,没有唯一的正确答案。但存在唯一的真理——迟早你必须投入时间和工作来偿还它。