先看这个功能是否还承载着仍在生效的业务目标:如果它服务的对象、数据或流程仍然存在,只是当初提需求的人离开或改了口径,留用通常比下线更省事;如果它依赖的前提已经消失,比如对应的产品线停售、目标市场退出或结算方式作废,那么继续维护它只会持续消耗人力,应当安排下线。判断的关键不是“已经花了多少开发成本”,而是“从今天起它还会不会产生价值或风险”。
需求被取消,不等于使用场景消失。常见情况是:提出需求的人调岗了,但后台仍有人每天在导出这份数据;或者某个国家的客户仍在按旧流程提交询盘。这时直接下线会打断真实业务。
可执行的动作是先做一次使用痕迹核查,而不是凭记忆判断:
如果发现仍有使用者,但频率很低,合理选择是留用但降级:把它从主流程中移出,停止继续开发新特性,只保留可用状态,并在代码或配置里标注为“冻结”。这样做的结果是,后续排期不再为它预留工时,但现有使用者不受影响。下一步应把这条功能登记进技术债清单,设定一个复查节点,而不是无限期搁置。
如果核查显示无人调用、无人写入,且它依赖的业务前提确实已经作废,那么留用就是纯粹的负担。此时不要直接删代码,而要按下线顺序处理,避免连带故障。
这个顺序的意义在于:入口先关,问题会以“访问失败”的形式暴露,容易定位;如果先删底层逻辑,故障会以数据错乱的形式出现,排查成本高得多。完成下线后,下一步是把释放出的维护工时重新分配给仍在生效的功能,而不是默认它会被自动节省下来。
评估时最容易出现的偏差,是把沉没成本当成留用理由。可以用下面这组对照来区分:
最后一种情况需要特别说明:调用量归零并不能单独证明功能该删。入口迁移、权限收紧、统计口径变化,都可能让记录消失而功能本身仍有潜在需求。这种情况下应先恢复一个可观测的入口,再观察,而不是直接判定无用。
假设某外贸站点开发了一个“按目的国自动计算关税预估”的模块,开发完成后,负责该市场的业务决定暂停该区域销售,需求随之取消。此时如果日志显示近三个月无任何调用,且该区域确实不再发货,那么按条件二下线是合理的,动作是先隐藏前端入口,观察一个结算周期后再清理计算逻辑。反过来,如果日志显示仍有来自其他区域的调用,只是提出需求的人不再负责,那就属于条件一,应保留并冻结,把复查时间点写进维护计划。两种选择的差别不在开发投入,而在前提是否仍然成立、是否仍有真实调用。
有些功能即便无人主动使用,也不能仅凭调用量下线。例如涉及发票留存、合同条款展示、跨境数据留存要求的部分,可能因为合规或对账需要而必须保留。此时应让财务或法务确认保留期限,再决定是留用、冻结还是转为只读归档。把这类判断交给使用量数据,是不充分的。
无论选择留用还是下线,都应留下一条明确记录:为什么这样决定、依据是什么、下次什么时候复查。这样当业务前提再次变化时,接手的人不必从零重估,也能避免同一个已取消的需求被反复开发。