开始重写之前要考虑的事项

2020-05-13 04:28:56

从头开始重写软件的渴望是很难忽视的。然而,正如许多开发人员在整个职业生涯中都会学到的那样,重写可能很难成功完成,因为涉及的复杂性和工作量非常大。如果没有正确执行或由于错误的原因完成,那么如果你幸运的话,它将导致损失或很少甚至没有收获。因此,在开始大规模重写之前,重要的是要考虑为什么需要它,以及我们如何增加成功的可能性。

让我们来看看我们在整个决策过程中可以采取的一些步骤。通常情况下,软件工程师会是第一个发出警告的人,因为他们离源代码很近。在此之后,重要的是要调查原因。直觉是出问题的一个很好的指示器,但它不一定会给我们指出根本原因或适当的解决方案。

当我们感觉一款软件变得难以处理时,我们很容易得出结论,说它必须用一种闪亮的新技术从头开始重写。这就像“思考,快与慢”(Think,Fast&Slow)中的一个例子,在这个例子中,一位投资者选择了福特股票,因为他们的车展给他留下了深刻的印象。原因是他们面前有一个棘手的问题:我应该投资福特卡住吗?但潜意识里回答了更容易的问题:我喜欢福特汽车吗?我们都有这种倾向,所以我们必须确保我们问的问题是正确的,而不是关于我们喜欢哪种技术的简单问题。

因此,在我们开始开出解决方案之前,我们必须对问题有一个很好的了解。我们现在要解决的是什么?

要求改变的适当理由大致分为以下两类之一。它要么是服务我们的用户所需要的东西,帮助我们实现公司目标,要么是对开发人员的生产力和幸福感有足够大的影响,使我们值得这样做。

如果它是与用户或产品相关的东西,那么当出现问题时,它可能会更明显一些。例如,当我们查看性能、每周错误计数、事件和平均恢复时间等指标时,除了与应用程序相关的问题之外,我们找不到任何其他解释,那么很明显,我们应该修复产品中的某些东西。这并不一定意味着需要重写--我们稍后会研究这个问题--但它确实意味着需要改进的地方。

现在,如果我们谈论的是与开发人员生产力相关的问题,那么人类就会参与进来,所以这个主题就变得相当复杂了。我们在这里仍然可以看到指标,但重要的是要认识到,当它们与人类行为相关时,仅凭指标所能描绘的图景不会是黑白分明的。会有一些灰色地带,我们需要在上下文中解释每件事。例如,如果周期时间呈上升趋势,我们应该排除其他原因,比如团队如何分解故事,然后才能得出结论,这是由于技术债务造成的。如果团队是健康的,并且已经稳定了一段时间,那么确定这是一个技术问题还是流程问题应该是相当容易的。

一旦我们确定了问题所在的类别,对问题有了更客观的看法,并确定它确实是一个技术问题,那么我们就可以考虑决策中更困难的部分,那就是确定重写是否合适,以及成本是否可以接受。

你可能听说过谷歌每隔几年就会重写大部分软件,但你不太可能成为一家谷歌规模的公司,拥有超过20.000名工程师和数十亿美元的利润。

现实情况是,重写既昂贵又有风险。最初的代码可能已经经过了多年的战斗测试。当我们决定重写时,所有的复杂性都将重新浮出水面,并将不得不重新实现。知道了这一点,我们可以假设在开发过程中会有惊喜,这将导致我们需要更长的时间才能达到同等水平,这意味着我们需要更长的时间才能进行任何新的产品改进。最重要的是,在此期间可能会发生一些事情,导致公司转移重点,如果我们在重写过程中陷入困境,那么我们可能需要搁置它。这可能意味着失去几个月的工作。

出于这些原因,在可能的情况下,最好采用渐进式的方法。使用这种方法,我们尝试找出最大的痛点,并逐步开始逐步消除它们。那样的话,我们将开始以比重写更快的速度提供价值。此外,它的风险更小,因为我们可以在增量之间改变方向,而且如果我们不得不放弃一些东西,也不会损失大量的工作。

在许多情况下,也很难回答这个问题:付出的代价值得吗?这个问题没有简单的答案。我们最多只能在成本效益分析的基础上做一个合理的估计。以某种可量化的方式来做这件事是好的,只要我们意识到它永远不可能完全准确,只是作为一个粗略的估计。对于任何非常复杂的软件,总会有意想不到的后果,我们应该做好应对这些后果的准备。

我们已经看到,我们往往低估了成本,在进行分析时,我们应该记住,我们也经常高估了交换技术的好处。正如罗伯特·格拉斯(Robert Glass)在“软件工程的事实与谎言”(Fact And Fallacies Of Software Engineering)中所说,炒作是软件之家的瘟疫。工具和技术的改变通常只会导致生产率和质量提高5%到30%,而且这是在最初的学习曲线之后,在此期间生产率较低。因此,虽然肯定有必要进行技术更改,但我们应该意识到错误估计成本和收益的偏差。将Reaction应用程序重写为Vue可能不会给您带来太大好处,但如果您仍在雇佣COBOL开发人员,则可能值得考虑逐步将该系统替换为更现代化的系统,以提高可伸缩性和维护成本。

现在,一旦我们真的用尽了所有其他选择,并确定收益将超过成本,我们就可以得出结论,重写是合适的,并有理由相信这是正确的解决方案。