当你的技术债务到期时,LinkedIn的故事 | IDCF

22db4f32b86d48f597094dd28855c9d5.gif

原文:https://www.linkedin.com/pulse/when-your-tech-debt-comes-due-kevin-scott/

译者:冬哥

bd66829588b658e65dd5311d1394947d.png

那是 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官网和我们的移动应用程序的改进速度正在加快 ,并想知道发生了什么变化,与此同时业务继续表现良好。

对于你应该如何应对应对技术债务的挑战,没有唯一的正确答案。但存在唯一的真理——迟早你必须投入时间和工作来偿还它。

8e73f8cf750cca1ee79910097510a612.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Libsvm分类步骤

1. 样本集的整理:提取特征,以LIBSVM指定格式存储。2. 特征的标准化处理:特征的缩放Scaling,避免量纲的影响。3. 选择合适的核函数类型4. 优选核函数的参数与C采用:交叉验证(或留一法)、grid-search5. 基于优选的参数&a…

ant vue 语言_Ant Design Vue是什么

Ant Design Vue 是蚂蚁金服 Ant Design 官方唯一推荐的Vue版UI组件库,组件的风格与Ant Design保持同步,组件的html结构和css样式也保持一致。Ant Design Vue 是遵循 Ant Design 的 Vue 组件库。是蚂蚁金服 Ant Design 官方唯一推荐的 Vue 版 UI 组件库&a…

再现神人!仅仅只花4天半就解开了史上最难密码,这下整个圈子都炸开了.........

全世界只有3.14 % 的人关注了爆炸吧知识鲁迅先生曾说,记录这东西,就是用来打破的。前阵子程序员圈子一定热呼的不可开交,咋回事?还不是因为有个程序员妹子捅出了一个大篓子。事情是这样的,在德国慕尼黑有一个名叫 Leah…

布鲁克大学计算机科学,布鲁克大学计算机科学本科.pdf

布鲁克大学计算机科学本科.pdf留学监理服务网布鲁克大学计算机科学 - Computer Science基本信息所属学校 布鲁克大学 - Brock University 所在院系 数学与科学学院 - 计算科学系专业名称 计算机科学 - Computer Science 学历层次 本科计算机与信息科学 计算与计算授予学位 计算…

HDU 1856 Brave Game(巴什博奕)

Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3175 Accepted Submission(s): 2105 Problem Description十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部…

拥抱开源!除了微软红帽,这些国际大厂你认识几个?

在上世纪 90 年代,开源操作系统 Linux 出现时,有能力自行安装使用的用户并不多。因此,早期开源社区和开源软件厂商的一大工作就是向用户售卖书籍,提供初始的技术支持。比如基于 Linux 的内核,一批开源软件厂商开发出不…

J2EE第五课Servlet随课笔记

把上课笔记全上传到博客中,二原因: 1 方便自己以后查阅,看得多,记得多 2 提供一些笔记给刚学JAVA的朋友, 笔记: 1 1、什么是Servlet? 2 是运行于服务端(java服务器)的一个jav…

乒乓球单循环赛_乒乓球淘汰赛制和单循环赛制的比赛方法是什么?

展开全部一、乒乓球淘汰赛制比赛方法:1、32人先进行1轮淘汰赛,获胜的16人进入胜62616964757a686964616fe78988e69d8331333431363531者组,失败的16人进入败者组2、败者组第一轮:16人参赛,失败的8人被淘汰,胜…

详解Oracle DELETE和TRUNCATE 的区别

语法delete from aa truncate table aa 区别 1.delete from后面可以写条件,truncate不可以。2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之…

湖南工业职业技术学院计算机协会,计算机网络协会

一、协会简介于2005年成立,系信息工程系直属协会。以学习网络知识理论及技术实践为主,以业余活动为辅的双向协会。由我系专业教研团队亲自授课教学,达到教学合一效果。注重培养高技能、高素质综合能力人才。二、协会宗旨以普及计算机基础知识…

浙大月赛C题(2012/8)Cinema in Akiba(线段树)

http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId4791 (1)第一次写浙大的题目,这题让我十分意外,基本的线段树类型(求第x个空位)。 (2)电影院里,一次…

你是一个优秀的IT PRO吗?(下篇)

首先感谢一些朋友阅读我的拙作《你是一个优秀的IT PRO吗?(上篇)》才使得我有动力写出这个下篇。在上篇中,我只是简单的总结了几条,要成为优秀的IT PRO所需要注意的几点,在这片文章中,我将根据我…

oss多线程 上传_oss-android/ios-sdk 断点续传(多线程)

oss-android/ios-sdk 断点续传前言移动端现状随着移动端设备的硬件水平的不断提高,如今的cpu,内存等方面都大大的超过了一般的pc电脑,因此在现今的程序中,合理的使用多线程去完成一些事情是非常有必要的。多线程上传的好处进一步占…

生病了女朋友说要「陪床」,结果真的是陪床不是陪我......

1 生病住院了女朋友说要来陪床结果真的是陪床不是陪我......▼2 气氛突然微妙......▼3 隔壁的一家人都馋哭了!▼4 上街偷拍帅哥的正确方法▼5 WOW!AMAZING!▼6 史上最强小学生出现了!▼‍7 养二哈不光挺费家具的还挺废人的▼你点的每个赞&#x…

uiuc计算机课程,UIUC计算机科学专业解读

UIUC的计算机科学专业创建于1972年,到1986年基本定型,十多年来几乎没有什么变化。其中,数值分析方向课程中,Math225为矩阵论,CS257为数值方法,CS35x代表数值分析导论、常微分数值方法、偏微分与数值逼近和数…

Nutch 是一个开源Java 实现的搜索引擎

Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。 Nutch的创始人是Doug Cutting,他同时也是Lucene、Hadoop和Avro开源项目的创始人。Nutch 诞生于2002年8月,是Apache旗下的一个用Java实现的…

我的KT库之----数据对象

了解或者认识KT: http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html 在项目中如何使用KT? KT是一个库,所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。 本节将介绍大家认识KT库里的数据对象(DbObject)。KT里的数据…

System.Text.Json 自定义 Conveter

System.Text.Json 自定义 ConveterIntroSystem.Text.Json 作为现在 .NET 默认提供的高性能 JSON 序列化器,对于一些比较特殊类型支持的并不太好,业务需求中总是有各种各样的需要,很多时候就需要用到自定义 Converter ,对于微软新出…

jwt的token自动续约_JWT(JSON Web Token)自动延长到期时间

cchamberlain..6如果您使用的是节点(React/Redux/Universal JS),则可以安装npm i -S jwt-autorefresh.此库根据用户计算的访问令牌到期之前的秒数(基于令牌中编码的exp声明)计划刷新JWT令牌.它有一个广泛的测试套件,可以检查很多条件,以确保任何奇怪的活动都伴随着有关环境配置…

50张图,带你认识大学各专业

全世界只有3.14 % 的人关注了爆炸吧知识专业选的好每天像高考掐指一算,开学就近在眼前。当初纠结自己是考清华还是北大的那一幕也还是历历在目。不过,最后还是没有选择他们,一是因为北京离家太远,怕自己想家,二是因为他…