先不要问“这个功能还要不要”,而是把它当成一笔已经沉没的投入来评估:需求取消意味着它不再有明确的业务归属,但代码已经存在,继续留着会占用维护、安全更新和认知成本。判断留用还是下线,关键看三件事——谁还在依赖它、它是否产生对外可见的入口、以及下一次框架或依赖升级时它会不会成为阻塞点。只要有一项指向“无人依赖但仍有对外入口”,下线通常比留用更省事。
拿你手里的那份功能清单或后台菜单页面,逐个确认它是否还被真实调用。具体动作是:在代码库里搜索该功能的入口链接、路由定义和接口路径,记录每一条命中的位置。结果会分成三类——只被自己的页面引用、被其他模块引用、被外部系统或用户直接访问。第一类最接近可安全下线,第二类要先解耦,第三类必须保留或做跳转过渡。
这里容易出现一个误判:某个页面的访问统计归零,并不等于没人需要它。可能是入口被藏进了二级菜单、可能是统计脚本本身没覆盖到、也可能是用户改用线下方式绕过了它。所以统计只能作为辅助证据,不能单独作为下线依据。
把功能按是否暴露给外部来分。如果它只存在于后台、且后台账号里已无人使用,留用的理由通常只是“删了可惜”,这种理由不足以抵消长期维护成本。如果它对搜索引擎或已注册用户可见,下线就需要额外处理:旧地址返回什么状态、是否保留说明页、是否通知已收藏的用户。
假设一个场景:某功能原本用于展示临时活动信息,活动已结束、需求也已取消,但页面仍能被外部访问。此时可先把它从导航和站点地图中移除,再观察一段时间内是否还有自然访问或站内跳转命中。如果仍有稳定访问,说明存在未被识别的依赖,应改为保留但标注为维护模式;如果访问持续走低并最终只剩零星抓取,才进入下线流程。这个假设只用于说明比较方法,不代表真实项目数据。
留用不等于原样保留。可以分成两种:冻结留用和维护留用。冻结留用指不再改动、不再新增依赖,只保证它能正常打开;维护留用指仍会跟随框架或依赖升级做适配。两者成本差别很大,冻结留用适合那些外部还有零散访问、但内部已无人负责的功能;维护留用则要求有人能说清它为什么还必须活着。
直接删除代码和入口,风险在于出问题后难以快速恢复。更稳的动作是分两步:第一步,关闭对外入口并保留代码,观察一段时间;第二步,确认无异常后再清理代码和数据库结构。第一步的结果会直接影响第二步——如果隔离期内出现新的调用报错或用户反馈,说明依赖判断有遗漏,应回到清点阶段补充记录,而不是继续删。
隔离期需要记录的是:哪些请求命中了旧地址、报错来自哪个模块、是否有外部系统调用失败。这些记录比笼统的“没人用了”更有决策价值。
最后把判断落到一张处理单上,每行包含:功能名称、当前入口、依赖它的模块、对外是否可见、选择留用还是下线、下一步动作和负责人。如果某一行填不出负责人,这一行就默认走向下线或冻结,而不是继续挂着。这样做的好处是,下一次有人问起这个功能时,你能拿出依据,而不是重新讨论一遍。
对已经开发完成但需求取消的功能,最省成本的路径通常不是“先留着再说”,而是尽快完成依赖清点并给出明确状态。留用要有留用的理由和边界,下线要有下线的步骤和回退空间,模糊状态本身才是后续返工的主要来源。