先给结论:不要因为“代码已经写完”就默认留用,也不要因为“需求方说不要了”就立即删除。评估的核心不是沉没成本,而是这个功能当前是否还有明确的使用者、维护责任人和可承受的长期成本。比较稳妥的做法是先把功能从主流程中隔离出来,观察一个约定周期,再决定保留、改写还是退出。
需求取消通常只意味着原始目标消失,不代表功能与系统完全无关。评估第一步是查清它有没有被其他模块调用。假设一个案例:某后台原本要上线“批量导出报表”,需求方后来改用外部工具,但这个导出方法被另一个对账脚本引用。此时直接删除会连带破坏对账流程,正确动作是先把调用关系画出来,再决定是否拆出独立接口。如果调用方只有一个且同样停用,删除的风险就低得多。
反过来,如果功能只存在于代码库、没有任何入口、没有定时任务、没有外部调用,它就是一个“孤儿功能”。这类功能留用的理由通常只剩“以后可能用”,而这句话需要有人为它负责,否则就是长期负债。
三种处理方式成立的条件不同,不能混着用。
如果三种前提都不满足,说明信息不足,此时应继续隔离观察,而不是强行二选一。
一个可执行的动作是:把功能入口从导航和权限中移除,但保留代码和数据库表,同时记录一个观察周期,例如一个完整的业务结算周期。观察期内如果没有任何访问日志、任务触发或人工申请,再进入下线流程。这个动作的结果会直接影响下一步:有访问就转为保留或改写评估,无访问就准备删除脚本和数据归档方案。
需要注意,访问量归零不能单独证明功能该删。它还可能是因为入口被隐藏后没人找得到、权限被误配、或者使用频率本来就低到按季度出现。因此观察期要配合权限核对和业务方确认,而不是只看一个数字。
个别样本里“没人用就删”往往成立,但规模化后会出现例外。假设一个多站点建设场景:单个站点停用某个表单功能没有影响,但十个站点共用同一套组件时,其中一个站点的停用可能只是暂时,其他站点仍在依赖同一份代码。此时按单站点结论批量删除,会制造跨站故障。
因此规模化评估要增加一层:先按依赖关系分组,再按组决定。组内只要有一个活跃使用者,就整组保留或改写;整组无活跃使用者,才进入退出流程。这个边界不能直接照搬,因为依赖关系是具体系统决定的,不是通用规则。
无论选哪种处理,都建议留下简短记录:功能名称、原需求、当前调用方、决定、负责人、复查时间。这样做不是为了流程好看,而是让下一次评估有依据。如果决定是保留,复查时间到了要重新确认使用者是否还在;如果决定是退出,删除前要确认备份可恢复。缺少这步,同样的讨论会在半年后重复一遍,而那时可能已经没人记得当初为什么留下它。