先给出可执行结论:把已开发完的功能当作一笔沉没成本,而不是留用理由。你需要打开需求记录与代码变更记录各一份,对每个功能标注四类信息——当前是否还有真实入口、是否有数据写入、是否被其他模块调用、下线会影响哪些页面。四项都为空,才进入下线候选;任何一项非空,先保留并安排复查。这个动作的结果直接决定下一步是清理还是冻结,而不是凭“做都做了”来拖延。
需求取消通常有两种形态,处理方式完全不同。第一种是业务方向变了,功能对应的场景不再存在,例如原计划给线下门店做预约,门店合作已终止;第二种是入口被撤掉,但后台数据仍在被调用,例如报名表单从前台隐藏,运营仍在导出历史记录做回访。
判断依据不看口头说明,看三处痕迹:数据库里最近一次写入时间、模板或组件中是否还有引用、日志里是否还有访问记录。三处都停在同一个时间点之前,说明它确实随需求一起停用;只有入口消失而写入仍在继续,说明它只是被藏起来,不能按“已取消”处理。
实际动作:把功能名、最后写入时间、最后访问时间、被引用位置列成一张表。若最后写入与最后访问都早于需求取消时间,进入下线评估;若写入晚于取消时间,先查是谁在调用,再决定是否补一个正式的替代入口。
不要用“以后可能用得上”做判断,这句话对任何功能都成立,等于没有判断。可用下面四个条件,满足其中任意一个才留用:
四个条件都不满足,进入下线流程。这里最容易出错的是把“代码写得不错”当成留用理由——代码质量与业务必要性无关,写得再干净,没有使用场景也只是维护负担。
单个功能下线看起来简单,样本量一上来就会出现例外。假设你抽查了三个已取消功能,都没有访问记录,于是决定批量清理。但规模化后可能遇到这些情况:某个功能虽然前台无人访问,却是另一个低频功能的依赖项;某个功能的表被定时任务引用,只在每月某一天执行;某个功能涉及用户提交过的内容,删除后无法恢复。
所以小样本结论只能用于判断“哪些功能值得进一步排查”,不能直接作为批量下线的依据。排查范围扩大后,必须增加依赖检查这一步,否则会把孤立样本的结论错误地推广到全部。
假设例子:某站点有二十个已取消需求对应的功能,抽查五个均无访问记录。若直接批量删除,可能误删一个被月度报表引用的数据表。正确做法是先跑一遍引用检查,把有依赖的功能单独列出,只对无依赖的部分执行下线。这个例子的数字仅用于说明比较方法,不代表任何真实项目的规模。
顺序颠倒会带来麻烦:先删数据再关入口,一旦发现还有调用,恢复成本很高;先关入口不停定时任务,任务会持续报错,反而制造新的告警噪音。
每一步的结果都影响下一步:关闭入口后若无异常,才进入停用调用;停用调用后若依赖方报错,说明前面的依赖检查有遗漏,需要回退并补查。把这条链路走完,留下的功能都有明确理由,下线的功能也有可追溯的记录。
评估完成后,在需求记录或功能清单里补三行:当前状态、判断依据、下次复查时间。状态分为在用、冻结、已下线三类;判断依据写清是哪个条件成立;复查时间用于处理那些“暂时留用但说不清用途”的功能,到期重新评估,避免它们无限期挂着。
这样做的价值在于,下一次有人问“这个功能还要不要”,答案已经在资料里,不需要重新翻代码。对已有经验的团队来说,真正省时间的不是删得快,而是每个功能的状态都有据可查,留用与下线都不再依赖记忆和猜测。