先给结论:不要因为“需求已取消”就默认删掉,也不要因为“代码已经写完”就默认保留。把这项功能当成一笔沉没成本,用一组可验证的问题重新评估:它是否仍在被访问或调用、是否影响安全与合规、是否拖慢后续迭代、是否有人愿意为它承担维护责任。四项都偏向“否”或“无人负责”时,下线通常比留用更划算;只要有一项明确为“是”且能找到负责人,就可以先留用并设定复查期限。
评估的起点不是开发者的记忆,而是可观察的数据。对页面类功能,看访问日志、页面浏览量和入口点击;对接口或后台功能,看调用记录、任务执行记录和报错日志。这里要小心一个常见误判:访问量归零并不等于功能无用,也可能是入口被隐藏、链接失效、权限配置错误,或者统计脚本本身没覆盖到。反过来,访问量不低也不等于必须保留,可能只是爬虫或内部测试在反复触发。
可执行的动作是拉一段足够长的时间窗口(例如覆盖一个完整业务周期),把数据按来源拆开:真实用户、内部账号、搜索引擎或监控探针。如果真实用户占比极低且没有业务方认领,这项功能就进入“候选下线”清单;如果仍有稳定调用,则转入“留用但需明确负责人”清单。这个拆分结果直接决定下一步是走下线流程还是走维护交接流程。
把功能逐项对照下面几个维度,每一项只回答“是/否/不确定”,不确定的项要指定人去查,而不是投票决定。
一个实用的分档方式是:业务价值为“是”且能找到负责人,留用;业务价值为“否”但耦合程度高,先冻结(保留代码和数据、关闭入口、停止对外承诺);业务价值为“否”、耦合低且涉及敏感面,优先下线。冻结不是拖延,它的前提是写清楚解冻条件和复查时间,否则会变成长期无人管理的隐患。
以下为假设场景,仅用于说明比较方法,不代表任何真实项目。某站点在改版时开发了一个“预约到店”表单,上线前业务方向调整,需求取消,但表单页面、提交接口和一张数据表已经完成。此时可以这样推演:
对应动作是:先关闭页面入口和外部链接,接口返回明确的停用提示,停止接收新数据;把已有数据按保留要求处理或清理;在代码中标注冻结状态和复查日期。做完这一步,再根据复查结果决定是彻底移除还是转为内部工具。这里的关键是,动作的结果会改变下一步——如果关闭入口后统计显示仍有外部调用,说明存在未发现的依赖,此时应暂停删除,先排查调用来源。
确定要下线时,顺序比决心更重要。先隔离,再观察,最后清理。隔离包括:移除页面入口和导航链接、关闭对外接口、撤销不必要的权限、保留一份可回退的代码与数据结构快照。观察期内继续看日志,确认没有意料之外的调用或报错。观察期结束后再删除代码、清理数据表和依赖配置。
如果功能涉及用户数据,删除前要确认保留期限和删除方式是否符合既有约定;不确定时应先停止收集,而不是直接物理删除。对于依赖第三方组件的部分,不要假定它仍然可用或仍然免费,应查阅当前实际状态后再决定是替换还是移除。任何清理动作都要能在出问题时回退,回退路径写清楚放在哪里、由谁执行。
选择留用并不等于什么都不做。留用的前提是:指定负责人、记录它为什么还留着、约定复查时间。负责人可以是业务方,也可以是运维或开发,但不能是“大家”。留用期间如果发现它持续无人访问、依赖组件出现安全问题、或维护成本明显上升,就应重新进入下线评估。
判断留用是否合理的证据,不是“删了可惜”,而是可核对的调用记录、明确的使用方和可承担的成本。把这项功能的当前状态、负责人和复查日期写进内部记录,下一次评估时才有依据,而不是重新争论一遍。