先给结论:如果这项功能已经开发完成,但对应的业务需求被正式取消,默认动作不应该是“既然做完了就留着”,而应该先判断它是否仍在被真实使用、是否产生持续维护成本、是否与当前业务口径冲突。多数情况下,留用只在这三个条件同时成立时才合理:有独立访问或调用证据、维护成本接近零、不干扰主流程。否则下线或隔离比保留更省事。
需求取消通常有三种含义,处理方式完全不同。第一种是业务目标变了,功能本身仍有人用,比如当初为某次活动做的报名入口,活动结束但入口还有自然流量。第二种是需求被替代,新流程已经覆盖旧场景,旧功能成为重复路径。第三种是需求从未真正上线验证,只是开发排期已走到一半,属于沉没成本。
区分方法不是问当初谁提的需求,而是看当前数据。对已上线功能,查最近一段时间的访问日志、接口调用记录、后台操作记录;对未上线功能,查是否有任何入口被配置、是否被其他模块引用。如果调用量、访问量或引用数为零,也不能直接断定该下线,因为还可能是入口藏得太深、统计未覆盖、或功能只在特定角色下触发。归零只是线索,不是结论。
很多人评估时只算“删掉要花多少工时”,忽略了留用的长期成本。已开发功能只要还在系统里,就会持续产生几类负担:
这些成本不会因为“功能已经开发完”而消失。开发完成只意味着前期投入已经发生,属于沉没成本,不能作为继续保留的理由。
建议按下面顺序处理,每一步的结果都会影响下一步:
其中“隔离”常被忽略。它适合需求可能反复、但当前确实不用的功能:关闭对外入口,保留代码和数据一段时间,同时记录恢复条件。这样既不干扰主流程,也避免立刻删除带来的返工。
反例是:功能虽然当前无人使用,但它承担着合规、审计或数据留存义务。例如某些表单提交记录需要按行业要求保留一定期限,此时即使业务需求取消,也不能直接删除数据或代码,而应转为归档模式并明确保留期限。这种情况下,“没人用就下线”的判断不成立,需要先确认是否存在外部约束。
另一个会让结论失效的情形是:该功能是其他仍在运行模块的隐式依赖。表面看没有独立入口,实际被内部调用。下线前应做一次引用检查,确认没有其他路径依赖它。
假设某次活动报名功能已开发上线,活动结束后需求方说不再需要。查日志发现活动结束后每天仍有少量提交,来源是旧页面被外部链接引用。此时直接下线会让这些用户提交失败。合理动作是先保留功能但关闭新提交,改为提示活动已结束,同时联系引用方更新链接。等外部引用清理完、连续一段时间无有效提交后,再归档数据并移除入口。这个例子的数字仅用于说明比较方法,不代表任何真实项目结果。
把待处理功能列成一张表,每行记录:需求取消依据、最近使用证据、依赖组件、数据留存要求、建议处理方式。对建议下线的项,先执行隔离而不是直接删除,观察一个约定周期后再决定是否彻底移除。这样做的结果是:你既不会因为沉没成本保留无用功能,也不会因为删除过快而在需求反复时付出二次开发代价。