写点什么

防止和偿还技术债务:技术负责人和项目经理可以做些什么

  • 2024-03-19
    北京
  • 本文字数:1656 字

    阅读完需:约 5 分钟

大小:793.49K时长:04:30
防止和偿还技术债务:技术负责人和项目经理可以做些什么

技术负责人和项目经理可以通过给开发人员更多的时间来防止和偿还技术债务。此外,Nedelcho Nikolov 认为,他们还可以计划留出空闲时间和重构 Sprint,让团队有时间改进代码。为了确定技术债务的优先级,开发团队可以展示如果现在努力投入可以节省多少时间,以及如果现在不偿还技术债务,软件将在未来变得多么复杂。


Nedelcho Nikolov 在 2023 年 DEV Challenge Accepted 大会 上分享了他处理技术债务的经验。


Nikolov 说,技术债务常常是由截止日期造成的,因为你必须赶时间写代码,但又无法把它做好。你必须做出一些妥协,要么是单元测试,要么是一些在生产环境中运行良好但没人知道为什么要那么写的糟糕的代码。


造成技术债务的另一个原因可能是因为团队是个新团队,尚未制定编码标准,正如 Nikolov 所解释的那样:


我们有一个新组建的团队正在开发一个全新的项目,每个人都用自己的方式编写代码,这使得维护和发现问题变得困难。


Nikolov 说,技术负责人和项目经理可以通过给软件开发人员更多的时间来防止技术债务。他们还可以在项目中计划一些空闲时间,以便在大忙之后整理事务,或者允许团队进行几个重构 Sprint,让他们有时间改进代码。


Nikolov 认为,确定技术债务的优先级是很困难的,因为你必须说服你上面的人腾出时间来做一些不赚钱的事情。他建议在谈话中加入一些数字,比如如果现在努力投入可以节省多少时间,以及如果现在不偿还技术债务,软件将在未来变得多么复杂:


如果代码编写得很好并且没有债务,并且代码处于最新状态,那么可以通过开发人员的估算来获得这些数字。通常,利益相关者对数字比较感兴趣,所以这可能是最好的方法。


为了处理技术债务,Nikolov 建议团队每个 Sprint 投入一些时间来偿还债务,或者至少在团队成员完成任务并看到管道中有需要修复或重构的东西时。他建议现在就投入时间去做,这很容易做到。


另一种方法是整个专门用于修复的 Sprint,正如 Nikolov 解释的那样:


我们有一个新团队正在进行一个项目,按时完成了,但代码质量有所降低。完成后,我们专门用了几个 Sprint 进行重构。这样,我们成功偿还了债务,拥有一个干净、易于浏览和添加新功能的代码库。


Nikolov 补充说,只要有可能,就腾出时间来偿还技术债务,因为随着时间的推移,这会变得越来越困难。不要害怕技术债务,它是不可避免的。他总结说,技术债务让我们能够按时完成项目或任务,但我们必须在之后尽快偿还,这样就不会陷入一片混乱。


InfoQ 就处理技术债务的相关问题采访了 Nedelcho Nikolov


InfoQ: 如果我们无法对偿还技术债务的成本和收益进行详细估计,还有其他划分优先级的方法吗?


Nedelcho Nikolov: 另一种方法是使用投入/影响(Effort/Impact)矩阵,你可以对每个任务进行评分:


  • 容易做且对工作有很大影响——快速获胜(Quick Win);

  • 容易做,但不会有太大帮助,因为它位于没有发生变化的代码中,或者位于在不久的将来没有人会去修改的功能中——时间填充(Time Fill-ins);

  • 难做 / 需要更多时间,但会有很大影响——主要项目(Major Project);

  • 难做且对项目没有影响——钱洞(Money Pit)。


有了以上评分,你就可以很容易地优先考虑哪些债务应该现在偿还,哪些可以等。


InfoQ:如果随着时间的推移积累了大量技术债务,我们可以做些什么?


Nikolov:当你积累了很多技术债务,以至于很难处理时,就必须从头开始整个项目。说服利益相关者这样做很困难,因为你要花时间去做的不是为了赚钱或添加新功能的东西,而是重新做已经存在的东西,但要说服他们也并非不可能。


我们和团队曾遇到过这样的一个项目,一个 15 年的 PHP 应用程序,没有任何框架,在一个文件中混合了 PHP、HTML 和 JS 代码。利益相关者希望进行完整的重新设计,采用响应式设计。经过一些估算,我们成功说服他们从头开始整个项目。现在我们有了一个运行在 Laravel 上的现代 PHP 应用程序,前端使用 VueJS,搭配 Tailwind CSS。当然,由于我们的时间安排,现在有新的技术债务需要偿还,不过我们会在每个 Sprint 中逐步偿还这些债务。


原文链接

https://www.infoq.com/news/2024/02/prevent-repay-technical-debt/

2024-03-19 08:003741

评论

发布
暂无评论
发现更多内容

LeetCode题解:1051. 高度检查器,JavaScript,桶排序,详细注释

Lee Chen

大前端 LeetCode

浪潮信息推动AI在线教育实现全面应用

Geek_116789

架构师训练营第六周-总结

王权富贵

ARTS Week7

丽子

ARTS 打卡计划

你以为你真的理解 Closure 吗

coolion

大前端 闭包

raft协议中, 候选人角色能参与投票吗

程序员老王

raft

写一个并发测试工具

罗亮

Rust多线程之数据共享

编号94530

rust 多线程 数据共享 什么是多线程

图解:最短路径之如何理解“松弛”or“放松”?

淡蓝色

Java 数据结构 算法

LeetCode题解:141. 环形链表,JavaScript,快慢指针,详细注释

Lee Chen

大前端 LeetCode

Discuz插件设计

心平气和

php Diszuz 插件设计 插件系统

第7周笔记:性能优化

Melo

CAP原理

鲁米

上班摸鱼,可以玩一整天,哈哈哈!!!

诸葛小猿

上班 摸鱼

Flink 生态:Pulsar Connector 机制剖析

Apache Flink

flink

《架构师训练营》第七周命题作业

Android | Glide细枝篇

哈利迪

android 源码

IDEA命令行缩短器助你解决此问题:Command line is too long. Shorten command line...

YourBatman

intellij-idea spring IDEA springboot

WordPress插件设计

心平气和

php 插件设计 插件系统 WordPress

《架构师训练营》第七周总结

Week7 作业

Shawn

第7周作业:web性能测压工具

Melo

不变的是什么?

zhongzhq

依道而行 规律 变化

tcpdump 实例-获取网络包的50种方法

Rayjun

TCP/IP tcpdump

Debug ArrayList源码

Noneplus

Java

Java 基础知识整理

多选参数

Java

程序员都应该知道的数据库避坑指南

Phoenix

MySQL 数据库 事务隔离级别

负载均衡+分布式数据库

鲁米

第七周作业

田振宇

ARTS打卡第3周

Scotty

追光逐影:曝光相对论(1)

北风

摄影 影调 曝光 黑白

防止和偿还技术债务:技术负责人和项目经理可以做些什么_软件工程_Ben Linders_InfoQ精选文章