不要急于去打破
事情是这样的。在以往的项目中,出现了因为某个测试工具没有按时完成而影响测试进度、而最终影响交付的经历。于是,项目团队便想把所有功能开发中与这个测试工具相关的工作和问题单独管理起来,一旦出现问题,可以重点跟踪,同时也便于对该测试工具做整体的把控。乍一看貌似很有道理,成立“工作组”,重点问题重点跟踪。但是,跳出来看看呢?
每个软件版本的发布,都包含了一系列新的功能(feature)的引入。在敏捷开发实践流程下,每个新功能由对应的功能开发团队(虚拟的)来端到端负责并最终发布的。每个功能团队对自己的feature全权负责,直至交付客户使用。其中包含软件开发的所有工作,从前期需求澄清、软件设计和实现,再到不同级别的功能、系统测试,其中自然要考虑测试工具的支持,缺一不可,我们才能将这个新功能交付给客户。如果功能团队对交付做出承诺,就需要对每个环节负责到底。
现在,因为以往项目中出现了某个测试工具的问题而导致的功能延迟交付,所以我们吸取教训,跳出功能团队和开发流程,将该工具相关的工作和问题横向管理起来、单独报告,这样做真的要去解决问题?还是说只是想找一个“篮子”,每个功能团队一旦遇到该工具相关的问题,就可以简单地丢到这个篮子里,世界就清净了?每个功能就可以顺利发布了?
另外一种思路就是,既然大部分功能都能正常交付(也使用到了该测试工具),而某些功能却出现了因此而延迟交付的问题,那是不是这些功能团队在实施中缺失了什么?或者忽略了对这些工具的跟踪?这些功能团队应该采取哪些措施来避免类似问题的发生?毕竟,只有每个功能开发团队最清楚自己对这些测试工具的要求。
问题:是流程问题还是执行问题?
这其中有个问题就是,如果在现有流程下遇到了某一个具体的问题,我们是打破当前流程,增加新步骤、新流程,还是说找到根本原因并改进当前流程的问题?或者说,就仅仅是这些团队的执行力度不够的问题。我觉得这取决于遇到问题的影响范围和通用程度。
执行力:流程的执行问题
如果只是个别功能的某些步骤有这些问题,大部分的功能仍然可以按时交付,那可能是这几个功能的对应执行团队在执行中问题。我们可以去分析和挖掘在执行过程中出现了什么问题?是否需要为遇到的特殊场景做流程的微调。
持续改进:对流程的持续优化和改进
如果大量的功能都因为相同的原因(某个模块),那可能是对应的模块出了问题,而不是功能开发流程的问题。这就需要对应的模块就回顾和反思对功能开发的参与方式、重视程度等等,从模块本身的工作流程来改进和优化对于功能开发的支持。同时,也可能需要在单个功能开发的流程和实践中增加对该模块的特殊处理等等。但是大前提并没有改变,功能开发的思维和迭代逻辑仍然不变。
思维转变:研发模式的转变
最坏的情况就是(其实并不坏),新功能开发本身的逻辑已经不满足最新市场需求,我们要换一个不同的维度和视角来重新设计研发模式来保证产品交付。就好比从软件设计、开发、测试的瀑布模式,到现在基于单个可用功能的端到端敏捷开发模式的转变一样。在未来,我们完全有可能转变到另外一个全新的模式。
从优化执行到对流程的持续改进,再到思维模式的变革,这是个递进的过程,看看我们面临的问题属于哪个层面?不要急于去“打破”,尤其是思维和文化,具体问题具体分析!
