先给结论:不要因为“需求已取消”就默认下线,也不要因为“代码已经写完”就默认留用。判断依据应当落在三件事上——这个功能是否仍在产生可观测的使用、它是否与其他在跑流程存在硬依赖、以及继续保留它每年要付出多少维护代价。只有当使用、依赖、成本三项都指向同一方向时,决定才不需要犹豫;三项互相矛盾时,优先处理依赖,再谈取舍。
需求方说这个功能不做了,但上线后的统计里,页面仍有零散访问,接口仍有低频调用。这时容易得出两个相反的解释。
解释一:功能其实还有真实价值,只是提出取消的人不知道谁在用。解释二:这些访问只是爬虫、监控探活、旧缓存回源或内部测试留下的噪声,并不代表业务需要。
两种解释都成立,但对应的动作完全相反。前者应当留用并补回需求归属,后者应当下线并清理入口。
把访问量拆开看,比看总量有用得多。至少要看三个维度:
如果访问集中在少数固定地址、只请求健康检查路径、从不触发后续写操作,噪声解释更可信。如果存在多个不同登录账号、完成过完整业务动作、且时间分布与真实工作节奏吻合,价值解释更可信。这一步的动作是抽样导出近一段时间的访问明细并人工归因,归因结果直接决定下一步是联系使用方确认,还是进入下线流程。
很多功能不能单独下线,是因为别处在悄悄依赖它。常见硬依赖包括:
处理方式是先做一次依赖排查:搜索代码中对相关接口、数据表、配置项的引用,再确认这些引用是否仍在生效路径上。如果发现硬依赖,留用的理由就不是“还有人访问”,而是“拆掉会连带影响别的流程”,此时应当先解耦再谈下线,而不是直接删除。如果没有硬依赖,下线成本会低很多。
留用的代价不只是服务器开销,还包括每次改版、升级依赖、调整权限时都要顺带验证它。可以用一个假设例子说明比较方法:
假设某功能每月只被内部两三个人使用,但每次框架升级都需要额外半天回归测试,一年按四次升级计算,就是两天人力;再加上接口兼容处理与文档维护,保守估计每年三天。若这三天的投入换来的只是几个人偶尔使用,且存在更简单的替代路径,下线的净收益更明显。反之,如果这个功能支撑的是对外承诺或合同约定,保留成本再高也应先留用。
这里的数字只是用于说明比较方法,不是真实项目结论。关键是把“保留”折算成可比较的人力与风险,而不是凭感觉判断。
把上面的判断落成一条可复用的规则:
执行下线时,建议先隐藏入口观察一段时间,再删除代码与数据。隐藏期间如果没有任何有效反馈,删除的依据才更充分;如果出现使用方反馈,说明前面的归因漏掉了真实场景,应回到依赖排查这一步重新评估。这样做的结果是,每一步动作都会缩小下一步的不确定性,而不是一次性赌一个判断。