先把结论说清楚:需求取消不等于代码必须删除,也不等于应该继续维护。判断留用还是下线,看的是这个功能当前是否还有真实使用方、它的存在是否给主流程带来持续成本,以及保留它是否会让后续改版被迫绕路。三者都偏向“有使用、低耦合、可独立”,留用才成立;只要其中两项偏向“无人用、高耦合、每次改动都要连带处理”,下线通常更省事。
开发到一半需求取消,最常见的处理是先把代码留着,理由是“以后可能用得上”。几个月后你会发现,这个功能在后台还挂着入口,数据库字段还在写入,前端菜单还占着一个位置。它没有报错,所以没人主动清理;可一旦要调整导航、改权限模型或迁移数据,它就成了必须先解释清楚的历史包袱。
这里有两种截然不同的解释。第一种:功能确实还有人在用,只是当初提需求的人离开了,使用方没被记录。第二种:功能已经没人用,只是因为它不报错、不影响页面打开,所以一直没被注意到。两者表面现象一样,处理方式却完全相反。
能区分上述解释的证据不是“功能能不能打开”,而是下面几类可核查的记录:
把这四项放在一起看,判断会清晰很多:访问和写入都长期为空、依赖只指向自身、两个相关方都确认不再需要,才构成下线的充分证据。只要有一项相反,就应先留用并补上标记,而不是直接删。
决定留用,不等于原样放着。留用的合理条件是:功能有明确使用方,且它的存在不会迫使主流程为它让路。满足这个条件时,建议做三件事:
这样做的实际结果是:下次再遇到导航调整或权限重构,你可以直接关掉开关,而不必重新做一轮考古。留用从“暂时不删”变成了“有边界地保留”。
假设你已确认无人使用、无外部依赖,下线也不要一步删库。更稳的顺序是:
这个顺序的价值在于:每一步都能为下一步提供证据,而不是靠一次判断赌全部。入口隐藏后仍有人反馈,就回到留用分支;无人反馈,再继续往后走。
假设某网站开发了一个“活动报名”模块,活动取消,需求随之作废。如果日志显示报名页近半年访问为零、报名表无新增记录、代码中只有报名页自身引用该表,那么下线是合理的,按“摘入口—断接口—归档数据”推进即可。反之,如果报名页访问为零,但报名表每天仍有定时任务写入(例如同步自线下渠道),那么它只是“前台没人用”,后台流程仍在依赖,此时应保留写入逻辑,只下线前台入口。两种情况的表面现象都是“活动取消了”,但证据不同,动作就不同。
需求取消后的功能,最怕的不是留或删,而是没人记得它为什么还在。无论这次选择留用还是下线,都建议在项目文档里留下一行:功能名、当前状态、判断依据、复查时间。这样下次改版时,你面对的不再是一个“看起来还能用”的黑盒,而是一条有证据、有结论的记录。判断留用还是下线,本质上是在为未来的自己减少一次考古工作。