先给结论:不要因为“需求已取消”就直接删除,也不要因为“代码已经写了”就默认保留。判断标准只有一条——这个功能是否仍在为当前有效的用户任务服务,并且维护它不会拖累主流程。若它已无人使用、无入口、无数据依赖,且下线成本低于继续维护成本,就应下线;若它仍被间接调用、承担合规或数据留存职责,或下线会破坏已承诺的对外行为,就应留用并明确归属。
第一种条件:功能有独立入口、有可观测的使用行为,且与当前营销目标一致。此时留用的理由不是“开发都开发了”,而是它仍在完成一个真实任务。第二种条件:功能没有入口、没有对外承诺、没有其他模块依赖它,只是当时需求变更后留下的半成品。此时继续保留只会增加理解成本和回归测试面。
区分这两种条件,可以看三个证据:一是有没有页面、接口或定时任务仍在调用它;二是有没有数据表、日志或报表仍在写入和读取;三是有没有对外文案、合同或已发布页面提到它。三项都为空,倾向下线;任意一项成立,先按留用评估,再决定是否降级为内部保留。
实际动作从代码和运行环境两头查。代码侧搜索函数名、路由路径、模板引用和配置项;运行侧看访问日志、任务调度记录和数据库最近写入时间。若日志显示近一个完整业务周期内没有真实请求,且没有其他服务调用,这只能作为“可能无人使用”的证据,不能单独证明可以删除,因为还可能存在低频但关键的场景,例如年度结算或人工触发。
盘点的结果直接决定下一步:如果发现被其他模块引用,先记录引用方和调用条件,再判断能否解耦;如果确认无引用,进入下线评估,而不是立即删除。下线评估要包含数据处置、入口移除、监控项清理和回滚方式。
决定留用,就要给它一个明确的责任人和维护级别。留用不等于原样放着:如果它已不服务当前营销目标,但仍有合规或数据留存价值,可以把它从用户界面移除,只保留后台任务或只读接口,并标注为“冻结维护”。冻结维护意味着不再接受新需求,只修复影响主流程的故障。
假设一个场景:某活动报名功能的需求已取消,但报名数据表仍被月度报表读取。此时正确动作不是删除功能,而是保留数据读取路径,移除前台入口,并把报表依赖写进说明。这样做的结果是,后续清理时不会误删报表数据源,也不会让已经产生的数据失去解释。
下线按“先断入口、再停写入、后清代码、最后处理数据”的顺序推进。先移除页面链接和导航入口,观察一个业务周期;确认没有异常后停止新数据写入;再删除路由、模板和配置;数据是否删除要单独判断,涉及财务、合规或历史对账的数据通常不随功能一起清除。
例外情况有三类:一是功能虽无入口,但被外部系统按固定地址调用,直接下线会造成对方失败;二是功能承载了已对外承诺的行为,例如已发送的邮件或已发布的页面仍指向它;三是删除会触发不可逆的数据丢失。遇到这三类,先保留最小可用路径,再安排替代方案和通知,而不是按普通废弃功能处理。
无论留用还是下线,都应留下简短记录:功能名称、原需求状态、当前调用方、数据处置方式、责任人和复查时间。记录的作用不是走流程,而是让下一次清理时能快速判断这个功能为什么还在。若选择下线,复查时间用于确认没有遗漏调用;若选择留用,复查时间用于确认它是否仍值得保留。这样,需求取消就不再等于功能悬空,开发成果也不会因为一次判断失误而变成长期负担。