在TW最大的收获之一是能加入各式各样的项目,在不同的项目中打磨自己的硬技能和软技能。
上个项目对接过来的时候已经是第二期,距离第一期上线已经过了大半年。大半年后客户又找到我们,希望和我们长期合作开发App功能。我们发现一期有很多做好了却没有上线的功能,我当时猜测可能客户调整了优先级策略,并没有意识到这是个问题,也没有进一步追究。
项目开始后,从客户拿到最高优先级的功能A其实就是这些做好了却没有上线的功能之一。客户希望在这个功能上线时给前1000名试用者奖励,我们开始在一期的基础上接着开发这个功能,准备在下一次release发布功能A。功能顺利完成并通过测试,进入内测阶段,又反馈回一堆一期遗留下来的bug,风险太高不得不继续延期。直到项目移交出去,这个功能都没能成功上线。
这个例子对应精益7种浪费中的在制品和缺陷。在制品对应到软件开发中,不仅包括未完成或未上线的代码,已完成但没有相关说明文档和测试(难以维护扩展)、未测试、没人用、冗余或无效代码,都属于在制品。再说缺陷。一期开发的功能A缺陷太多,根本达不到上线要求。二期继续在充满缺陷的代码上进行二次开发,仍然完成了一个残次的功能。虽然客户为这个功能买了单,但是由于功能未上线,是无法为客户创造价值的。
回头来看,怎样消除这个浪费?首先,项目一期我们没有参与,二期在做这个功能之前要搞清楚一期没上线的根本原因,从而挖掘出这个功能存在的质量问题,确保团队在一开始就做正确的事情。其次,没有质量保障的功能,即使已开发完成也应属于在制品,要做质量评估后权衡它的价值和风险。这段经历也让我对快速交付和质量内建有了更深刻的认识。
在另一个项目上,客户非常重视承诺。每个季度会专门花1-2周来规划产品的Roadmap,当执行过程中出现变更,又要花很长时间重新规划。
做价值流分析时,我们把不直接创造价值,但在现有工作方式下不可避免的步骤称为一型浪费。把不创造价值可以立即去掉的步骤称为二型浪费。显然,做产品规划不创造价值但却不可或缺,属于一型浪费。
类似的,在敏捷开发中,站会,IPM,spike,估点,回顾等等是我们为了完成开发工作需要付出的事务成本或沟通成本。但这些都不产生价值,我们应该尽量控制这些活动所占用的时间,将他们最小化。