结论先行:如果这个功能已有真实使用方、且维护它不需要持续投入新的开发资源,可以留用但必须补上归属人和退出条件;如果它没有明确使用方,或者每次改动都要连带修改主流程、权限或数据表,就应当下线,把代码和入口一起清理。判断依据不是“已经花了多少工时”,而是“留着它未来还要花谁的时间”。
需求取消时,功能往往处于不同完成度,处理方式也不同。
一个可操作的动作是:把该功能涉及的文件、接口、数据表和页面入口列成一张清单,逐项标注“被谁引用”。如果某个接口只被这个功能调用,删除它不会影响其他模块;如果被登录、订单或内容发布等主流程引用,就不能单独下线。这一步的结果直接决定下一步是“清理”还是“隔离”。
留用不是默认选项,它需要同时满足几个条件。
第一,存在可确认的使用方。这里的证据应当是操作记录、接口调用日志或明确的业务负责人,而不是“可能以后有人要”。第二,维护成本可控:不需要为它单独升级依赖、不需要在每次主流程改动时同步适配。第三,有明确的归属人,出问题时能找到人处理,而不是留在原开发者的记忆里。
假设某个温州本地企业的站内“预约到店”表单,需求方后来改成了只留电话咨询,但表单已经上线且每周仍有两三条真实提交。此时更稳妥的做法是留用,同时把它从主推入口降级,并指定运营人员定期查看。这样做的结果是:既没有浪费已有提交渠道,也避免了它继续占据首页主视觉。下一步就可以只做降级和监控,不再投入新开发。
下面这些信号出现时,倾向直接下线,而不是继续挂着。
下线时不要只隐藏入口。需要把前端入口、后端接口、定时任务、数据表字段和配置项一并处理,否则残留代码仍会在升级或迁移时制造问题。一个实际动作是:先在测试环境删除入口并跑一遍主流程回归,确认没有连带报错,再决定是否删除数据表。如果数据涉及历史记录,可以先导出归档再删表,而不是直接丢弃。
如果这个功能虽然当前没人用,却是某个对外承诺或合同义务的一部分,那么“无使用方就下线”的判断就不成立。例如网站曾对合作方承诺提供数据导出接口,即使对方长期未调用,也不能单方面删除,需要先确认合作是否仍然有效、退出是否需要书面通知。这种情况下,正确动作是把它标记为“冻结但保留”,并记录保留原因和复核时间,而不是当作普通废弃功能清理。反过来,如果只是内部曾经讨论过、没有任何对外承诺,就不适用这个例外。
无论留用还是下线,都要留下一条简短记录,内容包括:功能名称、当前状态、判断依据、归属人、下次复核时间。留用的功能应注明“不再新增投入”,下线的功能应注明“已清理哪些部分、哪些数据已归档”。这样做的结果是,下一次有人再问起这个功能时,不需要重新翻代码和聊天记录。下一步动作可以是:把这份记录放到项目交接文档里,并在下一次主流程改动前先查一遍,避免误删或误留。