不要轻易重构

作者: 耗子吴 | 来源:发表于2015-06-13 17:23 被阅读1441次

在项目维护的过程中,由于工程师水平的参差不齐,很多需求时间紧、任务重,或又因前几任工程师离职没做好交接,导致了大量的可读性差、效率低下的代码,这时候,在职的工程师最想做的恐怕就是重构代码,将那些垃圾代码舍弃,按照自己良好的设计重新实现一遍。

在工程师看来,重构之后有非常多的好处:

  1. 代码更简洁,可读性、可维护性更强
  2. 实现新的需求效率更高
  3. 新人的学习成本更低

重构之后丢弃了过往的累赘,往往也会丢弃了过往的经验。尽管过去的代码十分丑陋,但它们确确实实可以正常地运转。如果要重构,能保证新的代码不会像过去团队的代码一样,慢慢变丑陋吗?依然会面临同样的风险,而且,过去团队已经付出的时间成本,还要再次付出一遍。

我所负责的项目就经历过这样一次重构,带来好处的同时也带来了很多伤害,主要有以下几点:

1. 用户很长时间看不到产品的变化,容易对产品失去信心

按照原本的开发计划,团队每周会响应客户反馈的 2 个改进意见,修正 4+ 个 bug,约两个月推出一个重点功能...用户每周都能感受到产品在改进,这会让用户更加喜爱你的产品,重构意味着舍弃了正常进度的产品更新,而需要花大量的时间来重新组织代码,而这所有改进,用户完全感知不到,一旦在某些功能上落后于竞争对手,可能就直接导致用户流失。

2. 以前遇到的坑基本会再踩一遍

工程师往往会低估重构的难度和所要消耗的时间,以前遇到的坑基本会再踩一遍。比如,在过去的版本中,导出的数据是带有公司 logo 和精美样式的 EXCEL 文件,重构时就没有考虑到这一点,结果又花了大量的时间去调整导出文件的样式。

为实现某个特殊需求,旧版写了很多丑陋的代码,在重构的时候,依然没有想到优雅的办法,但是用户已经严重依赖这个功能,又必须实现,后来重构的版本依然通过非常别扭的方案实现这个需求。

3. 技术上没有包袱了,但产品上的包袱更重

如果重构涉及到前端用户看到的部分,则面临的压力会更大。在过去的版本中,用户体验被打磨的非常细致,甚至很多你想不到的地方都被用户熟练掌握,一旦交互上有稍微大的改动,就会影响到他们的正常使用。

重构的版本还很难使用敏捷的方式快速迭代,一旦推出了新版的最小可行化版本,用户会吐槽比旧版差远了,为啥要用这个,如果要测试成熟再推出,用户等待的时间则会更加漫长。

4. 竞争对手利用这段时间可能已经走很远了

在重构的这段时间,你的竞争对手在马不停蹄的开发新的功能,拓展新的客户,而自己的产品对于客户来说却停滞不前。在重构之前,一定不能只从工程角度考虑问题,还要想想公司的生意。

如果必须要重构,如何做?

首先,在日常的项目管理中,为开发团队预留20%的自主时间,让他们自由支配。开发团队可以利用这些时间重写代码、完善架构、重构代码库中有缺陷的部分,避免“需要停下来重写代码”的情形发生。如果现有代码已难以维护,这里给出一点建议供参考:

  1. 针对重构和日常需求制订切实可行的计划和时间表。通常,有经验的开发团队估计的开发时间八九不离十,但是多数团队没有重构的实际经验,估计往往会过于乐观。这时必须仔细检查每处细节,确保计划切实可行。
  2. 把重构目标拆解,实现递增修改,同时要花精力保持产品迭代,让用户感受到产品的改进,哪怕会因此把3个月的工作时间延长至半年。重写代码时,保证让用户看到功能的改进——即使会占用少则25%,多则50%的开发资源——对保持产品的市场占有率至关重要。
  3. 由于开发用户可见功能的资源有限,必须谨慎选择正确的产品特性,确保产品定义的正确性。

相关文章

  • 不要轻易重构

    在项目维护的过程中,由于工程师水平的参差不齐,很多需求时间紧、任务重,或又因前几任工程师离职没做好交接,导致了大量...

  • 项目为什么要做重构?分享一个真实的重构案例

    写在前面 想想为什么要做重构? 如果没有能说出来的理由,建议不要轻易重构。 机票系统A的现状 A系统的背景 业务上...

  • 生活不应当是‘轻易就’的模式

    《生活不要轻易就…》 作者/时光与执着 不要轻易就说烦, 不要轻易就诉苦。 不要轻易就绝望, 不要轻易就悲伤。 不...

  • 三不

    不要轻易相信 不要轻易爱上 不要轻易放弃 -shelley.su

  • 不要轻易退缩,不要轻易推诿

    面对困难,不要轻易退缩,退缩一次,就会退缩两次,退呀退呀,就退成习惯了。 面对困难,不要轻易推诿。推掉麻烦的同时,...

  • 不要轻易拿起,不要轻易放下

    有人说,缘分注定是一场不长不短的旅行,有些人,你终会遇到,而有些人你注定只是过客!而此时,我们都在纠结,因为...

  • 选择

    选择很重要,不要轻易选择,不要轻易放弃

  • 我的心除了你还有谁

    请不要轻易离开我 我的心除了你还有谁 请不要轻易后悔 也不要轻易后退 也不要轻易去买醉 你这样会让我心碎 请不要轻...

  • 没有如果都是结果

    人生路上~哪来那么多的如果?眼前的一切,都是结果~ 不要轻易放弃! 不要轻易拿起! 不要轻易说爱! 不要轻易试爱!...

  • 2022-01-08

    不要轻易下决定,不要轻易否定自己的决定。

网友评论

本文标题:不要轻易重构

本文链接:https://www.haomeiwen.com/subject/pdbjqttx.html