热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

技术债务管理_技术债务管理很重要:您无法继续在损坏的系统上进行构建

技术债务管理每个软件公司都有一定的技术债务,这是通过在短期内采取捷径将代码发布出去而在长期内创造的额外开发工作。技术债务可以采取糟糕的设计决策,急需的重

技术债务管理

每个软件公司都有一定的技术债务 ,这是通过在短期内采取捷径将代码发布出去而在长期内创造的额外开发工作。 技术债务可以采取糟糕的设计决策,急需的重构,技术升级和突出的错误的形式。

就像承担实际的金融债务一样,技术债务现在会给您带来更多的时间,但将来必须以利息偿还。 就像金融债务一样,也有明智和不明智的方法来承担和管理技术债务。

在本文中,我想讨论一下为什么重要的是要Swift偿还技术债务以及不这样做的后果。 我还将解决软件工程师在尝试安排时间处理技术债务时面临的一些常见障碍。

应该指出的是,我是一名专业的软件工程师,因此本文将反映该观点,但是本文适合所有人。

为什么要减少技术债务?

让我们首先解决最基本的问题: 为什么要减少组织的技术债务? 毕竟,您的应用程序运行良好,到目前为止,您还算不错,当然您还需要完成更重要的功能工作,不是吗?

尽管这种推理方式很容易让人接受,但您会采取类似的方法来管理您的财务债务吗? 债务附带利息,如果您还清债务的速度很慢,利息很快就会累加。

Fabian Blank Unsplash 拍摄的 照片

如果您每个月只用信用卡进行最低还款,那么您最终可能还清数倍于您最初借入金额的款项。

相反,使用典型的30年房屋抵押贷款,每年多偿还一笔贷款会使贷款的总寿命减少数年,并节省数万美元。

显然,尽快摆脱您的财务债务很有意义。

是的,偿还技术债务需要花费时间和精力。 它确实使您脱离了其他功能工作。 但是,尽早还清技术债务是值得的。

让我们探讨偿还技术债务的一些好处:

1.它使您将来可以更快地移动。

2.它可以让您保留顶尖的工程人才。

3.它可以帮助您避免每隔几年重新编写整个应用程序。

1.快速移动

解决技术债务的普遍做法是“我们没有时间”。 如果我告诉您管理技术债务可以节省您的时间怎么办?

每当我听到有人告诉我他们没有时间偿还技术债务时,我都会想起这部漫画:

斯科特·西默曼(Scott Simmerman)的卡通

显然,拉动带轮的手推车比拉动带方轮的手推车要容易得多,而且速度更快。 然而,具有象征意义的是,组织会发现自己在拖拉带有方轮的推车而没有意识到这一点。

马丁·福勒(Martin Fowler)在他的文章“高品质的软件值得吗?”中阐述了解决技术债务和保持代码高质量的好处。 。

其中包含以下图形:

图片由Martin Fowler提供

棕色线代表忽略技术债务并允许其代码库质量下降的软件公司的发展轨迹。 尽管它们在一开始就可以更快地发布功能,但随着时间的推移,交付速度会越来越慢。

糟糕的设计决策,开放的错误,过时的技术或任何可能的功能,最终使功能开发陷入停顿,因为使用复杂多变的代码库变得越来越困难。

另一方面,蓝线代表软件公司的发展轨迹,该公司了解保持高代码质量,解决技术问题和及早修复错误的重要性。

尽管在开始时交付新功能确实起步较慢,但在短时间之后,他们在向客户提供价值方面就开始超过第一家公司。 这是因为他们在维护代码库健康方面所采取的谨慎态度可防止他们随着时间的流逝陷入困境。

2.保留顶尖的工程人才

这不是事实,更是轶事证据,但以我的经验来看,那些无法解决技术债务的公司会失去他们最好的工程师。 没有人喜欢在越野车系统或项目中工作,因为每天都在努力分配自己的工作。 很少有工程师喜欢使用“遗留代码”或使用已有数十年历史的技术。

Tim Gouw Unsplash 拍摄的 照片

因此,当开发人员的经验下降时,软件工程师会做什么? 那些能够找到更好工作的人去了其他地方。 换句话说,组织的高级人才会留下而那些找不到其他工作(无论是由于缺乏需求的技能还是由于其他原因)的人会留下来。

因此,如果您想保留顶级的工程人才,则您的组织需要证明其与工程师一样重视高质量的代码。

3.避免从头开始重写应用程序

公司为什么要从头开始重写他们的应用程序? 有时,这是一个非常正当的理由,例如在现代化平台时需要摆脱20年前的过时技术栈。

但是,由于我们前面在上面的Martin Fowler图表中讨论的开发速度问题,有时应用程序需要从头开始重新编写。 开发人员的经验变得如此痛苦,以至于最终您的工程师沮丧地举起了手,说:“我不能为此工作。 我们需要重新开始。” 经过许多长时间的交谈,组织最终同意并决定从头开始重新编写该应用程序,并为此花费了数百万美元。

照片由Amazon.com提供

我承认重新开始一个新项目很有趣。 您可以选择自己喜欢的编程语言和工具,并且这次可以“正确地”设计一切。 (尽管将来,其他开发人员可能对您的代码的感觉与您对当前旧版应用程序的感觉相同……)

但是可以避免这种情况吗? 我的回答是,是的,如果您优先解决技术债务并避免事情一发不可收拾,您可能会避免完全重写。

为什么无法解决技术债务

希望到目前为止,您已经同意尽快减少技术债务是一件好事。 那么为什么不解决技术债务如此普遍呢?

我可以想到一些原因:

1.工程师认为要素工作更为重要。

2.工程师认为解决技术债务不是他们的问题。

3.工程师们害怕退缩产品和工程管理。

4.工程师无法有效地说服产品和工程管理。

让我们看看这些原因中的每一个,并探索应对方法。

1.专题工作更重要

是的,发布新功能很重要。 没有功能,就没有产品。 但是您不能仅100%地开发功能。

当我听到有人告诉我功能工作更重要并且我们不能优先解决技术债务时,我不得不问自己,现在功能工作真的更重要吗? 我们的客户真的希望在一个已经很慢且有错误的应用程序之上提供另一个充满缺陷的半成品功能吗?

我在这里有点滑稽,但是这个问题有些道理。 如果我们正在谈论为客户提供价值,那么请确保提供良好的用户体验,这意味着确保该应用程序性能良好,并且没有使客户感到沮丧或阻止客户使用该应用程序的错误。预期目的。

一个让您同时使用功能和技术债务的不错的折衷方法是,每个sprint花费约70–80%的时间来开发新功能,而每个sprint则花费20–30%的时间来修复错误并解决技术问题。

塞巴斯蒂安·赫尔曼 ( Sebastian Herrmann) Unsplash 拍摄的 照片

2.技术债务不是我的问题

如果工程师有这种感觉,这很可能是潜在的工程文化问题的征兆。 我想在每个人都对代码库感到自豪和拥有所有权的环境中工作,并希望使其达到最佳状态。 如果某人不具有相同的价值和愿景,那么我可能不想与该人一起工作。

解决方案可能是:1)尝试以更积极的方向影响工程文化,或者2)让您离开公司,以便您可以找到一个具有更好文化适应性的组织。

3.害怕退缩

我在职业较新的开发人员中最看到这种恐惧。 他们可能会因为知道有一些重大技术债务需要解决而感到内心的冲突,但他们害怕表达这种担忧。 也许是因为他们认为大声说出来会对他们产生不良影响,或者可能危害他们的工作。

Icons8团队 Unsplash 拍摄的 照片

重要的是要记住,作为软件工程师,我们对公司在任何给定时间面临的技术债务有最深刻的了解。 我认为,当技术债务继续被取消优先级或被忽略时,我们实际上有义务表达这些担忧并退回产品管理或工程管理。

根据我的经验,只要您认真表达自己的担忧,退缩就不会给您带来尊敬。

4.无法说服

这导致我遇到第四个,也许是最关键的问题。 可以说,作为一名工程师,您确实同意解决技术债务很重要,并且已经在产品管理和工程管理中提出了这一点,但是他们没有听取。

Mimi Thian Unsplash 拍摄的 照片

在这种情况下,您不会感到无助,而可能只是需要更清楚地传达您的担忧。 如果您只是在说“我们需要解决此问题”,但您没有提供任何清楚的解释或原因,说明您为何没有有效地进行沟通。

您应该提供背景信息,说明您要优先考虑的技术债务为何如此重要以及这将给企业带来什么好处。 用非工程师的人可以联系和理解的术语来解释事情尤其重要。

例如:

“我们确实需要花一些时间编写测试,以增加此存储库中的代码覆盖率。 由于我们缺乏测试,因此经常引入错误,并且必须在生产中解决这些问题后再花些时间解决。 使测试套件处于更好的状态将使我们对代码更有信心,并确保我们的客户也对使用我们的应用程序有更好的体验。”

或许:

“我们现在有30个面向客户的开放错误。 这些给我们的客户带来了糟糕的体验,甚至导致一个客户取消了与我们的合同。 我真的认为我们需要花费此sprint修复这些错误,而不是研究此新功能。”

甚至:

“我们的持续集成流程花费了太长时间。 我们必须等待一个多小时才能获得反馈,以查看我们的构建是否通过,并且这种延迟的反馈循环使完成任务花费了很长时间。 我真的认为我们需要花一些时间来优化我们的构建,以使其完成得更快,以便我们所有的工程师都能更快地移动。 试想一下,如果我们的构建每次运行快十分钟完成,并且分散到100位工程师中,每位工程师每天创建五次新构建,我们还能完成多少工作。 每天节省的集体开发时间超过83小时(10 * 100 * 5/60)!”
结论

承担技术债务是不可避免的。 但是,组织如何选择处理其技术债务会成败一家公司。 作为一名工程师,我希望您感到鼓舞并有能力解决您目前在自己的角色中面临的技术债务。 这样做将使您的公司成为一个更好的工作场所,也将为您的产品用户创造更好的体验。

翻译自: https://hackernoon.com/technical-debt-management-is-important-you-cant-keep-building-on-a-broken-system-rr5b32bd

技术债务管理



推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • imnewtotheswiftandxcodeworld,soimhavingaproblemtryingtointegrateapackagetomypro ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Java8 Stream流Intermediate中间操作详细解析 ... [详细]
  • 1、完成图标功能要实现图标功能,首先是后端建表建dict表DROPTABLEIFEXISTSdict;CREATETABLEdict(namevarchar(2 ... [详细]
  • 二维条码二维码是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的在编码上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相 ... [详细]
  • 安卓编年史(4):Android
    安卓0.9显示着横屏的主屏幕——后续一些版本无法实现的一个特性[RonAmadeo供图]尽管从功能上很难将模拟器和操作系统区分开,但安卓0.9是第一个支持横屏显示的版本。更让人惊讶 ... [详细]
author-avatar
不会做饭的我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有