先做一次“保留成本 vs 移除成本”的对照,再决定是否下线:如果功能已经进入生产环境、有真实访问或数据写入,优先选择隐藏入口并保留代码;如果功能只在测试环境、没有数据依赖,且维护负担明确,才适合彻底移除。两种做法都成立,区别在于是否已有外部依赖和回归测试的覆盖程度。
“需求取消”只说明业务方不再要这个功能,不等于它没有使用者。评估第一步不是看代码量,而是看它有没有对外产生承诺。可以从三个方向取证:访问日志中是否仍有独立入口的请求、数据库里是否已有该功能写入的独有字段或记录、接口是否被其他系统调用。三者只要有一项成立,直接删除就可能造成报错或数据丢失。
假设一个山西本地企业的站内“预约到店”表单,需求方后来决定不做线上预约,但表单已上线两周,后台已有几十条提交记录。这种情况下,数据库字段和后台列表都属于既有数据,删除功能会让历史记录失去展示入口,因此更适合下线前台入口、保留后台只读查看。反过来,如果功能只存在于开发分支、从未部署到生产,也没有任何数据写入,那么移除的代价主要是一次代码清理和回归测试,可以直接删除。
保留不等于什么都不做。留用意味着这段代码会继续参与构建、依赖升级和安全修补,每次改动周边模块都要考虑它是否受影响。因此判断留用的前提是:它的耦合程度低,或者移除它的回归成本高于继续维护的成本。
这里要提醒一个常见误判:请求量归零不能单独证明功能可以删除。原因可能是入口已被隐藏、搜索引擎缓存仍在引流、或者调用方改用了其他路径。要结合服务端日志、接口调用记录和代码引用搜索一起判断,而不是只看一个统计数字。
无论最终选择哪种,第一步动作都相同:把功能从用户可达路径上撤下,而不是直接删代码。具体做法包括移除导航和页面上的入口链接、对原路由返回合适的提示或跳转、保留后台的数据查看能力。做完这一步后,观察一段时间内的直接访问请求和接口调用,如果确实没有新的有效使用,再进入代码清理阶段。
这个动作的结果会直接影响下一步:如果关闭入口后仍有稳定的直接访问请求,说明存在未登记的外部依赖,应保留代码并补上说明文档;如果请求只来自爬虫或旧缓存,且没有数据写入,就可以安排移除。移除时同步清理相关的表字段、路由配置、权限项和定时任务,避免留下无法解释的孤立配置。若使用版本控制,移除应作为独立提交,便于日后需要时回溯,而不是和其他改动混在一起。
有几种情形需要单独判断。第一,功能涉及用户已提交的个人信息或交易记录,即使业务需求取消,也不能直接删除数据,应先确认保留期限和访问权限,再决定代码去留。第二,功能被写进了对外接口文档或已交付给第三方对接,下线前需要通知调用方并约定过渡期。第三,功能虽然无人使用,但它是某个核心模块的依赖项,删除会导致构建失败,这时应保留代码并标记为待清理,而不是强行移除。
还有一种情况是团队人手紧张。此时保留代码并隐藏入口,往往比立即删除更省事,因为删除需要完整的回归测试,而隐藏入口只需要验证主流程不受影响。代价是技术债继续存在,需要在后续排期中明确清理时间,否则这段代码会一直占用维护注意力。
评估结束后,把结论记录成一条可查的说明:功能名称、当前状态(隐藏入口 / 已移除 / 待清理)、判断依据(有无数据、有无外部调用)、复查时间。这样下次有人再问起时,不需要重新翻代码和日志。对已经隐藏入口的功能,复查时间可以设为一个业务周期;对已经移除的功能,记录移除的提交位置即可。决定本身不重要,重要的是让后续维护者知道为什么这样处理,以及什么条件下需要重新评估。