敏捷实践的七个方面

发表于:2010-10-07来源:作者:点击数: 标签:实践
我们俩来自于诺基亚西门子 网络 杭州3G研发中心,本文内容来源于诺西一个通信产品研发部门所进行的 敏捷 转变,它是典型的多站点 开发 的研发组织,在芬兰、印度、中国等国家都有研发团队,总计超过600人。我们免去在文中冗述各种功绩和所得,只在这里和大家

  我们俩来自于诺基亚西门子网络杭州3G研发中心,本文内容来源于诺西一个通信产品研发部门所进行的敏捷转变,它是典型的多站点开发的研发组织,在芬兰、印度、中国等国家都有研发团队,总计超过600人。我们免去在文中冗述各种功绩和所得,只在这里和大家分享我们所经历的那些误区、陷阱,当然还有那些应对的措施。

  本文仅代表徐毅和王献的看法,如此大的组织转变,我们作为不到1%的人口代表,看到的、经历的难免会有误差,恐怕不能概括事件的全貌,如有出入,请见谅。我们认为经历的误区和陷阱大致可以分成如下七个方面:特性团队、人、浪费、局部优化、软件质量测试自动化、流程。

  特性团队(Feature Team)

  在组织中想要达到真正的Feature Team是一个很漫长的过程,当在组织中实现局部的端到端的组的时候,更大的端到端的组的演变要求就会出现,因为这时组织中新的瓶颈会展现出来,这也是为什么敏捷虽不能解决问题,但却使问题更显现地表现出来的原因之一。

  在组织的转型中,产品有非常庞大的老代码:

  1. 通常早期的Feature Team所包括的功能性测试不完全,外部的测试对于这些Feature Team所起到的保护作用还是相当重要的;

  随着时间的推移,Feature Team对于自己feature自动化测试加强以及测试能力的提高,发布给外部的产品质量会大大提高;

  2. 对于外部其他组的依赖接口会很多,特别是组在不同国家的时候,沟通、交接和等待的浪费会很大;

  3. 当产品中开发部门和开发部门的依赖减少后,开发和测试的瓶颈会更突出;

  4. 当产品中各个功能部门的依赖减少的时候,产品和产品间的瓶颈会凸显。

  想象一下从客户提需求到最终提交功能需要经过多少个过程,特别是大型组织中的产品,端到端意味着几十个过程甚至更多,Feature Team中能容纳多少个这样的过程就意味着这个Feature Team的灵活度有多高,本质上敏捷就是为了减少相互的依赖、等待和传递所带来的消耗。

  一个组织是一个庞大的系统,Feature Team的转变过程意味着减少整个系统中的Limitation。

  在向Feature Team演变的过程,在相对比较短的时间把原先十几或者几十Component Team打破组成新的Feature Team,这中间的风险在于:

  1. 组的成熟度:成熟度需要时间,也需要一些错误的代价;

  2. 组的长期成长和短期项目计划:由于为了项目的进度而把对某领域很熟悉的组移出去做不熟悉的领域;

  3. 组织的产出效率:怎样合理的利用现有的有经验人员和新人,建立新结构所需要的基础会使组织整体的产出效率减低;

  4. 不可控和无序:怎样让这些组高质量的发布产品在转变过程变的不可控。

  理想和现实中的平衡是Feature Team所面对一个问题,剧烈的变动意味着剧烈的阵痛。

  人

  我们的转变是基于Scrum+XP的方式,转变的影响巨大,之前存在的许多职位、头衔都会面临变化甚至消失的可能。例如将不再会有项目经理来集中处理项目管理的工作,对于产品需求研发顺序的管理也由以往的项目经理手中转为产品负责人来负责。就算是最基层的开发人员和测试人员,他们的日常工作方式以及职责范围也面临着极大变化。这也意味着转变可能会遇到非常大的阻力,人天性会抗拒未知的变化。

  某平台部门的转变尤其特殊,研发的老大意志坚定,在初期Pilot成功后,就大刀阔斧地进行组织架构改革,仿佛一夜之间所有的项目经理全部消失。而以往围绕功能模块所组建的分散的测试团队以及开发团队也被重组,每一个Scrum团队都拥有好几名来自不同功能模块领域的开发和测试人员,从某种角度来看,这是我们所倡导的跨功能特性团队的雏形。

  各种形式的人员流失造成很大的困难,有人因为个人或家庭的原因离开公司,也有人在新成立的产品线谋得职位,也有人被提升。但这一切都造成原来位置上的熟手损失殆尽,尤其是测试相关人员的流动,曾是很大的隐患。在以往的研发模式中,测试被严格划分为多个层级,由不同的测试部门执行,彼此之间通过高级别工程师以及文档和流程体系来沟通,确保各个层级的测试得到执行。新的组织架构中,除了Scrum团队后,就是系统测试团队,而Scrum团队测试和系统测试之间的衔接则出现了灰色地带,原因就是彼此对对方的职责各有不同假设,却未能发现及解决。

  当时拥护及反对“敏捷”的各有人在。很有意思的是,在内部论坛上,我们属于敏捷的坚定支持者,又喜欢说话或者说辩论,所以可谓是当时论坛里的焦点,矛头所向。和大家进行了很多很多的辩论,当然多数都是无疾而终。我认为这些讨论,以及发生在工作场合里的许多讨论,同事间私下的交流都非常好,在变革之际,能够帮助大家去理解这场变革(就算是纯粹的抱怨也并非一无是处)。

  组织变革的关键还是在于充分沟通,以及切实执行。有不同的声音不要紧,关键是要去澄清和解决他们的疑问,因为没有大家的理解和认同,变革也很难取得实际的效果。

  浪费

  加班加点赶进度的情形相信大家并不少见,但如果这么辛苦做出来的东西并没有真正地或是及时地派上用场,恐怕就更加可惜了。该平台部门曾经很辛苦地去兑现某一个重要发布的最后期限,而根据客户提交的缺陷报告来看,其中有一些功能客户并没有在拿到这个重要发布后就去使用,而是在拿到后续的发布后才有使用到这些特定的功能。

  该平台部门并非是直接面向终端客户,还需要结合上层的网元应用才能真正地产生效果。常规的模式都是网元有一系列客户需求(具有非常大的粒度)中分割出对系统平台的需求后,传递到平台部门的项目进行管理。出现过的情形是,平台部门赶出来递交的功能特性,由于网元应用没能及时开发出来,而无法递交给客户使用。

  对此,大家有很多疑惑,我们是否在做该做的事情(功能特性),其中到底有多少浪费。Scrum的主张就是对用户需求进行优先级排序,但其中有一些关键的点必须要重视,否则很容易流于形式而无法从中获益,第一,要将需求分割到合适的细粒度,团队才有可能持续地递交高优先级的功能特性,需求粒度不够小,假设Product Backlog里就只有一个条目,那么不管是PO还是销售还是客户都没有办法取舍;第二,要逐渐达到以真正端到端级别的需求为单位进行开发、管理;第三,开发团队和PO(能够和终端客户、用户交流更好)之间有频繁地交流、功能成品展示,从而可以利用反馈来改进、提高后续功能的开发。

原文转自:http://www.ltesting.net