如何说服经理让你还清技术债务?

13

虽然最新的《Coding Horror》博客文章并不是我第一次听说这个概念,但当我阅读它时,我忍不住在脑海中将其应用到自己的项目中。

我正在处理的代码库是一个持续进行中的项目,现在已经有3年的历史了,而该项目早期的大部分代码都是由质量较差且监督不足的开发人员编写的,这导致了很多代码重复、性能差等问题。在与管理层的讨论中,我试图说明存在几个关键组件需要进行重构,并且这样做将在未来的迭代中节省很多时间和头疼的问题,尤其是在添加新功能和修复这些关键区域的错误时。虽然他们似乎相信我重构这些组件会很好,但他们不想给我执行这个任务的自由度。请注意,我说的不是整个代码库的重写或任何剧烈的改变,只是重写几个核心区域,需要2-3周的时间。

问题是,作为开发人员,如何向您的经理销售这些需要改进的区域,以及如何提出商业案例,以便现在就抽出时间来解决它们,而不仅仅是逐步改进某些地方?


这个问题不在本站的范围内,因此属于不适当的话题。请参阅我可以在这里问什么样的问题?哪些类型的问题应该避免提出?。您可以尝试在其他 Stack Exchange 网站上提问,也许是[pm.se]或[softwareengineering.se]。请务必阅读有关任何您打算发布问题的网站的帮助中心的相关页面。 - Makyen
5个回答

8
作为一名经理,我对于以下三种具体的业务情况之一进行代码重构/重写持开放态度:减少技术支持、增加新功能和提高安全性。
作为一名开发人员,我看到了另外两种“紧密相关”的情况,我会进行重构/还债。你可能会发现你的经理也持开放态度,但他可能会给你一个“那个表情”,告诉你他并不完全认同。
首先,有时候重构只是为了提高你添加新功能的能力。例如,如果你能预见到未来的业务需要系统更加灵活和适应性,那么你可能需要重新考虑一些原始架构的承诺。这是一个很好的还债机会。
其次,当正在编写的新代码与已存在的组件相关时,还债也是有道理的。例如,如果你正在添加一个逻辑上与现有类相似的新类,则将公共代码重构到父类中是有意义的。在此过程中,你也有很好的还债机会。

3
答案,一如既往地是“Show me the money”,例如-为您提议的解决方案展示商业案例。传统上,这将通过计算与低劣代码相关的服务任务或帮助台票来完成。由于您所说的项目尚未投入生产,因此您的具体情况可能会更加困难。
仅基于您所写的内容以及您的项目仍处于开发阶段的事实,我要警告您记住这句格言:“更好是完成的敌人。”(我相信这是由Michael Lopp创造或至少流行的。)也许在项目生命周期中有更好的时间来重构代码。

该项目已经在生产环境中,但我们正在定期(大约每季度)发布新功能和修复漏洞,这意味着每次发布前我们有约1.5个月的开发时间。我试图争取的是将重建这些关键组件加入到开发周期中,但目前还没有人同意我的观点。 - shsteimer

3
如果管理层表示同情,但不愿意给你2-3周的时间进行完整的重构,那么妥协方案是在修复这些组件中的错误时编写一些测试并进行有限的重构,并逐步改进代码。
你可以直接这样做,或者要求在这些区域的错误/特性估计中增加10%的预算用于此目的。

2

在我看来,偿还技术债务应该是每次提交代码时都以小块为单位进行,而不是每年花两三周的时间。

持续不断地进行小改进最终会产生惊人的效果。

那么就没有必要再征求许可了。 :-)

/罗杰


2
你链接中的主要文章已经有了完美的答案。以下是非常好的技术债务描述:
技术债务是由 Ward Cunningham 发明的一个很好的比喻,帮助我们思考这个问题。在这个比喻中,以快速和肮脏的方式完成工作会给我们带来一种技术债务,类似于财务债务。像财务债务一样,技术债务会产生利息支付,这些利息以未来开发中因为快速和肮脏的设计选择而必须付出的额外努力的形式出现。我们可以选择继续支付利息,或者通过将快速和肮脏的设计重构为更好的设计来还本。虽然偿还本金需要成本,但我们可以通过减少未来的利息支付而获得收益。
这个比喻还解释了为什么采用快速和肮脏的方法可能是明智的。就像企业为了抓住市场机会而负债一样,开发人员也可能为了达到重要的截止日期而负债。最常见的问题是开发组织让他们的债务失控,并花费大部分未来的开发工作来支付致命的利息。
如果项目要取得进展,项目经理首先必须关心它。如果他关心他的项目,那么以上描述应该足以让他意识到这个他可能从未想过的想法。只需帮助他建立一种管理方式,记录代码库中需要改进的所有位置。也许可以在问题跟踪系统中创建一个组或者父级工单。这样你就可以有责任和一个需要改进的列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接