文章详情

敏捷开发,你真的做对了吗?

@追梦% 1个月以前

很多人对敏捷开发有个普遍的误解,认为敏捷就是快,经常在需求没定义清楚的情况下就急于开工。事实上,这样做往往得不偿失。今天,我们邀请阿里巴巴敏捷教练问菊,为我们带来阿里文娱广告团队敏捷实践,看看他们是如何做敏捷开发的。

缘起

2017年3月,应移动事业群智能营销平台项目管理部负责人邀请,我开始支持智能营销平台CRM团队。智能营销平台是阿里文娱广告团队,是阿里巴巴淘外变现的主力军。CRM团队负责开发和维护CRM系统。CRM系统服务于销售和代理商,串起商机管理、客户开发、合同管理、风控审核、账户管理、财务结算等业务链条。CRM系统的质量和交付速度,直接影响销售和代理商服务广告主的效率和体验。

3月初我访谈了销售、产品、开发、测试等团队核心成员,并观察了团队的周会、站会和需求讨论会。当时团队的目标是在3月25日交付框架合同功能,主要工作围绕框架合同功能开展。根据访谈内容梳理出框架合同项目研发过程的时间线如下:

从图中可以看出,这个项目基本按照瀑布模式推进,开发2个月后整体提测,测试1个月后一次性发布。开发2个多月后,业务方才有机会试用产品并给出反馈。

这个项目暴露了瀑布模式的弊端:

1.接力棒的协作模式带来信息差

瀑布模式下,业务、产品、研发三方很少共同参与讨论。需求如同接力棒从业务方传递给产品经理,再从产品经理传递给研发团队。信息每经过一次传递都有损失,业务方、研发团队得到的大部分是二手信息;产品经理成为团队沟通的瓶颈,业务方和研发团队直接讨论可以解决的问题,要经过两轮甚至多轮沟通才能达成共识;业务方和研发团队缺乏相互理解,研发团队不了解需求背后真正的业务诉求,业务方不了解技术方案背后的权衡。

2.难以响应变化

瀑布模式下,所有的需求分析和设计工作在开发前完成,并假设需求不会改变,研发过程只需遵循最初的项目计划和范围。实际项目中,变化在所难免。 即使再多花一倍的时间评审需求和制定项目计划,也无法预见所有的变化。事实也正如此,框架合同项目中业务方组织结构调整,客户URL与销售的映射关系发生变化,原有的设计无法兼容这种变化,已实现的功能需要重新设计。正如何勉老师在《精益产品开发》所说:“希望一开始就能设定完整和正确的需求,这对软件产品越来越不可能,因为用户也不知道或说不清楚自己想要什么。事实上,对需求的发掘和理解,应该是一个持续的过程,需要不断地反馈。”

3.很迟才得到用户反馈

瀑布模式下,所有的产出在项目末期交付,项目的风险也累计到最后,项目过程中没有机会验证假设和得到真实反馈。框架合同项目中,业务方在3月初才第一次试用产品,此时距离发布时间不到两周,反馈的大部分问题在发布前来不及修改。3月底发布后,产品功能持续迭代了数月,才达到业务方的期待。

CRM团队深受其痛,团队的诉求主要有:

1.业务、产品、研发密切协作,作为一个团队为共同的目标努力。

2.缩短需求交付时长,贴合业务需要完善CRM系统。

改进方案和落地实施

结合团队的诉求和CRM团队的实际情况,与智能营销平台业务、产品、研发、项目管理负责人沟通后,确定了改进方案。改进方案聚焦于两点:

1. 组建One Team,促进跨部门协作

One Team由业务、产品、研发核心成员组成,后来又加入了负责产品落地的运营同学。

One Team负责制定季度产品规划。以往各职能部门分头组织季度规划,业务、产品、研发的目标可能有偏差,执行过程中容易对需求优先级产生分歧。One Team成立后,成员共同制定季度规划。目标对齐后,团队的工作围绕季度规划展开,对需求优先级容易达成共识。看一下CRM KA的例子:

产品路线图

2018财年Q1的季度规划执行情况

One Team召开双周会,会议有3个固定议题:

回顾上个迭代已发布功能的用户反馈;

同步当前迭代的进展;

梳理下个迭代的核心需求。

通过One Team双周会,串起了需求反馈环。大家不再局限于部门和角色分工,快速同步信息,迅速解决问题。以前用户反馈的问题在部门间层层流转可能几个月才解决,现在双周会上大家商量一下方案立即排期解决。

2. 向迭代模式转型,缩短需求交付时长

One Team成员商议后,在月迭代和双周迭代之间选择了更有挑战的双周迭代。

从瀑布模式向迭代模式转型有两个关键的实践:拆分需求和建立节奏。

拆分需求是小步迭代的前提,对于刚刚转型到双周迭代的团队,我们没有一刀切。进入研发环节前,需求最好拆分到1周内可以提测的粒度,以便在一个迭代内发布。如果需求确实难以拆分,也可以跨迭代交付。同时我们会关注需求的开发时长,以此衡量需求的粒度。期待随着实践的深入,越来越多的需求可以在一个迭代内发布。

需求拆分采用用户故事地图方法:对于一个复杂的大需求,按照用户在特定场景下要解决的问题切分出用户旅程,每次发布尽量交付一个完整的用户旅程。一般会按照从简单到复杂的顺序,先实现MVP(Minimum Viable Product),交付一个最简单的用户旅程。在此基础上不断丰富和完善,逐步实现附加功能和定制功能。以下是一个需求拆分的实例,其中“普遍品专询价”和“普通品专合同”组成了一个MVP。

对敏捷开发有个普遍的误解,敏捷就是快,需求没定义清楚就急于开工。事实上,这么做往往得不偿失。正如Marco Behler所说:程序员的生产力始于“恰当的需求”。

为了减少研发过程的返工和浪费,需求进入研发前要符合准入标准DoR(Definition of Ready),发布前要符合准出标准DoD(Definition of Done)。需求发布后,产品经理会观测埋点数据,业务和运营会搜集用户反馈。One Team会上大家根据用户反馈决定下一步的改进和优化。

迭代活动有节奏地进行,迭代才能有序运转。One Team成员商议后,一致同意尝试如下的节奏:

从图中可以看出,本迭代的开发测试与下迭代的需求分析并发进行,这样可以最大限度地减少研发环节的等待。代价是部分开发和测试同学要投入一些精力梳理下个迭代的需求,例如评估技术可行性、澄清验收标准。大部分的需求梳理工作在One Team双周会上进行,如果双周会上发现一些待确认的问题,会记录下来并由专人负责跟进。

迭代第一天,研发团队按照优先级把符合准入标准的需求拉入迭代,做初步的设计和估算。根据估算做出严肃的承诺,并制定研发计划:

从图中可以看出,为了降低风险和分散压力,团队尽量做到小批量逐步提测。提测前测试同学会设计好测试用例,提测时开发同学要跑通P0、P1测试用例。测试同学验证基本功能可用,立即邀请产品经理和业务同学试用,以便尽快发现体验问题。功能发布前,业务方验收即将发布的版本,业务验收通过后才可以发布。

在确定节奏的同时,我们对迭代活动的产出、责任人、截止日期做了明确约定。大家分工协作,迭代很快有序运转起来:

为了增加透明性,我们用工作流描述需求状态的流转:

用看板跟踪需求的状态:

效果评估

1.One Team机制促进跨部门协作

业务、产品、研发之间曾经相互埋怨,业务觉得交付的功能不是最需要的,急需的功能反而没给做,研发觉得辛苦做出来的功能没人用非常冤,产品夹在中间两头受气。

One Team机制落地后,大家综合权衡业务价值、技术风险、人员情况、外部依赖、投入产出比等相关因素,一起决定需求优先级。即便最初大家的意见不一致,通过开诚布公的讨论,对最后的结论也能够认可,并积极推进执行。CRM SME双周会上,产品经理预先准备了一些产品优化需求。业务方提出目前更需要看到数据报表。大家迅速达成共识,数据报表是最高优先级,产品优化需求靠后。

CRM产品团队季度总结时,CRM KA的产品经理和业务接口人表示:One Team机制建立以来,跑通了业务需求从提出到上线后反馈的大闭环,业务、产品、研发有序协作,接下来会把这个机制顺利地运转下去。

CRM SME的业务接口人在邮件中提到:“目前中小CRM的产品工作在正常有序推进,项目进行的同时,也在积极进行存量需求的消化”,并感谢团队付出的努力。

智能营销平台的技术负责人高度评价One Team机制:“不仅提升了团队的开发效率,也提升了团队的沟通效率”。

One Team成员在持续的协作中,增进了信任和了解,研发更了解业务,业务也更体谅研发。以下是两个具体的例子:

阅读 4208
0
8
收藏成功