先给结论:不要因为“需求已取消”就立即删除,也不要因为“代码已经写了”就默认保留。判断依据应落在三件事上——这段功能是否仍在产生用户可见的入口、是否被其他模块依赖、下线后能否在可接受成本内恢复。三项都指向“否”或“可恢复”,才适合进入下线流程;只要有一项指向“是”且无法替代,就应转为冻结留用或改写收口。
需求取消通常有两种来源:一种是业务方明确不再需要这个能力,另一种是原定验收口径变了,功能本身还有使用场景。两者处理方式不同。前者要评估退出,后者更适合改写,把已开发部分收窄到仍成立的范围。
可操作的判断动作是回看需求记录与验收项:如果需求条目已被标记为关闭,且没有替代条目承接,属于真取消;如果只是验收项被替换,但页面入口、后台菜单或接口调用仍存在,属于口径变化。这个动作的结果会直接决定下一步——真取消进入留用或下线评估,口径变化优先改写,避免误删仍在用的能力。
已开发功能的留用价值不取决于开发投入了多少,而取决于它现在是否还连着真实使用路径。可以按下面顺序检查:
三项检查后会出现三种典型结果:入口在、有依赖、恢复难,适合留用并补维护说明;入口不在、无依赖、恢复易,适合下线;入口不在但有依赖,适合改写为内部能力或只保留接口层,不保留前台展示。
决定下线后,直接删代码往往不是第一步。更稳妥的动作是先隔离:关闭入口、停用定时任务、把相关配置标记为停用,观察一个约定周期。这个动作的结果是暴露隐藏依赖——如果有其他模块在这段时间报错,说明依赖判断有遗漏,应回到留用或改写分支,而不是继续删除。
隔离期结束后,再处理代码与数据。代码可以移出主分支或归档;数据是否保留要看是否涉及订单、用户提交或对账依据。若数据有留存义务,删除功能不等于删除数据,两者要分开决策。这里不需要给统一期限,期限应由业务对“多久没人用就算安全”的容忍度决定。
改写适合一种情况:原需求取消的是完整产品形态,但其中某个环节仍被需要。例如原计划做独立下单模块,后来改为在现有流程里加一步确认,那么已开发的地址校验或库存检查可以保留为内部校验,去掉前台入口和独立页面。
改写前要确认两点:一是承接方明确,即这段能力由哪个现有模块调用;二是验收项重新写清楚,否则改完仍无法判断是否完成。若承接方不明确,改写容易变成无限期维护,此时不如先冻结,等承接需求出现再处理。
假设某站点开发时做了一个“预约到店”功能,上线前业务方取消了这个需求。此时按三项检查:前台入口尚未发布,无用户可见路径;但订单模块引用了它的时间字段;重新开发预计比保留字段维护更麻烦。结论应是改写而非下线——保留时间字段与校验逻辑,去掉预约页面和提交接口,并在订单模块中注明字段来源。
反过来,如果该功能入口未发布、无任何模块引用、数据也不涉及留存,那么下线是合理动作:先停用路由与后台菜单,观察约定周期无异常后归档代码。两种情况的差别不在开发量,而在依赖与恢复成本。
无论留用、改写还是下线,都应留下一条简短记录:判断依据是哪一项、选择了哪个动作、隔离或观察的条件是什么、谁在什么条件下可以重启。这样做的实际作用是,当同一需求再次被提起时,团队不必从“代码都写了”重新讨论,而是直接看当时成立的前提是否发生变化。前提变了就重开评估,前提没变就维持原决定。