先给结论:不要因为“需求取消”就直接下线,也不要因为“代码已经写完”就默认留用。判断标准应落在三件事上——这个功能是否仍在产生可观测的业务价值、它是否形成持续成本或风险、以及下线它是否会破坏其他仍在使用的部分。三者中任何一项无法确认,都应先隔离观察,而不是立即删除或继续投入。
常见的场景是:当初提出需求的业务方已调整方向,需求单被关闭,但功能已经上线。过一段时间查看访问日志,发现仍有请求进来。这时容易出现两种相反的处理:一种认为“既然需求取消,就应该下线”;另一种认为“还有访问量,说明有人用,应该保留”。
这两种判断都缺少关键前提。访问量本身不能证明价值,因为请求可能来自爬虫、监控探针、旧缓存回源、内部定时任务,或者只是某个页面里的残留链接。同样,需求取消也不等于功能无用,因为需求取消的原因可能是优先级调整、负责人变动,而不是功能本身失效。
要区分“没人要但机器还在打”与“仍有人在依赖”,可以先把解释拆成两类。
能区分这两种解释的证据,不是单一数字,而是来源结构、行为链路和时间分布的组合。只看总请求量,无法判断该功能是资产还是负担。
把“有人访问”与“产生结果”分开。可观测结果包括:提交了表单、完成了支付、生成了工单、触发了下游系统调用,或至少进入了某个需要主动操作的页面。如果只有页面加载,没有任何后续动作,它更接近展示型残留,而非业务依赖。
实际操作:为该功能单独标记一个事件或日志字段,连续观察一段有代表性的周期。如果周期结束后仍无业务结果,下一步就不是继续观察,而是进入下线评估。
已开发的功能不等于零成本。它可能带来:依赖库需要跟随升级、接口需要兼容、安全面需要巡检、文档和测试需要维护、新人需要理解。把这些成本列出来,与它带来的可观测结果对照。
假设一个短例子:某功能每月只有个位数请求,但依赖一个已停止维护的第三方库,且该库涉及对外数据写入。此时保留的维护成本和安全面,很可能高于它带来的结果。这个判断不依赖精确金额,只依赖“成本项是否持续存在”和“结果是否持续产生”这两个方向。
有些功能本身没人用,但被其他模块引用。直接删除可能造成其他页面报错、接口失败或数据不一致。因此下线前需要确认依赖关系:哪些页面链接到它、哪些服务调用它、哪些数据表或字段只有它在写。
实际操作:先做依赖扫描,再决定下线方式。如果存在依赖,先解除依赖或替换调用,再下线;如果无依赖,可以直接进入移除流程。这个动作的结果会直接决定下一步是“清理依赖”还是“执行下线”。
需要强调的是,请求量归零不能单独证明可以下线,因为也可能是采集方式变更、埋点失效或访问路径被临时阻断。反过来,请求量不为零也不能单独证明应该留用,因为可能只是机器在打。把来源、行为和依赖三者放在一起看,才能支撑留用或下线的决定。
很多情况下,功能整体不再需要,但其中某个数据表、某段校验逻辑或某个接口仍被其他部分使用。这时更合理的做法是拆分处理:下线对外入口和界面,保留被依赖的数据或逻辑,并把它迁移到明确归属的模块中。
这样做的结果是,站点不会因为一次清理而出现连锁故障,同时也不再为无人使用的界面持续付出维护成本。下一步就可以把清理范围记录清楚,避免后续再次误判为“仍在使用的功能”。