欠债还钱,天经地义: 开发团队如何还技术债?
年底了,兄弟们项目交付的压力没有那么大了,因此每天有时间大家一起来过过项目的代码[平常也应该过代码的,而不是项目交付后再过代码]总结出来了很多问题和技术债:
- 魔数
- for循环层次嵌套太多
- 公共类重复开发
- 公共逻辑重复开发
- 缺乏单元测试
- 方法里面实现逻辑的代码行数太长
- 设计模式用的少
。。。。。。
代码写好就交,意味着欠债的开始;稍微欠点儿技术债的确可以加快开发速度,但是前提是要及时重构代码;如果一直不还,后果很危险,因为有的债是高利债,拖的时间越久,要还的债越多,甚至最后造成项目和产品的破产,重新开始立项;
下面是精益的鼻祖戴明博士的观点:
如果关注质量,那么长期来看质量会提升,成本会降低;如果关注成本,那么长期来看,成本会提升,质量会降低!
曾几何时,听到产品团队抱怨,一个小小的改动,去年1天就改好交给客户了,今年类似的功能,开发团队竟然说要4~5天,这简直不可思议,导致产品和开发之间的隔阂和误解越来越深;
经过深层次思考后,个人觉得根本原因之一还是因为软件项目的技术债没有及时还:技术债不仅仅包括代码的bug,代码的风格,代码的安全性,可读性;其实还包括从设计角度留下的债,由于赶项目交付,本应该坚持的“开闭原则”(修改封闭,扩展开放),或者应该灵活处理的却hard code了,本应该抽取成公共方法或者服务的,却四处遍地开花 等等不一而足;江湖混,欠下的债迟早是要还的!下图的阴影部分就是欠的技术债。随着系统的功能越来越多,代码越来越复杂,如果不能高效的组织代码结构和代码本身,就会印证那句话“剪不断,理还乱,别有一番滋味在心头,夜不能寐,日食无味,天天想着快速交付变更,结果如踩泥地,越陷越深!”
技术债越多,变更的成本越大,请君看下面的曲线:技术债和成本的几何曲线。欠的技术债越多,随着时间的推移,其所花费的变更成本越大!
而技术债找出来后,应该如何去还技术债呢?借用敏捷项目管理思维方式来看,应该首先做下面的三件事情把技术债管理起来:
1. 从现在开始,不要继续欠债
以始为终,不忘初心! 既然已经了解了技术债的不好,那就从现在开始,从现有的手上项目开始,尽量不要旧债未还,又添新债。可以通过代码走读,
自己走读,发现问题,立马解决问题,不要再拖到后面。对于核心算法,该用TDD就用TDD,改写单元测试就写单元测试;
同时对完成任务的定义的要求也要严格起来;代码走读发现的重大问题不整改,就不让合并代码到发布分支!
2. 了解所以你欠下的技术债并记录下来
通过代码开发的插件,比如FindBugs,阿里代码规范插件,SonarQube,设计评审,QA测试等方式把发现的技术债记录下来。
3. 逐步偿还技术债
偿还技术债,笔者不建议抽取特定的一个时间段大家一起来重构代码,偿还技术债(当然如果这段时间的确没有新的项目或者功能需要做,倒也可以尝试,但不建议);在偿还技术债的时候,笔者建议,把技术债分轻重缓急,各个逐渐击破解决!
[1] 并非所有的技术债都应该还
如果你的软件产品马上就要被替换下线了,或者只是一个一次性原型(但是如果此原型要继续进行迭代,则还是要还的),又或者只是暂时的解决方案(一个月后马上就下线了)等等,对于此类的坏资产,即使去还技术债,意义也不大。
[2] 优先还高息技术债
对于经常被使用的,被依赖的公共模块或服务;或者用户使用最为活跃的功能;这一块的技术债是最值得优先偿还的。因为其带来的收益也是立竿见影的,也是巨大的。
[3] 应用童子军原则,有债就还
每次开发团队在开发新的产品或者功能的时候,从现在开始就要尝试把产品设计和实现做的更好,而不更差;对于在开发过程中偶然发现别的模块的问题或者Bug的时候,我们也可以根据我们实际的安排去修改或者重构这部分代码;比如可以把你发现的问题,创建一个JIRA Task,在下个Sprint甚至如果紧急且重要的话还可以临时加到这个Sprint去重构;
[4] 分期偿还技术债
就和现实生活中,我们分期还房贷一样,对于前期欠下的债;我们在前期整理出来的可视化的技术债,我们根据重要程度和影响范围分期,分步偿在每个Sprint里面加一些偿还技术债的任务。
[5] 一边做对客户有价值的新功能,一边偿还技术债
希望上面的笔记总结,能够抛砖引玉!
欠债还钱,天经地义: 开发团队如何还技术债?相关推荐
- 为什么不断做迁移,那是在还技术债
本文来自2018年QCon旧金山大会的演讲,Will Larson谈到Stripe公司的代码剧增后,迁移是有效治理技术债的唯一机制,同时他还介绍了不断迁移的方法. 我是Will Larson.在这里, ...
- 如何领导团队做好技术债管理?
来源:InfoQ 作者:Csaba Okrona(在 Contentful 担任高级工程经理) 译者:张健欣 策划:褚杏娟 技术债(Technical debt,或 tech debt)在过去几年中成 ...
- 开发团队建设与管理的一些心得
在软件开发的工作中,我们都要经历团队协作这个历程,有句话说的好,"软件开发是一项目团队运动",虽然这句话已经忘记是从哪本书上看的了,但这一句后的含义确让我们需要去更多的深思与实践, ...
- 运维开发团队技能与效率提速利器:运维+低代码
10月,由嘉为科技携手腾讯蓝鲸智云联合主办的智慧生长·研运未来暨2021年研运治理实践大会在北京成功召开. 在20日下午进行的智能化运维分论坛上,来自嘉为蓝鲸的研发总经理周宗沛同与会嘉宾探讨了低代码与 ...
- 软件开发团队常见角色职责
职责定位,专业的事由专业的人去做 一般一个团队中包含一下这些分工角色:技术总监.项目经理.项目助理.系统分析.产品经理.leader,主程.辅程.测试.美工,DBA等,他们的大致职责描述如下. 技术总 ...
- 飞秋2010 开发团队建设与管理的一些心得
在软件开发的工作中,我们都要经历团队协作这个历程,有句话说的好,"软件开发是一项目团队运动",虽然这句话已经忘记是从哪本书上看的了,但这一句后的含义确让我们需要去更多的深思与实践, ...
- 2019规模化敏捷春季峰会 --之不断增长的技术债
2019年3月30日,有幸参加了光环国际举办的219规模化敏捷春季峰会,一共13个主题,我选择了吴言(隆正信息 敏捷总教练)老师带领的第三个主题---不断增长的技术债. 话题进行流程: 1.问题 2. ...
- 技术债是什么、怎么还?你想知道的都在这一篇文章里了!
前两周写了关于技术债务的文章,尽管实践中会堆积技术债,但这个概念并不在我们的工作中频繁出现.这篇文章就系统性讲讲技术债,让大家避免知其然,不知其所以然. 一.技术债是什么 技术负债(英语:Techni ...
- 【华为云技术分享】开发团队中的任务没人领取,你头疼吗?
背景 在传统开发模式下模下,发任务由项目经理指派给个人的,而在敏捷开发模式中,是由任务是项目经理指派给个人的,而在敏捷开发模式的务队领取的.很多企业开发任务的时候,有几个任务型中认领怎么办?问题:&q ...
最新文章
- Spring常问的面试
- [Python3] 003 变量类型概述 数字类型详叙
- 061_Apex 异常捕捉
- java io体系_java IO流的体系结构图
- 使用Notepad++来比较文件
- mapreduce复制连接的代码_MapReduce:在大型集群上简化数据处理(2)
- python多任务-线程
- Pr入门系列之十:添加视频效果
- ASP.NET Core WebApi返回结果统一包装实践
- vue react 写法区别
- 微信公众开发 表情开发php,微信公众帐号开发教程第9篇-QQ表情的发送与接收_PHP教程...
- ubuntu14.04安装LSD_SLAM
- 加拿大 计算机硕士 哪个学校 便宜,加拿大计算机硕士成功案例1(学生成绩中)...
- 苹果开发者账号购买流程
- 添加Win10文件夹详细信息------统一显示内容
- 常微分方程的解法 (四): Matlab 解法
- DHT网络 学习笔记
- 任正非:华为考虑向苹果等竞争对手销售5G芯片
- workflow bulider 官网下载路径
- LWIP学习笔记(4)LWIP网络接口管理