年底了,兄弟们项目交付的压力没有那么大了,因此每天有时间大家一起来过过项目的代码[平常也应该过代码的,而不是项目交付后再过代码]总结出来了很多问题和技术债:

  1. 魔数
  2. for循环层次嵌套太多
  3. 公共类重复开发
  4. 公共逻辑重复开发
  5. 缺乏单元测试
  6. 方法里面实现逻辑的代码行数太长
  7. 设计模式用的少
    。。。。。。

代码写好就交,意味着欠债的开始;稍微欠点儿技术债的确可以加快开发速度,但是前提是要及时重构代码;如果一直不还,后果很危险,因为有的债是高利债,拖的时间越久,要还的债越多,甚至最后造成项目和产品的破产,重新开始立项;
下面是精益的鼻祖戴明博士的观点:

如果关注质量,那么长期来看质量会提升,成本会降低;如果关注成本,那么长期来看,成本会提升,质量会降低!


曾几何时,听到产品团队抱怨,一个小小的改动,去年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] 一边做对客户有价值的新功能,一边偿还技术债

希望上面的笔记总结,能够抛砖引玉!

欠债还钱,天经地义: 开发团队如何还技术债?相关推荐

  1. 为什么不断做迁移,那是在还技术债

    本文来自2018年QCon旧金山大会的演讲,Will Larson谈到Stripe公司的代码剧增后,迁移是有效治理技术债的唯一机制,同时他还介绍了不断迁移的方法. 我是Will Larson.在这里, ...

  2. 如何领导团队做好技术债管理?

    来源:InfoQ 作者:Csaba Okrona(在 Contentful 担任高级工程经理) 译者:张健欣 策划:褚杏娟 技术债(Technical debt,或 tech debt)在过去几年中成 ...

  3. 开发团队建设与管理的一些心得

    在软件开发的工作中,我们都要经历团队协作这个历程,有句话说的好,"软件开发是一项目团队运动",虽然这句话已经忘记是从哪本书上看的了,但这一句后的含义确让我们需要去更多的深思与实践, ...

  4. 运维开发团队技能与效率提速利器:运维+低代码

    10月,由嘉为科技携手腾讯蓝鲸智云联合主办的智慧生长·研运未来暨2021年研运治理实践大会在北京成功召开. 在20日下午进行的智能化运维分论坛上,来自嘉为蓝鲸的研发总经理周宗沛同与会嘉宾探讨了低代码与 ...

  5. 软件开发团队常见角色职责

    职责定位,专业的事由专业的人去做 一般一个团队中包含一下这些分工角色:技术总监.项目经理.项目助理.系统分析.产品经理.leader,主程.辅程.测试.美工,DBA等,他们的大致职责描述如下. 技术总 ...

  6. 飞秋2010 开发团队建设与管理的一些心得

    在软件开发的工作中,我们都要经历团队协作这个历程,有句话说的好,"软件开发是一项目团队运动",虽然这句话已经忘记是从哪本书上看的了,但这一句后的含义确让我们需要去更多的深思与实践, ...

  7. 2019规模化敏捷春季峰会 --之不断增长的技术债

    2019年3月30日,有幸参加了光环国际举办的219规模化敏捷春季峰会,一共13个主题,我选择了吴言(隆正信息 敏捷总教练)老师带领的第三个主题---不断增长的技术债. 话题进行流程: 1.问题 2. ...

  8. 技术债是什么、怎么还?你想知道的都在这一篇文章里了!

    前两周写了关于技术债务的文章,尽管实践中会堆积技术债,但这个概念并不在我们的工作中频繁出现.这篇文章就系统性讲讲技术债,让大家避免知其然,不知其所以然. 一.技术债是什么 技术负债(英语:Techni ...

  9. 【华为云技术分享】开发团队中的任务没人领取,你头疼吗?

    背景 在传统开发模式下模下,发任务由项目经理指派给个人的,而在敏捷开发模式中,是由任务是项目经理指派给个人的,而在敏捷开发模式的务队领取的.很多企业开发任务的时候,有几个任务型中认领怎么办?问题:&q ...

最新文章

  1. Spring常问的面试
  2. [Python3] 003 变量类型概述 数字类型详叙
  3. 061_Apex 异常捕捉
  4. java io体系_java IO流的体系结构图
  5. 使用Notepad++来比较文件
  6. mapreduce复制连接的代码_MapReduce:在大型集群上简化数据处理(2)
  7. python多任务-线程
  8. Pr入门系列之十:添加视频效果
  9. ASP.NET Core WebApi返回结果统一包装实践
  10. vue react 写法区别
  11. 微信公众开发 表情开发php,微信公众帐号开发教程第9篇-QQ表情的发送与接收_PHP教程...
  12. ubuntu14.04安装LSD_SLAM
  13. 加拿大 计算机硕士 哪个学校 便宜,加拿大计算机硕士成功案例1(学生成绩中)...
  14. 苹果开发者账号购买流程
  15. 添加Win10文件夹详细信息------统一显示内容
  16. 常微分方程的解法 (四): Matlab 解法
  17. DHT网络 学习笔记
  18. 任正非:华为考虑向苹果等竞争对手销售5G芯片
  19. workflow bulider 官网下载路径
  20. LWIP学习笔记(4)LWIP网络接口管理

热门文章

  1. C++学习笔记4:编程练习一
  2. openwrt修改logo
  3. java射击_java射击类游戏
  4. 国内一些黑客高手的联系方法
  5. 用adb pull复制Android手机里的文件到服务器遇到system/bin/sh: adb: not found
  6. 名帖191 米芾 行书《苕溪诗卷》
  7. IP地址及相关计算方法知识
  8. 关于在vue中实现7天免登录
  9. jedisPool相关参数说明
  10. android emoji转换成字符串,安卓的emoji表情转换为文字