先检查这个功能是否已经对外可见、是否被真实用户触发过、是否与其他已上线流程存在代码或数据依赖。若三项都无,最稳妥的动作是冻结入口并保留代码一个迭代周期,而不是立刻删除;若已可见且有人使用,则先下线入口、保留数据表,再决定是否重写或迁移。缺少完整数据和后台权限时,仍可做的最小动作是只改入口和导航,不动数据库,这能阻止新用户进入,但无法证明旧数据可以安全清除。
常见矛盾是产品侧已经取消这个需求,开发侧却因为功能已经写完、测试通过而留在代码库里。它可能仍挂在某个路由下,也可能只是被导航隐藏。此时“留用”与“下线”不是二选一,而是要先判断它处于哪种状态:已发布可访问、已发布但入口被隐藏、仅存在于代码分支,这三种状态对应完全不同的处理成本。
一个常见的误判是把“没人反馈”当成“没人使用”。在缺少访问日志或埋点的情况下,没人反馈只能说明没有明显投诉,不能推出功能未被触发。反过来,日志里出现零星请求,也不能直接证明有真实用户依赖,因为可能来自爬虫、监控探活或旧缓存页面。
解释一:团队因为已经投入开发工时,倾向于保留,这是沉没成本惯性。它的特征是功能没有明确业务归属,没有验收人,也没有后续维护排期,只因为“删了可惜”而留着。
解释二:功能确实被某个流程隐性依赖。比如另一个页面的表单提交后调用它的接口,或者运营人员仍在用它的后台入口导出数据。它的特征是存在调用关系、数据表被其他模块读写,或有人能说清具体使用场景。
这两种解释的处理方向相反:前者应尽快下线入口,后者应先解耦再下线。判断错方向,要么留下长期无人维护的代码,要么删掉后打断某个仍在运行的流程。
在数据和权限不完整时,可以按以下顺序取证,每一步都能缩小范围:
这些证据只能支持倾向性判断,不能单独证明可以安全删除。特别是请求量归零,合理解释包括入口早已被隐藏、监控未覆盖该路径、或统计口径只统计了部分域名,不能直接等同于无人依赖。
假设一个场景:某广西网站设计项目中,一个“在线预约试听”功能开发完成后需求被取消,但代码已合并,入口仍挂在旧版页面底部。此时没有后台权限查看提交记录。
可执行的最小动作是:先在前端移除该入口链接,保留路由和接口不变,观察一个约定周期。这个动作的结果分两种:若期间没有出现相关报错、没有运营反馈数据缺失,说明入口层依赖很弱,下一步可以评估删除接口和路由;若出现表单提交失败、后台导出缺数据等反馈,说明存在未识别的依赖,下一步应转为梳理调用方,而不是继续删除。
需要强调的是,观察期内没有反馈,只说明没有触发明显故障,不能推出数据可以立即清除。数据表通常应比代码多保留一段时间,因为代码可以回滚,被删除的数据无法恢复。对于涉及用户提交信息的表,删除前应确认没有法定的留存要求或对账需要。
满足以下条件时,倾向留用并纳入维护:功能有明确业务归属人,有可说明的使用场景,且下线成本高于保留成本。留用意味着它要进入常规维护范围,包括依赖升级和安全检查,不能以“反正没人用”为由跳过。
满足以下条件时,倾向下线:入口已不可达,代码内无外部引用,数据表无近期写入,且没有业务方认领。下线顺序应是先切入口、再停接口、最后处理数据,每一步之间留出可回滚的间隔。
如果两者都不满足,即依赖关系说不清、数据权限也拿不到,正确做法不是强行决策,而是把它标记为待确认项,先完成入口冻结这个最小动作,同时把“谁能确认使用场景”作为下一步的前置条件。缺少完整数据时,能推进的不是结论,而是把不可逆操作推迟到证据足够之后再执行。