先给结论:不要因为“需求已取消”就立刻下线,也不要因为“已经写好了”就默认留用。评估的核心是看这个功能是否仍在承担可识别的工作,以及维护它需要持续付出什么。若它已无任何入口和调用,且维护成本会随依赖升级而上升,下线更合理;若它仍被部分用户、内部流程或旧接口实际使用,只是原始需求方不再推动,留用并降级维护更稳妥。
留用的前提不是“代码写得不错”,而是它仍在产生可验证的价值。常见信号包括:页面或接口仍有访问记录,且来源不是爬虫或监控探针;内部报表、对账、导出等流程还在调用它;合作协议或历史订单要求某段时间内继续提供该能力。此时留用的正确动作不是原样放着,而是把它从“项目功能”转为“维护项”:指定负责人、记录依赖版本、加入监控,并明确不再接受新需求。
下线的前提是价值已经消失,且继续保留会带来真实负担。典型信号是:入口已从导航和页面移除,接口调用连续多个周期为零,且没有合同或流程依赖;同时它拖住了框架升级、增加了安全面、让新成员误以为它仍在使用。这种情况下,拖延下线的代价通常高于一次性清理。
判断不能只靠记忆和口头确认。可以按下面顺序取证,每一步的结果都会影响下一步:
假设一个例子:某后台的“批量导入旧格式订单”功能,原始需求方已停止合作,入口也从菜单移除。日志显示近三个月无调用,但代码库中仍有一个对账脚本引用其解析模块。此时直接删除会导致对账脚本报错,正确动作是先让对账脚本改用新解析逻辑,确认跑通后再下线旧功能。这个例子说明,调用为零只说明入口侧可能无流量,不能单独证明可以安全删除。
决定留用后,要防止它继续消耗正常迭代资源。可执行的动作包括:把功能标记为“冻结”,在代码注释和内部文档中写明不再新增能力;锁定其依赖版本,避免被无关升级波及;为它设置最低限度的可用性监控,而不是纳入核心告警;在需求池中单独归类,避免被误排进新版本。这样做的结果是,团队知道它存在但不必为它做规划,后续若调用彻底消失,也能凭监控数据再次发起下线评估。
下线不是删代码一个动作。稳妥顺序是:先隐藏入口并观察一个完整业务周期,再停止写入、保留只读,最后才移除代码和数据。每一步之间留出可回退窗口,尤其是涉及财务、订单或用户生成内容时。例外情况是安全漏洞或依赖已停止维护,此时可以缩短观察期,但要把数据导出和备份做在前面。数据删除还应确认留存要求,不能因为功能下线就连带清空历史记录。
无论留用还是下线,都应形成一页记录:功能名称、原需求、当前调用证据、依赖清单、决定、负责人和复查时间。复查时间不是形式,它让“暂时留用”不会变成永久遗留。若下次复查时调用仍为零且依赖已解耦,就可以推进下线;若出现新的内部使用,则转为正式维护。评估的价值不在于一次判断对错,而在于让后续动作有据可依。