先把结论分清:需求取消不等于代码必须删。评估的关键是看这段功能是否仍在产生可验证的价值、是否带来持续成本、是否构成风险。如果三项都指向负面,下线通常比留用更划算;如果它还在被真实用户使用,或者删掉会破坏其他模块,就应保留并明确维护责任人。下面给出一套可执行的判断顺序。
需求被取消,常见有两种情况。第一种是业务目标变了,功能本身仍有人用;第二种是目标没变,只是这个实现方式被放弃。两者处理方式完全不同。
判断依据可以看三点:
如果访问记录接近零,且没有其他模块依赖,留用的理由就只剩下“以后可能用得上”。这时要问:这个“以后”有没有明确时间点和负责人。没有的话,它更接近沉没成本,不是资产。
留用不是默认选项,而是需要条件。至少满足一条:仍有稳定用户在使用;它是某个核心流程的必经环节;下线成本高于维护成本。留用时要补两件事:指定维护人,以及把它纳入常规巡检。否则它会慢慢变成没人敢动的黑盒。
当功能的价值还在,但实现方式带来明显负担时,改写比直接删更合适。例如原实现依赖一个已停止维护的第三方组件,或代码与当前架构冲突。改写的判断标准是:改写后的维护成本是否明显低于继续维护旧实现。如果只是换个写法、成本差不多,就不值得为改写而改写。
下线适合以下情况:没有真实使用;没有其他模块依赖;保留它需要持续投入人力或服务器资源;或者它存在安全、合规风险。下线前要先做依赖排查,再决定是直接移除、隐藏入口,还是保留代码但停止对外服务。三种做法的可逆程度不同,选哪种取决于你能否承受回滚。
假设某网站建设时开发了一个“批量导出报表”功能,后来业务方向调整,该需求被取消。现在要决定它的去留。
四项都指向负面,下线是合理选择。具体动作可以是:先停用对外入口,观察一个完整业务周期;确认没有异常后,再移除代码和依赖服务。这个动作的结果会直接影响下一步——如果停用期间出现调用报错,说明依赖排查不完整,需要先补依赖清单再继续;如果没有报错,就可以进入代码清理。
反过来,如果访问记录显示仍有少量外部用户在用,就不能直接下线。此时更稳妥的做法是保留功能、明确维护人,并评估是否把它迁移到成本更低的实现上。这里的数字只是说明比较方法,不代表任何真实项目的统计结果。
功能下线不等于事情结束。至少检查三类残留:
这三类残留如果不清,下线只是把问题从“维护功能”变成“维护一堆看不懂的遗留物”。清理完成后,把结论记入项目文档,说明为什么下线、何时下线、还有什么未处理,下一次遇到类似决策时就有依据可查。
无论选择留用、改写还是下线,都建议留下一条简短记录,包含:判断依据、决定、执行动作、复查时间。复查时间很重要,因为今天没人用的功能,半年后可能因为业务变化重新被需要。有了记录,复查时不必重新翻代码猜历史,也能避免同一功能反复被讨论却始终没有结论。对已有经验的团队来说,真正省时间的不是一次判断得多准,而是每次判断都能被下一次直接复用。