先给出直接答案:把“需求取消”和“功能是否还有价值”拆成两件事来核对。需求取消只说明原定目标不成立,不等于代码必须删除;但也不能因为已经写了就默认保留。可执行的做法是,为这个功能建立一张核对表,分别记录它当前是否被使用、谁在维护、保留会不会影响后续改动,再决定留用、隐藏入口、冻结维护还是下线。下面从常见的分歧场景展开。
假设一个本地服务站的预约表单已经开发完成,后来业务方向调整,预约需求被取消。此时常见的情况是:产品负责人说“这个功能没用了,删掉”;开发说“代码已经写完,删了可惜”;运营说“后台还有几条记录,先留着”。三个人说的其实不是同一件事——一个在说目标,一个在说成本,一个在说数据。把这三句话放在一起争论,永远得不出结论。
更麻烦的是,需求取消往往没有正式记录。口头说“先不做了”,和正式关闭需求,对项目的影响不同。如果没有书面依据,评估时就会变成各人凭记忆表态。因此第一步不是讨论去留,而是把“取消”这件事落到可核对的文字上:谁提出的、什么时候、取消的是整个需求还是其中一部分。这一步做完,后面的分歧才有共同起点。
面对“需求取消但功能已开发”,通常有两种解释,需要分开验证。
解释一:功能确实已经失去使用场景。原需求对应的业务流程已经改变,入口不再被访问,也没有外部依赖。这种情况下,保留它的主要成本是后续每次改动都要考虑它,属于隐性负担。判断依据是:入口是否还有真实访问、是否有其他页面或接口调用它、是否有用户反馈提到它。
解释二:功能仍有残余价值,只是没有被正确暴露。需求取消可能是因为优先级调整,而不是功能本身无效。比如预约入口被藏在二级页面,访问量低并不代表没人需要;或者内部人员仍在用它记录信息,只是没有对外说明。判断依据是:后台是否有持续产生的新记录、是否有角色在依赖它完成工作、下线会不会中断某条现有流程。
这两种解释对应完全不同的处理方式。前者倾向下线,后者倾向保留但重新定位。混淆它们,就会出现“删了又加回来”或“留着一直没人用”的反复。
要把分歧转成可以核对的项目,可以按下面三个方向收集证据。每一项都尽量写成“谁在什么时间看到什么”,而不是“我觉得”。
收集完这些证据后,让持不同意见的角色分别确认。如果产品说没用了,但依赖证据显示有接口在调用,那么分歧就变成了具体问题:这个接口是谁在用,能不能一起调整。这比争论“该不该删”更容易推进。
假设某本地网站有一个“门店查询”功能,需求已取消,但代码还在。核对后发现:前台入口近三个月没有新增访问,后台也没有新记录;但代码搜索显示,另一个页面在调用它的数据接口。此时不能直接下线,因为会影响另一个页面。
可执行的动作是:先给这个功能加一层标记,记录它被哪些地方引用;然后和相关角色确认那个调用页面是否还需要。如果调用页面也要调整,就一起处理;如果调用页面仍需保留,就把门店查询改成内部数据模块,去掉前台入口,而不是整段删除。这个动作的结果会直接影响下一步——如果确认没有其他依赖,才进入下线流程;如果发现新依赖,就回到核对阶段。
这个例子的关键不是数字本身,而是用依赖关系把“删不删”变成“先改哪里”。数字只用于说明比较方法,不代表真实项目结果。
根据核对结果,可以对应四种处理方式,每种都有适用条件。
选择哪一种,取决于核对结果,而不是取决于“已经写了多少代码”。已经投入的开发量是沉没成本,不能作为保留的理由;但它可以作为评估维护成本的参考。
无论最终选择哪种处理方式,都应该把结论写进项目记录:功能名称、原需求状态、核对证据来源、决定结果、决定人和复查时间。这样做的实际作用是,下次有人再问“这个功能为什么还在”,可以直接查到依据,而不是重新争论一遍。
如果决定留用或冻结,复查时间要写清楚,避免无限期保留。如果决定下线,回退方案也要写清楚,避免删除后无法恢复。把分歧转成可以核对的项目,核心不是追求一次判断永远正确,而是让每次判断都有依据、可复查、可调整。这样,需求取消带来的不确定性才不会一直悬在项目里。