结论先给:如果这个功能已经开发完成、没有独立的数据写入或权限扩散,而且能作为现有流程的备用入口,可以短期留用并设一个复核期限;如果它涉及额外账号体系、定时任务、第三方密钥或对外承诺,即使需求取消,也应尽快下线或封存,而不是让它继续以“已完成”的状态挂在生产环境里。判断的关键不是开发成本收不回来,而是它是否持续制造维护面和安全面。
需求取消后,功能仍留在代码里,表面看只是多几个页面。但真正的代价通常出现在后续每次改版、升级依赖和排查故障时:改一处公共样式要回归它,升级框架要验证它,做权限审计要解释它。若这个功能只读、不写库、不发消息、不调用付费接口,留用的边际成本相对低;反过来,只要它写数据、发通知、占用定时任务或持有密钥,留用就等于把一个无人认领的模块长期挂在系统里。
可以用一个假设例子来比较:某企业站曾计划做“经销商在线报备”,页面和表单都已开发,后来业务改为线下报备。若表单只把内容写进一张独立表,留用的代价主要是数据清理和后台权限;若它还会给区域负责人发短信、生成编号并触发审批流,那么留用意味着短信通道、审批逻辑和编号规则都要继续维护,此时下线更合理。
这四个问题里,只要“外部依赖”和“数据写入”同时为真,倾向下线;如果四项都为否,可以留用,但要给它一个明确的复核日期,而不是无限期搁置。
常见误判是:功能没有前台入口,所以留用没有风险。反例是后台仍保留着可访问的路由、接口或计划任务。比如某活动报名功能前台已撤下,但后台导出接口和定时清理任务还在运行,某次权限配置调整后,接口被低权限账号调到,导出了历史报名信息。此时“没有入口”并不成立,因为入口只是从前台换到了后台或接口层。
因此,评估留用前要实际检查三处:路由是否仍注册、接口是否仍可调用、计划任务是否仍启用。只看前台页面是否存在,不足以支撑留用决定。
这个顺序的意义在于:先停写入再删代码,可以在发现数据仍需使用时回退;反过来先删代码,往往连导出入口都一起没了。完成清理后,下一步动作是把这次取消的原因和归档位置写进项目记录,避免下一轮需求评审时又把它当成新功能重新开发。
留用不等于默认保留。应记录功能名称、负责人、留用理由、复核日期和触发下线的条件,例如“若连续一个季度无访问则下线”或“若相关第三方接口停用则下线”。复核日期到了就重新走一遍上面的四个问题,而不是等下一次大改版时才顺带处理。这样做的结果是:留用有明确边界,后续维护者知道它为什么还在,也知道什么情况下可以安全移除。