下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

编程语言找到管理技术债的好方法

作者:ALEXANDRE     来源: 架构头条点击数:915发布时间: 2020-11-05 22:26:17

标签: 编程语言Java视频软件工程师

大神带你学编程,欢迎选课

采访了200多位工程师,我找到管理技术债的好方法。如果所使用的翻译的机制是将所要翻译的程序代码作为一个整体翻译,并之后运行内部格式,那么这个翻译过程就被成为编译。因此,一个编译器是一个将人可阅读的程序文本(叫做源代码)作为输入的数据,然后输出可执行文件(object code)。所输出的可执行文件可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。

成长中的软件公司是如何处理技术债务的?为了解这个问题,我前后采访了 200 多位专家,最终知道了最好的软件工程师和领导者是如何管理技术债务的。

编程语言找到管理技术债的好方法_编程语言_Java视频_ 软件工程师_课课家

我们的新产品是客户开发工作的一部分。因此,我需要深入了解软件公司之间的差异,他们的技术债务有哪些可控,还有哪些是不可控的。技术债务是一个感性话题,提起它,人们就会喋喋不休。关于技术债务,你去问问公司的工程师就知道了。

在很多情况下(如果不是大多数情况的话),技术债务会不断累积,像“滚雪球”一样,直到产生严重问题。

Stripe 的一份研究发现:在一般的公司中,工程师们要花费约 33% 的时间来处理技术债务。技术债务不仅打击了团队士气,而且每年给公司造成约 850 亿美元的损失。看到这种情况,我们是不是该做点什么?

https://stripe.com/files/reports/the-developer-coefficient.pdf

Gartner 和许多其他公司让我们知道,应该做点什么。他们的研究显示,积极管理技术债务的组织能将其交付速度至少提高 50%。

幸运的是,我确实遇到一些公司,它们的技术债务管理策略非常可靠。在这些采访中,有很多让人眼前一亮的时刻。Everlane 的工程经理 James Rosen 告诉我:

考虑一下,PM 花了多少时间来策划要开发的特性集。现在,把这个时间与工程师们为技术债务寻找商业理由的时间做个比较。分配到技术债务上的工程能力几乎为零,这还那么令人惊讶吗?

我必须承认,这并不那么令人惊讶。

然而,我也遇到很多团队,他们花了大量时间和精力来管理技术债务,最终却一无所获。

我所有的研究都指向一个简单事实:成功管理技术债务的公司不仅开发出适当流程,而且还将这些流程完全融入了它们日常的敏捷行动中,成为一种好习惯。

这些工程团队控制住了他们的技术债务,因此,他们的交付速度更快,更可预测。结果,不仅他们的工程师很高兴,而且客户也很高兴——双赢!

做到这种程度,实际上无需付出太多。你只需要清楚——如何处理小型、中型、大型的技术债务。

1. 如何处理小型技术债务

工程师在代码中发现这种技术债务时就可以顺手解决,而且这也在他们正在进行的工作范围内。或许,它就是简单的重构函数或重命名变量。

Robert C. Martin 说道:”总是让代码比你发现它时更好。“

这类小工作不需要任何类型的计划,每个工程师都有权力在没有任何人批准的情况下解决这类债务。在这篇文章中,我们讨论了健康代码库所需要的一个文化特质,要确保你的工程团队具备这样的特质。如果不具备,现在就采取措施解决这个问题。

https://blog.stepsize.com/the-one-cultural-characteristic-you-need-for-a-healthy-codebase/

在这方面,有许多工具可以帮助你,比如 Code Climate、Codacy、Tech Debt Metrics extension for VSCode。

2. 如何处理中型技术债务

这种类型的技术债务可以在一个冲刺内被解决。它应该像任何特性工作一样经过同样的冲刺计划过程,并被严格地考虑。

大多数工程团队都没有做到——还记得 James Rosen 的评论吗?Rosen 说,“分配到技术债务上的工程能力几乎为零,这还那么令人惊讶吗?”

企业优先考虑为客户提供价值的工作,这是对的。况且,处理技术债务并不能做到这一点。

但技术债务却阻碍了你向客户提供价值的能力。

要明确说明这是如何发生的,请确定哪些债务妨碍了关键的主动性工作,或者在工程师生产力方面让企业损失惨重,或者是导致影响客户体验的 Bug 原因。

记录技术债务并量化其成本,这让你可以优先考虑这些债务,如果解决了这些债务,就会像新功能一样为客户带来价值。技术债务归工程组织所有。他们的责任是解决它,并最终为它提供商业理由。

遗憾的是,这正是我们现有的工具迄今未能做到的地方。

Jira 很适合管理项目,但跟踪和监控技术债务却很糟糕。——Unqork 首席工程师 Jake Peyser

代码质量工具只有助于发现一方面的技术债务,但其他大多数就无法捕获了。

https://blog.stepsize.com/7-examples-of-sneaky-tech-debt-and-how-to-spot-them/

工程团队处理技术债务的时间有限,他们需要充分利用这些时间。

幸运的是,Stepsize 可以帮助他们从工作流中捕获和跟踪技术债务,这样他们就能量化其造成的业务成本,并优先处理最重要的债务。

每个工程师都可以直接从他们的工作流(包括编辑器、PR 和 Slack)中报告技术债务和成本。这些报告都会被送到 Stepsize 网站,它们在那里被整理成“技术债务项”,描述和记录代码库中的问题。最后,每一张 Jira 工单上都会加上相关的技术债务项,解决它们可以更有效地为客户提供价值。

我们建议工程团队负责人承担管理这个过程的责任。他们个人掌握其团队所拥有的代码库中的技术债务,并在需要解决债务的时候与 PM 沟通。

3. 如何处理大型技术债务

这种技术债务不可能立即解决,甚至不可能在一次冲刺中解决。我采访过的最好的公司每季度都有技术规划会议,所有的工程主管都会参加。工程经理负责重点介绍汇报给他们的大型技术债务,并为那些他们认为最重要的债务提出商业理由。

这个过程听起来很费力,但对于 Stepsize 的用户来说却非常容易。他们的个人贡献者已经定期报告来自一线的债务。这些数据由每个团队和他们的领导者持续地审查和整理,他们将大量的债务——以及理解业务成本的必要数据——传递给他们的工程经理。Stepsize 甚至可以揭示每个 Jira 史诗的技术债务。然后,领导层可以利用他们对公司更广泛的优先事项和愿景的理解,对大型债务进行相应地排序。

每个大型债务经过批准后,就会被安排到路线图中,就像特性工作一样。这样,工程负责人就有了他们需要的所有数据,可以监控每个技术债务项的处理进展。

4. 小结

任何现代软件公司都应该能运用这个过程来处理小型、中型、大型的技术债务。然而,不同的公司之间有一点不同:商业目标。

妥善管理技术债务意味着解决阻碍你实现商业目标的债务。如果你的业务是建立在正常运行时间和可靠性的基础上,那就把任何会让它们处于危险中的债务偿还掉。如果开发速度是你的竞争优势,那么就消除任何浪费工程时间或增加新员工理解代码难度的债务。如果你想减少客户流失,就解决导致质量问题的债务。

明确处理每一笔债务的商业理由。因为当你这样做的时候,你就会更好、更快地交付软件——而且可以让你的工程师们开心。

虽然大多数的语言可以既可被编译又可被解译,但大多数仅在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程序先编译一个叫做“0代码”的转换程序(representation),然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二进制码,在很多时候,中间过渡的代码往往是解译,而不是编译的。

赞(8)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程