先给有条件的结论:如果这个功能没有用户访问、没有数据写入、也没有对外承诺,最稳妥的动作是先下线入口、保留代码一个观察周期,而不是立刻删除。若它承载着订单、账号、合同或对外接口,即便需求取消,也应先做依赖排查再决定。缺少完整数据或权限时,你能做的最小动作是——从页面入口和接口日志两头各查一次调用记录,但查不到不等于没人用。
需求取消后,功能通常处于三种状态:入口还在但无人点、入口已隐藏但接口仍被调用、代码在但入口和接口都已停用。第一种和第三种处理方式完全不同。
可执行的最小动作:在服务器或应用日志里检索该功能对应的路由或接口路径,看最近一个完整周期内是否有请求;同时在前端代码里搜索入口链接、按钮文案和菜单项,确认还有没有可达路径。结果会直接影响下一步——如果日志有请求但页面无入口,说明可能有外部系统或旧版客户端在调用,此时不能直接删;如果两边都为零,才进入留用与下线的比较。
需要提醒的是,日志为零还有几种合理解释:日志保留期太短、采样或过滤规则把该路径排除了、请求走了另一个网关或旧域名、统计口径只覆盖了部分环境。所以“零调用”只能作为支持下线的证据之一,不能单独证明功能已经无人使用。
把判断拆成两个方向,比笼统问“要不要留”更容易操作。
“维护成本低”不能靠感觉。可以用一个假设例子说明比较方法:假设某功能每次框架升级需要额外半天回归测试,一年升级两次,就是一天;而重新开发同等功能的估算工时如果是三天,那么留用在下线决策上更划算。这里的关键是用同一套工时口径比较,而不是把“以后可能有用”直接折算成收益。
很多团队拿不到生产日志、数据库查询权限或第三方后台,这时容易走两个极端:要么凭印象直接删,要么因为查不到就无限期搁置。
在权限受限时,你仍能做的动作包括:查前端路由与菜单配置、查代码仓库里该功能的最后提交时间与提交说明、查接口文档或对接记录、向可能的使用方发一次书面确认。这些动作的结论强度不同——代码最后提交时间只能说明开发活动停止,不能说明使用停止;书面确认得到“无人使用”的回复,比日志为零更有说服力,但仍应保留回复记录。
不能推出的结论包括:不能因为“需求已取消”就认定功能无价值,需求取消可能只是排期调整;不能因为“没人反馈”就认定无人使用,沉默不等于不使用;也不能因为某次统计归零就立即删除,前面提到的日志口径问题同样适用。
假设某功能页面入口早已从导航移除,访问日志也接近零,团队据此判断可以下线。但排查接口时发现,一个合作方的定时任务仍在按旧路径提交数据,只是提交频率很低、恰好落在日志保留窗口之外。这种情况下,直接删除接口会导致对方任务持续报错,甚至产生数据缺口。
这个反例说明:页面无入口不等于接口无调用。只要功能涉及对外接口、数据写入或第三方对接,下线前就必须单独确认外部依赖,不能只依据前端可见性和短期访问量。
综合起来,推荐的动作顺序是:
这样做的结果是:即使最初判断有误,代价也只是多保留一段时间,而不是造成对外故障或数据丢失。反过来,如果功能明确涉及资金、账号或合同数据,观察期不应替代正式的依赖确认,应先把对接方和数据处理方式查清再动。最终判断标准可以归纳为一句话——下线的前提不是“没人用”,而是“能证明没人用,且删掉不会牵连别处”。