先看这个功能是否仍在产生可核对的访问、调用或依赖,再决定留用、隐藏还是下线。需求取消只说明立项理由消失,不等于代码必须删除;但如果它仍在被用户或系统使用,贸然下线会制造新故障。评估的核心不是“当初为什么做”,而是“现在谁在依赖它、移除后会发生什么”。
假设某站点的运营团队曾要求开发一个“活动报名导出”功能,用于一场线下活动。开发完成后活动取消,需求随之作废,但功能已经合并进主分支,入口挂在后台菜单里。此时团队面对的不是“删不删代码”这一道题,而是三个可选动作:继续保留并维护、从界面隐藏但保留代码、彻底下线并清理。
要在这三者之间做选择,先收集证据。可以查后台访问日志中该入口的点击次数、对应接口的调用记录、数据库里是否已有真实数据、其他模块是否引用了同一段逻辑。注意,访问量为零不能单独证明没人需要它:可能入口藏得太深、可能统计只覆盖了部分环境、也可能功能上线时间太短还没被用起来。这些替代解释必须逐一排除,否则“零访问”只是观察,不是结论。
使用证据回答“还有没有人用”。包括界面点击、接口调用、数据写入、外部系统调用。如果这些记录持续存在且来自真实用户,留用就有了理由。
依赖证据回答“删了会不会连带坏掉”。包括其他模块是否 import 了同一函数、模板是否复用了同一组件、定时任务是否引用了同一张表。依赖往往比直接使用更隐蔽,也是下线时最容易踩的坑。
维护证据回答“留着要花多少代价”。包括这段代码是否频繁出现在改动中、是否绑定了即将升级的旧接口、是否有安全或兼容性负担。如果它长期无人使用又频繁被动修改,留用成本反而高于下线成本。
把三类证据放在一起,通常会出现三种组合:有人用且有依赖,倾向保留但收缩入口;没人用但被依赖,倾向先解耦再下线;没人用也无依赖,倾向直接下线。关键动作是先解耦再删除,而不是先删除再救火。
如果证据显示功能仍有少量真实使用,但已不属于当前规划,比较务实的做法是降级而非删除:把入口从主菜单移到次级位置或加说明,停止对外宣传,冻结新需求,只做必要的安全与兼容修复。这样既避免误伤现有使用者,也不再为它投入新的开发资源。
降级后要设定一个复核点,例如下一个发布周期或下一轮依赖升级前,重新检查使用证据是否归零。如果归零且有替代方案,再进入下线流程。这个复核点让决策可回退,也避免“先放着”变成永久搁置。
决定下线后,顺序很重要。可以先隐藏入口并观察一个周期,确认没有新的调用出现;再移除路由和界面代码;最后清理数据表与关联任务。每一步之后都跑一遍相关测试和错误日志检查,确认没有 500 错误或任务失败再继续下一步。
数据要单独对待。已经写入的真实数据不应随功能一起删除,可以先归档或标记为只读,确认无人需要后再清理。假设这个报名导出功能里已有几十条测试数据,直接删表看似干净,但一旦有人拿它做过对账,恢复成本会很高。
最终决策应记录成类似这样的句子:“因使用证据为零、依赖已解除、维护成本上升,本功能于某次发布后下线,数据归档至某处,复核点为某时间。”这句话让后来者能判断当时的依据是否仍然成立,而不是只看到一个被删掉的功能。需求取消只是起点,证据和依赖顺序才决定这个功能该留、该藏还是该删。