先看一个判断标准:这个功能是否还绑定着仍在运行的真实业务流程。如果它只是失去了一个入口或一份申请,但后台数据、审批链或对外承诺仍依赖它,留用并补上维护责任通常比下线更稳;如果它只服务那个已取消的需求,且没有任何在用数据流经过它,就应安排下线,把代码、配置和运维注意力释放出来。
需求取消往往只说明“发起原因”消失了,不代表功能承载的数据也一起消失。评估时先做一次调用与数据追踪,而不是先问开发想不想留。
如果追踪结果显示仍有在读或写入,留用成立,但必须指定新的归属人。否则功能会进入“没人认领但仍在跑”的状态,出故障时无人能判断该修还是该停。这一步的实际动作是产出一张引用清单,清单上有引用方就留用,没有就进入下线评估。
条件一:功能仍在支撑在用的对外承诺或内部流程。此时留用的依据不是“代码已经写了”,而是它承担了不可中断的职责。动作是补文档、补监控、把维护责任写进值班范围。结果是该功能从“取消需求的遗留物”变成有主人的资产,下一步才谈优化。
条件二:功能只服务已取消的需求,且无在用数据流。此时下线的依据是它不再产生业务价值,却仍占用依赖升级、安全修补和部署验证的成本。动作是先冻结入口,再观察一个约定周期内的访问与错误日志,确认没有异常调用后移除代码与配置。结果是发布流程变短,后续升级不再被这段代码牵制。
两种条件的差别不在功能新旧,而在“有没有仍在运行的责任”。责任存在就留,责任消失就下线,中间状态最危险。
无在用调用不等于可以立即删除。以下情形属于例外,需要先处理再下线:
假设一个报名功能,活动已取消,但报名记录涉及后续退费核对。那么正确做法是保留记录查询,下线新的报名提交,而不是整段删除。这个假设说明:下线通常不是一次删除动作,而是按“写入、交互、数据、配置”分层处理。
下线容易停在“代码注释掉”这一步,留下半死状态。可行的收尾条件包括:入口返回明确的停用提示而非报错;相关定时任务和队列消费者已停止;依赖清单中不再出现该模块;文档中标注停用日期与原因。达到这些条件后,再进入一次完整的发布验证,确认没有连带故障。
如果验证中出现其他模块报错,说明引用清单不完整,应回到第一步重新追踪,而不是把报错压下去继续删。留用与下线的选择可以随追踪结果改变,关键是每个决定都有对应的证据和责任人。