先看这个功能是否仍在支撑当前的核心任务:如果它已不再被任何主要流程引用,只是代码和界面还在,通常应进入下线评估;如果它仍被少数真实场景依赖,或者下线成本明显高于维护成本,则可以暂时留用,但必须明确改写或退出的时间点。判断的关键不是“已经开发了所以别浪费”,而是“继续保留会不会让后续每次改版都多背一层负担”。
需求取消后,功能可能处于三种不同状态,处理方式并不相同。
一个实际动作是:在代码库中搜索该功能的组件名、路由名和接口名,记录每一处引用。如果搜索结果只剩自身文件和测试文件,说明它已经接近孤立状态;如果还出现在主流程页面中,就先不要下线,而是把它标成“待改写”。这个动作的结果会直接决定下一步:孤立项进入下线清单,被引用项进入改写或保留清单。
留用不是默认选项,而是有条件的临时决定。适合留用的情形通常包括:该功能仍服务少数但重要的用户路径;下线会破坏已有链接或外部依赖;改写成本高于当前维护成本。
但“维护成本低”不能只凭感觉。可以按假设例子来比较:假设一个已取消的筛选面板每月需要一次兼容性检查,每次约半小时;而下线它需要改三处入口、补一次数据归档,合计约两天。如果这个面板在半年内不会被任何新需求复用,那么继续留用意味着持续投入,下线则是一次性投入。这里的关键不是精确计算,而是把两种成本放在同一时间尺度上比较。
如果决定留用,至少要写清三件事:谁负责它、什么条件下重新评估、哪些新需求不得再依赖它。否则留用会变成无限期搁置。
有些功能虽然原需求取消,但其中一部分能力仍被其他场景需要。这时更适合改写,而不是直接下线。改写的前提是:能明确指出保留哪一部分、去掉哪一部分,并且改写后不会重新引入已取消的需求逻辑。
例如,假设一个已取消的批量操作入口,其中“导出当前筛选结果”仍被运营人员使用,但“批量修改状态”已无人需要。可以只保留导出能力,把它并入现有列表工具,移除批量修改相关界面和接口。这个动作的结果是:功能数量减少,但保留的能力有了明确归属,后续改版不必再维护整套批量操作逻辑。
改写不适合的情况也很明显:如果保留部分和取消部分共享同一套数据写入逻辑,拆开会导致状态不一致,那么优先考虑整体下线,而不是强行保留一半。
下线通常适合以下条件同时成立:没有主要流程引用;没有外部依赖;历史数据可以归档或不再需要;下线后不会让用户进入死路。只要其中一条不成立,就应先处理该条件,而不是直接删除。
执行顺序可以按这个顺序推进:
这个顺序的意义在于:先移除界面入口,可以低成本验证是否还有隐藏依赖;如果直接删接口,一旦有未发现的调用,排查成本会高得多。观察期内如果出现集中反馈,说明下线条件还不成立,应回到改写或留用评估。
个别样本成立,不代表可以照搬到所有页面。比如某个已取消功能在一个低频页面中仍被使用,不能因此推断所有类似功能都应保留。需要看的是:这个例外是否代表一类稳定需求,还是只是历史遗留的个别路径。
如果例外只出现在一个页面、一个角色或一个旧链接上,优先考虑单独处理该例外,而不是让整个功能继续保留。反过来,如果多个页面都出现同类依赖,说明原需求可能只是被错误地标记为取消,这时应重新确认需求状态,而不是继续按“已取消”推进下线。
实际动作是:把例外按页面、角色和调用来源分组。如果分组后只有一组且数量很少,就为这一组做替代方案;如果分组后出现多组稳定依赖,就暂停下线,重新评估需求是否真的取消。这个判断会影响下一步是继续清理,还是回到需求确认。