先给结论:不要因为“需求已取消”就立刻删除,也不要因为“已经开发完”就默认保留。正确的做法是把该功能拆成三条线分别判断——当前是否有真实入口、维护成本由谁承担、下线后是否影响已产生的数据或外部链接。只有三条线都指向“可安全移除”,才进入下线流程;否则先做隔离或降级处理。
假设某莆田企业建站项目在开发中期砍掉了一个“经销商在线报备”模块,前端页面和后端接口已经写完,但从未上线,也没有对外发过链接。此时团队面对的选择不是“删或留”二选一,而是四选一:直接删除、保留代码但关闭入口、保留入口但限制权限、完整上线。判断顺序应当是先看入口,再看数据,最后看成本。
这个情境的关键在于:功能“已开发”只说明沉没成本已经发生,不构成继续保留的理由。真正决定去留的是它未来会不会被用到、留着会不会拖累其他工作。
先做一次可核对的盘点,而不是凭记忆判断。可以按下面几项逐一确认:
如果入口为零、数据为零、外部引用为零,下线风险最低。反之,只要有一项不为零,就不能直接删除。这里要特别提醒:访问量或调用量为零,并不能单独证明功能没人需要,也可能是入口藏得太深、从未宣传、或权限没开。把这些合理解释排除掉之后,零数据才有说服力。
已投入的开发工时属于沉没成本,不应进入留用决策。真正要比较的是未来成本,通常包括:
可以做一个假设的对比:功能 A 保留后每季度约需 2 小时回归测试,功能 B 因依赖外部接口每季度约需 6 小时。若两者都无入口无数据,优先下线 B。这个数字只是说明比较方法,不代表任何真实项目的实测值。
很多团队把下线等同于删代码,其实中间有多个可逆层级。按风险从低到高排列:
建议默认从第 1 层开始。执行动作可以是:把导航项和按钮隐藏、在配置中关闭该模块开关、记录下线的具体时间与操作人。这样做的结果是——如果两周内没有人反馈“找不到某功能”,再进入第 2 层;如果出现反馈,可以快速恢复,而不必从版本历史里翻找。这个反馈观察期本身就是下一步决策的依据。
单个站点可以按上面的流程处理,但同一套判断搬到多站点或集团站群时,边界会变化。常见例外包括:
因此,规模化场景下不能直接照搬单站结论,而应先做依赖扫描,再按站点分别决定。个别样本成立,不等于整体成立。
综合以上,可以按这个顺序推进:确认入口、数据与外部引用;估算未来维护成本;选择可逆的下线层级;设置观察期并记录结果;观察期无异常后再决定是否彻底删除。任何一步出现依赖或数据牵连,就停在该层级,不要继续向下清理。这样既避免误删带来的返工,也避免无入口功能长期占用维护精力。