先给出判断结论:不要因为“需求已取消”就立刻下线,也不要因为“代码已经写完”就默认留用。真正要评估的是这个功能当前是否仍被真实用户使用、是否承担了隐性依赖、以及维护它的长期代价。若功能已无用户访问且无外部依赖,应安排下线;若仍有少量用户在用,或它被其他模块、接口、统计口径引用,则应先隔离观察再决定。下面用两种条件展开具体做法。
这是最适合直接下线的场景。但“没人用”不能只凭需求方一句话,也不能只看某个统计数字归零就下结论。访问量归零还可能是埋点失效、入口被隐藏、页面报错、跳转链路中断等合理解释。要先把这些可能性逐一排除。
可以按以下顺序做一次确认:
实施动作:先做“入口关闭 + 代码保留”的软下线,把菜单、按钮、跳转链接移除,但保留路由和接口。观察一个完整业务周期后,如果日志确认无请求、无报错、无外部依赖,再进入代码清理。这个动作的结果会直接决定下一步:软下线期间若出现调用,说明存在未识别的依赖,应转为隔离维护而非彻底删除。
需求取消往往指“不再继续投入新开发”,不代表现有使用者会立刻消失。此时直接下线会带来投诉、数据丢失或上游流程中断。更稳妥的选择是降级维护:停止新增功能,保留可用状态,同时给出明确的退出路径。
判断是否属于这种情况,可以看三类证据:
满足任意一类,就不宜直接下线。此时的动作是:冻结需求、保留运行、记录维护成本,并设定一个复查时间点。复查时重新核对使用量和依赖关系,若使用量继续下降至零且依赖已解除,再回到条件一的流程。这一步的价值在于把“要不要删”变成一个可复查的决策,而不是一次性拍板。
当两种条件都不够清晰时,可以用假设例子做一次代价比较。假设某功能每月仍需少量人工巡检、依赖一个不再更新的第三方库、且每次框架升级都要额外适配。那么留用的代价包括巡检工时、升级适配工时和安全风险;下线的代价包括数据迁移、依赖方改造和沟通成本。把这两组代价按同一时间跨度估算,哪一组更低,就选哪一组。这里的关键不是精确数字,而是把平时被忽略的维护成本显性化。
需要提醒的是,代码已经开发完成属于沉没成本,不应作为留用的理由。已经投入的工作量无法收回,决策只应看未来的收益与代价。
第一个是数据处理。功能下线前要明确:历史数据是删除、归档还是只读保留。若选择删除,需确认没有对账、审计或用户查询需求;若选择归档,要保证归档后仍可被必要流程读取。第二个是入口清理。除了页面按钮,还要检查站点地图、站内搜索、旧链接跳转和外部引用,避免留下可访问但已无维护的页面。
如果功能涉及用户已提交的内容,下线前应提供一段过渡期,并在相关页面说明变化。过渡期结束后再执行清理,这样既减少突发投诉,也让依赖方有时间调整。
存在明确的例外:功能虽无新增需求,但它是某个对外承诺的一部分,或它承载的数据是其他在跑业务的基础。此时保留不是因为代码可惜,而是因为移除会破坏仍在运行的部分。遇到这种例外,正确做法是把它标记为“维护模式”,限制改动范围,并单独记录它的存在原因,避免下次评估时又被当成无用功能反复讨论。
把判断落到一个可执行的分界上:无用户、无依赖、无合规要求,三者同时成立就下线;任意一条不成立,就先降级保留并设定复查时间。这个分界能帮你在需求取消之后,仍然做出可解释、可追溯的决定,而不是靠感觉留一堆无人维护的代码。