先不要按“有没有人用”一刀切。更可靠的做法是把这项功能拆成三层证据:它是否仍在产生可核对的价值、它是否带来持续成本或风险、它是否与当前业务方向冲突。三层证据指向一致时,留用或下线都容易决定;指向矛盾时,才需要设定观察期和退出条件,而不是靠感觉拍板。
留用成立的条件不是“代码已经写了,删掉可惜”,而是这项功能仍被真实流程依赖,并且维护它的边际成本可控。可核对的证据包括:近一段时间内是否有独立访客或内部账号实际触发过它;触发后是否完成了完整动作,而不只是打开页面就离开;是否有其他功能、接口或对外承诺依赖它。如果这三项里有两项以上成立,留用就有了讨论基础。
下线成立的条件则相反:没有可核对的调用记录,或者调用集中在极少数可替代路径上;维护它需要额外兼容、安全更新或数据迁移;继续保留会让新需求被迫绕开旧结构。此时“已开发”属于沉没成本,不应作为留用理由。需要提醒的是,调用量归零并不单独证明下线正确,也可能是入口被藏起来、统计代码缺失、页面报错导致没人能用到。先排除这些解释,再谈下线。
假设一个通化本地企业的网站里,原先为某次活动开发的报名表单,活动已取消,但表单、后台导出和通知邮件都已开发完成。可以按下面的顺序做一次分流:
这个动作的结果会直接影响下一步:如果记录显示仍有稳定提交,且这些提交需要人工跟进,那么应保留并明确责任人;如果记录为空但入口仍被外部引用,应先修正入口,而不是直接删除;如果记录为空且无外部引用、维护动作又明确存在,才进入下线流程。这里的数字只是说明比较方法,不代表任何真实项目的结果。
当功能仍有少量价值、但继续投入不值得时,第三种选择往往更实际:冻结。冻结的含义是保留代码和数据,但停止主动维护和对外展示,入口从导航和页面中移除,只保留一个内部可访问路径,并记录恢复条件。这样做的代价是代码库仍然背着这部分结构,好处是避免误删后无法追溯。
冻结适用的前提是:该功能不涉及持续收集个人信息、不依赖会过期的第三方接口、不与当前页面的结构强耦合。如果它涉及用户数据留存,或者依赖某个外部服务,冻结反而可能积累合规和故障风险,此时应优先考虑彻底下线并清理数据。判断标准不是“删了会不会后悔”,而是“保留它会不会在未来某个时间点被动出问题”。
下线不是删文件,而是一次有顺序的收尾。第一,确认没有其他功能在调用它的接口或数据表,避免连带故障;第二,确认对外入口、二维码、旧邮件模板里的链接都已处理,避免用户看到失效页面;第三,确认数据按需要备份或按规则清理,而不是原样留在服务器上。完成这三件事后,再移除代码和配置,下一步的维护清单才会真正变短。
常见的例外是:功能当前无人使用,但它承担着对外承诺或合同义务,例如报名、备案信息展示或售后入口。这种情况下不能仅凭调用记录决定下线,应先确认承诺是否仍然有效,再决定是保留、替换还是正式终止。换句话说,使用数据是重要证据,但不是唯一证据;当它与对外义务冲突时,义务优先。
无论最后选择留用、冻结还是下线,都应把判断依据和恢复条件写回需求文档:这项功能为什么被取消、当前处于什么状态、如果未来重新需要,从哪里恢复、由谁确认。这样做的实际作用是,下一次有人提出“这个功能还在不在”时,团队不必重新翻代码和聊天记录。对通化网站制作这类项目来说,需求变更本身很正常,真正消耗成本的是变更之后没有留下可核对的结论。
如果只能记住一个原则:已开发的代码不是留用理由,可核对的价值和可控的成本才是。先排除统计缺失和入口问题,再在留用、冻结、下线之间选择,并记录选择依据,这个流程比争论“删不删”更能减少后续返工。