应对 DevOps 中的技术债务:创新与稳定性的微妙平衡
技术性债务在DevOps到底意味着什么?从本质上讲,这是小的开发缺陷的积累,需要不断地返工。它可能由多种原因引起,例如快速交付新功能的压力,这可能会导致团队不得不牺牲代码的整洁和完善。但这些不完整的小代码,如经济上的债务一样,随着时间的推移会产生“利息”,在软件工程里就表现为修改的挑战或添加新功能的困难。
一、技术债务的原因
技术债务的主要原因之一是组织的开发方和业务方之间的脱节。开发团队经常会感到保持高特性速度的压力,有时会以适当的服务规划为代价。例如,不计划服务生命周期的结束可能会导致所谓的“老年服务”。这些服务可能做得不多,但对业务运营至关重要,并且可能在以后产生更多的技术债务。它们可能很难迁移,也可能是未知影子或僵尸API的产物。结果是,开发过程可能会被更高效的工作方式所阻碍,从而招致更多的技术债务。
二、技术债务的症状
没有严格的监控,技术债务可能会减缓整个开发和部署过程,降低产品质量,并限制组织在不断变化的市场中进行创新的能力。技术债务过多的一些迹象可能包括修复技术债务的成本和时间增加,每次发布和部署所需的时间持续增加,以及由于在遗留系统上工作和处理频繁故障带来的挫折,让员工的流动率更高。
三、什么情况下可以忽视技术债务?
虽然技术债务的负面影响是真实存在的,但并不总是需要立即解决,而且这也并不现实。在一些情况下,让债务累积是有意义的。例如,如果解决技术债务的成本在当下大大高于将来,如果债务没有影响短期业务需求,或者有紧急版本发布(如重大安全漏洞修复程序)。在做出正确的权衡时,牢记全局至关重要,管理良好的技术债务是缩短交付周期的有效工具,可以优先考虑重要部署。
这里存在一个关键点:区分“好的”技术债务和“坏的”技术债的上下文。这种分离归结为理解对客户和团队的实际影响。忽略一些技术债务毕竟并没有那么糟糕,只要有有共同的上下文来指导自己的决策就好。

四、忽视技术债务成为挑战
当技术债务开始阻碍组织有效运作的能力时,忽视技术债务就成了问题。当这种情况发生时,就是需要解决技术债务的明显信号了。如果不加以解决,累积的技术债务可能导致经营业绩不佳和收入损失,从这个本质上来说,技术债务也成为了经济债务。产品和品牌的形象可能会受损,导致失去机会。
五、管理技术债务
管理技术债务需要采取积极主动的协作方法。以下是一些可能有所帮助的策略:
确定债务类型:所有的技术债务不能等量齐观。区分目前尚可接受的债务和不适合积压的技术债务。
分析和自动化:分析债务的来源,并寻找方法来收紧工作流或自动化某些测试和流程。这有助于减少常见错误和隐藏的错误,防止它们滚雪球般地变成技术债务。
制定新的规则和标准:需要明确技术债务在什么情况是可以被接受的,什么情况会造成不可逆转的损失。例如,发布即时安全修补程序可能被认为是可以接受的,而允许最终导致相当长的停机时间的错误则不会被接受。
沟通成本:决策者和DevOps团队必须了解技术债务对产品质量和开发人员保留的影响。当另一个截止日期到来时,确保这些关键利益相关者意识到风险。如完全了解潜在成本,他们可能更可能调整交付日期或为其他开发商提供资金。
总之,技术债务如果得到有效管理,可以成为短期内优化交付速度和创新的工具。然而,重要的是要保持平衡,不要让它累积到开始降低产品质量、减缓开发速度或损害团队士气的程度。通过主动识别、分析、管理和沟通技术债务,开发运营团队可以在软件开发的这个具有挑战性的方面进行导航,并维护其基础设施的健康。
应对 DevOps 中的技术债务:创新与稳定性的微妙平衡的更多相关文章
- 技术债务(Technical debt)的产生原因及衡量解决
第一次发布代码,就好比借了一笔钱.只要通过不断重写来偿还债务,小额负债可以加速开发.但久未偿还债务会引发危险.复用马马虎虎的代码,类似于负债的利息.整个部门有可能因为松散的实现,不完全的面向对象的设计 ...
- DevOps 和技术债务偿还自动化
当企业想要迁移到一个 DevOps 模型时,经常需要偿还高等级的技术债务 说得更明确一点,机构往往陷入「技术债务的恶性循环」中,以至于任何迅速.敏捷的迁移方式都无法使用.这是技术债务中的希腊债务危机水 ...
- CODING DevOps 系列第四课:DevOps 中的质量内建实践
什么是质量内建 随着时间的推移,我们项目的开发效率会逐渐降低,直到几年之后整个项目可能就无法维护,只能推倒重来.具体的表现首先就是随着时间推移,我们会发现整个需求列表里面能做的需求越来越少,因为每当我 ...
- 新华三孟丹:NFV资源池实现中的技术探讨
近日,在第三届未来网络发展大会SDN/NFV技术与应用创新分论坛上,新华三解决方案部架构师孟丹女士发表了主题为<NFV资源池实现中的技术探讨>的主题演讲. 孟丹指出,新华三的NFV核心理念 ...
- 如何在DevOps中实施连续测试
在过去的十年中,对软件开发的需求已急剧发展.软件已成为公司获得竞争优势的关键优势,特别是如果您的公司属于SaaS范畴.通过在SDLC中实施瀑布等传统流程,组织现在正在向敏捷过渡,以便以更快的速度在市场 ...
- [Android]使用MVP解决技术债务(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5892671.html 使用MVP解决技术债务 原文:https ...
- 干货:VLDB论文摘要-阿里技术突破性创新
阿里技术突破性创新 世界顶级大规模数据处理分析管理会议VLDB(VERY LARGE DATA BASE)于9月1日至5日在杭州举办,该会议也是也是大数据云计算领域的盛会,阿里巴巴两个团队在这个会议上 ...
- 技术债务管理以及Firefox/Chromium的债务评价
如今的软件开发是在遍地敏捷,人人讲唯快不破的时代,哪有人有时间思考代码质量,设计的质量? 哪个又不是从一堆代码中杀出血路来实现还有一个功能?一个产品都存活不了几年,何必考虑什么可维护性? 我们追求进度 ...
- 敏捷:你能区分DevOps中的“集成、部署、交付、上线、发布”吗?
在DevOps中,你可能经常会听到类似这样的一些话: 功能还没集成进来. 功能还没部署上去. 功能还没交付. 功能还没上线. 功能还没发布. 请问,以上“集成”.“部署”. “交付”.“上线”.“发布 ...
- 《DevOps实践:驭DevOps之力强化技术栈并优化IT运行》
DevOps实践:驭DevOps之力强化技术栈并优化IT运行 主旨 这本书并非坐而论道,而是介绍了DevOps全流程中的许多实践,以及相应工具的运用.虽然随着时代的推移,工具将来可能会过时,但是这些实 ...
随机推荐
- Java集合框架学习(十一) Hashtable详解
Hashtable介绍 1. 继承自Dictionary; 2. 线程安全: 3. 支持Iterator和Enumeration: 4. key和value都不可为null; 5. 一般用于多线程环境 ...
- 【Azure 应用服务】在App Service 中如何通过Managed Identity获取访问Azure资源的Token呢? 如Key Vault
问题描述 当App Service启用了Managed Identity后,Azure中的资源就可以使用此Identity访问. 如果需要显示的获取这个Token,如何实现呢? 问题解答 在App S ...
- kotlin协程异常处理之-try catch
kotlin协程小记 协程的async使用 kotlin协程异常处理之-try catch kotlin协程异常处理之-CoroutineExceptionHandler 一.try catch tr ...
- 详解Python中sys模块的功能与应用
本文分享自华为云社区<深入Python:sys模块的功能与应用详解>,作者: 柠檬味拥抱. 在Python的标准库中,sys 模块是一个常用而强大的工具,它提供了与Python解释器交互的 ...
- opencv库图像基础1-python
opencv库图像基础-python 基本操作 图片颜色通道 非灰度图的颜色通道是红绿蓝,在opencv中默认是BGR的顺序 argparse模块 argparse 库是 Python 标准库中用于命 ...
- linux FTP服务搭建,匿名用户访问创建上传文件
1.安装vsftpd 首先确认本地是否安装vftpd rpm -qa|grep vftpd 安装vsftpd yum install vsftpd 为什么呢??因为写权限问题 root 用户. 这 ...
- Github下载release附件变相提速方法
最近找到了个油猴插件,下载2M/s,推荐大家使用Github 镜像访问,加速下载 描述 github上面有许多开源的软件,作者们都打包发布为release版本,我们可以下载打包好的软件,但是,由于国内 ...
- 曲线艺术编程第一章 coding curves
原作:Keith Peters 原文:https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http ...
- RTP网络包提取码流方法
1.工具wireshark,官网最新的版本没有保存按键,建议使用3.4 链接:https://pan.baidu.com/s/1VHSGgojZPNtzyzV6RMVjkw 提取码:q51a 2.wi ...
- Mysql中数据类型括号中的数字代表的含义
相信大家不管是看别人的代码,还是自己的代码总会在定义表的数据类型时,会需要在数据类型后面加一个括号,里面写一个参数,例如int(3),smallint(5),char(5)等,但是括号里面的数字到底是 ...