先不要投票决定去留,而是把“需求取消”和“功能已开发”拆成两份可以核对的事实清单:谁在什么时间确认取消,代码和数据是否已经进入正式环境,以及继续保留会持续消耗哪些资源。只有先确认这些事实,留用、改写或下线才有共同讨论的基础。
同一个功能被不同角色描述成“已经取消”或“还在做”,往往是因为取消发生在不同节点。产品负责人说取消,可能指不再排入后续迭代;业务方说取消,可能指这一期不再验收;开发说已经完成,则指代码已经合并。三者并不矛盾。
可以把事实拆成四栏核对:需求来源是否书面撤回、代码是否已合并到主干、是否已部署到正式环境、是否已有真实数据写入。四栏都指向“已发生”,才适合讨论完整下线;只有前两栏成立,更接近“冻结但保留代码”。
这一步的实际动作是让每个角色只回答自己确认过的部分,而不是替别人下结论。核对完成后,如果发现功能从未进入正式环境,评估范围就缩小到代码仓库,不必牵扯线上数据迁移。
三种处理方式都有适用条件,关键是看未来是否还有明确的使用场景,以及维护成本落在谁身上。
如果暂时无法判断,可以先冻结入口而不删除代码,观察一段时间内是否有人提出访问需求。这个动作的结果会直接影响下一步:无人提出,可以进入下线评估;有人提出,则需要重新确认需求为何被取消。
讨论中最容易出现的分歧是“我觉得以后可能用得上”。这类判断无法核对,可以换成几项可以查证的证据:
假设某个查询功能已开发完成,但业务方确认不再对外提供。若检查发现没有其他模块调用、没有外部链接、也没有真实数据写入,那么下线的技术阻力较小,主要工作是移除入口和清理代码。反过来,如果它已被另一个报表流程调用,直接删除会连带影响报表,此时更适合先改写调用关系,再决定是否下线。
这里要注意,访问量低或某段时间没有请求,并不能单独证明可以删除。请求为零还可能是因为入口从未开放、权限配置有误,或统计本身没有覆盖到。需要结合入口状态和权限记录一起看。
当多个角色对同一事实理解不同时,与其继续开会争论,不如把结论写成一份可勾选的核对表,并指定每项的确认人。可以包含:需求撤回的书面记录、代码所在分支、部署环境、数据表或字段、外部引用位置、维护责任人。
每确认一项,就缩小一次讨论范围。比如确认“未部署到正式环境”后,数据迁移和线上回滚就不在评估范围内;确认“无外部引用”后,跳转兼容也不再是阻碍。这样做的结果是,留用或下线不再取决于谁的声音更大,而是取决于还剩几项没有核对清楚。
如果核对后仍有争议,可以把决定拆成两步:先关闭入口并保留代码,等下一次迭代再决定是否彻底移除。这样既避免继续投入维护,也给重新确认需求留出空间。
无论选择保留、改写还是下线,都应记录判断依据和确认时间,而不是只留下一个结论。记录内容包括:需求为何取消、功能当前处于哪个环境、由谁确认、下一次复查的条件。这样当类似需求再次出现时,团队可以快速判断是重新开发还是恢复旧逻辑,减少重复沟通。
评估的重点不是给功能找一个永久答案,而是让当前决定建立在可核对的事实上,并明确什么条件下需要重新评估。