专栏名称: vipdocker
VIPDOCKER关注Docker、Mesos等容器化技术
目录
相关文章推荐
51好读  ›  专栏  ›  vipdocker

Scrum实践总结终结篇

vipdocker  · 公众号  · 后端  · 2017-04-12 08:21

正文

难得的机会

谢谢大家关注我的微信公众号vipdocker,到目前为止已经有过千的订阅数。虽然还很少,但是我会继续努力分享多多写点工作心得以及工作的技术思考来与大家交流。不过惭愧的是,最近的一些变化使得我已经尽3个月没有写文章了,抱歉抱歉!

个人最大的变化是新近换了新东家,借着给新东家的同事分享Scrum开发模式的机会,把这个系列的文章的终结篇给完成了,或许某些内容与之前的文章有些重复,不过又有了新的思考,欢迎翻阅与对比查看(可通过公众号的历史文章找到)。

本文主要涵盖的内容如下:

  • 敏捷Scrum模式概貌

  • Scrum Team的组成与角色分工

  • 团队的日常活动

敏捷Scrum模式概貌

开发管理的痛点

敏捷开发不是个新鲜事物,但是随着微服务、容器化等新技术理念的推出,敏捷开发找到了更合适的切合点而已。

什么是Scrum敏捷开发


几个值得思考的问题:

在有市场交付压力的团队中,最容易遇到的问题就是倒排时间。因为交付内容与交付日期已经先确定了,然后当遇到开发瓶颈的时候,第一个想到的就是给团队增加人手。但是别忘了一个经典的说法,一个女人生一个孩子需要9个月,那么9个女人是否可以一个就生出一个孩子呢?答案是显而易见的。另外一个说法就是,如果所有的需求都是高优先级的,那么所有的需求都是低优先级的。

具体什么是Scrum敏捷开发,大家可以参考一下这本书:<>

不过还是跟大家强调一点,流程是死的,人是活动,需要根据团队情况进行变通。

区别


现在已经不流行敏捷开发,而是流程DevOps了。其实可以这样说,不以敏捷开发为基础的DevOps都是耍流氓。

Scrum不是等同DevOps,也不等同与现在更流行的SRE的概念。(具体SRE是什么,大家可以搜索一下)。DevOps和SRE将运维管理引入到开发团队中,将运维情况与开发形成一个闭环,是开发更能有效的考虑实际使用情况。个人理解,其三者的关系如下图:

"scrum vs devops vs sre"

困境


虽然很多时候,大家都觉得敏捷开发, DevOps等理念都很好,但是就是很难去实行,最大的借口就是原来需要做的事情太多。但是这个时候,无论是团队还是管理者,需要停下脚步,做下思考,因为你遇到的情况很可能与下面这个图类似(来自互联网):

"hard work"

公司形态与Scrum模式


不同的公司业务形态是否Scrum的方式都一样呢?我的理解是核心是相通的,方式是灵活适配的。主要分为两种主要形态:

自运营/服务模式Scrum流程概貌


参考下图:

"operation mode"

在自运营的场景下,市场人员和产品的策略管理者(SPM)来探讨大的产品方向,然后业务分析师(BSA)做相应的规划,然后各个子产品Owner,俗称Product Owner(PO)根据这些输入制定各自产品的Backlog,然后规划各自产品的迭代。这里引出一个问题,怎么将抽象的需求或者业务需求拆解到各个子产品中呢?一般的做法是顶层有对应的架构师(俗称首席架构师),他来规划产品的边界,与大的需求的拆分。但是这样的人比较难找,因为他既要懂得业务,还要设计整体体系的架构,还要能分解需求边界等等。如果你遇到这样的人,千万不错过。

在自运营或者以服务的形式向客户提供支持的场景下,每个子产品的PO自行规划迭代范围,自行规划上线时间。不是所有的特性都要完成才能上线。对于跑的快的团队,其实可以将某个需要别的子产品配合的特性的提前上线的,尽管这个特性还没有真正能使用。对于产品关联依赖的特性,则可以通过PO间的Scrum2Scrum协调解决。(后面讲)

B2B的Scrum流程概貌


参考下图:

"b2b mode"

在B2B的产品销售模式下,很难做到各自独立的子产品对客户发布,因为客户需要的是一个Turn Key的交钥匙模式。在这种模式下是否就不可以做到敏捷开发呢?其实也不然。

和前面的自运营模式不同的是,各个子产品不会发布到生产环境中,但是各个子产品依然可以根据自己的节奏做发布。只是需要在特定的时间,将各个子产品的组合起来做一次基线测试和联调,出一个整个产品的基线版本就好。这里需要主要的是,不用拉齐各个产品的版本节奏,而是根据时间点对不同的子产品做版本选择就好。另外集成测试团队只是在需要的时候临时组建,而不是固定的团队。切记,平时这些集成测试的人员应该在各个子产品的团队中。各个子产品间的集成测试应该在功能特性完成时就独立去做了。这个基线测试更像是集成的回归测试。

Scrum 2 Scrum


对于产品比较庞大的系统而言,一个业务流程很可能涉及多个子产品,这样就需要不同的团队的PO/SA一起做协调与沟通了。

"scrum 2 scrum"

通常是Chieft SA召集(平台类产品)或者Businss System Analyst(业务类分析师)召集。Strategy Product Manager和Release Project Manager也会参与进来。这个需要注意的是,要避免团队与团队间的人员交叉协调与沟通,因为这样会导致团队效率极其低下。团队间的沟通最好由PO/SA统一在这个会议上协调。

另外就是,对于阻碍别的团队进展的需求,应该优先解决(不一定是完成整个特性,如提供对应的接口也是一种形式),避免团队间等待的情况发生。

这个会议更多的是对于需求范围的确定,以及团队间的协调,不讨论具体的方案细节。原理上不同的团队都是接口间的依赖,方案可以由各自团队的SA负责。

对于是否需要对每个团队的方案进行评审和把控,取决与团队情况。因为比较难有几个都对整体系统的每个模块的方案细节都清楚的。当然如果有,则可以成立Change Control Board(CCB)来做专门的架构评审。

Scrum Team的组成与角色分工


对于Scrum团队的组成,一直没有一个很好的定义,人数的多少总是争议的焦点。另外就是当遇到变化的时候,到底是给团队增加人手还是有别的好的方式呢?从实践看,对于一个团队的事情变化,负荷变重后,最好的方式重新成立一个Scrum团队接管新的任务远远比给团队增加人手的方式容易的多。毕竟新人的加入在一段时间并不能给团队产生正向的价值,因为需要沟通融合。保持Scrum团队的稳定性是首要原则。那么什么样的规模的团队比较合适呢?或许和7这个数字比较有缘吧(我家的车牌就有777 -:)),团队的规模在7个人左右的规模比较容易操作,一来沟通的成本比较低,二来无需安排特定的人员做管理类的工作。这样整个团队都会聚焦在具体的事情上。

团队的组成方式:1-1-3-2,如下图:

"scrum team"

这里需要注意的是,在这样的规模团队沟通不再是链式的沟通方式,而是有PO和整个团队传递需求,SA和整个团队传递技术。这里没有真正意义的管理者,团队是自管理,高度自治。

PO的职责

这里需要再此强调的是,PO需要能够控制团队的开发节奏,屏蔽外界对于团队的干扰,同时还要展现团队的核心价值。千万不要做成传声筒的角色。

SA的职责

SA是这个团队的技术的代表,需要能代表团队对外做技术的PK的功底。所以和PO的配合很重要,一个代表需求放,一个代表实现方。没有哪方比哪方重要,关键是如何用技术的方式体现业务的更高价值。SA对于开发的技术能力的提升富有不可代替的责任。

Develper的职责

最为开发,除了完成开发任务外,还需要对于业界的技术特别是开源的技术的敏感度。加入某些开源的项目,提供一些自己的代码将是十分有意义的。如果能有自己的想法,自己创建出自己的开源例子那更加完美。不过国内的开源情况,开源还是背靠公司表容易推进。

Tester的职责

对于测试,这里需要多说一些。因为有些互联网公司开始推行无测试的团队。其实并不代表测试已经不重要了,而是互联网的快速变化使得对于测试人员的要求与开发一样高了,而且团队的运作已经没有办法再预留出测试的空档期了。不过这个还是要看团队的情况,如果测试能够从每个迭代就能开始做测试设计,那么测试独立性还是有必要性的。如果团队总是以开发主导,变化总是比较随意(或者叫无法拒绝变化),或许还是开发自己测试比较合适。

另外就是测试最重要的职责是测试设计,而不是开发的帮手,更不是给开发打杂。测试最重要的价值体现是找到架构、开发上的思维漏洞而不是bug的数量。如果还是用KPI的方式考核测试对于开发的bug的数量,除了助长开发与测试的矛盾,别无益处。

开发与测试的磨合

团队的日常活动


Planning Game


Planning Game的目的是向团队传递这个迭代的范围,确保团队每个人都有一致的目标。在一个或者两个迭代后要以发布一个版本为结果。那么每个版本都可以用一句话的方式总结出来。如果每个迭代没有一个核心的思想,则迭代范围将比较混乱,团队的工作也容易无序。定出来的范围,需要预先拆解成每个任务项,并且把任务放到gitlab issue中管理,让每次代码提交都能关联起来,便于后续的代码的审核。同时将任务写到字条上贴在自己团队的看板中。看板现在有很多电子版的管理工具,但是不用纠结这个,其实一个真实的看板更管用。(后面会讲我们和电子类的看板的不同)

"planning game"

Planning Game的经验:

看板与站会


目前已经有不少电子类的工具提供看板的功能,但是实践中,使用一个真实的看板反而比较容易操作。看板虽然并不复杂,但是也有相应的书,可以参考<>,如下图:

"kanban"

和电子类的看板的区别主要在于:

有了看板,那么日常的站会进行将比较容易,不过有些注意点如下:

Review Meeting


在团队的日常活动中,有各类的Review Meeting,主要目的是团队内信息的有效传递以及贡献团队的智慧。具体操作经验如下:

End to End Demo


团队PO的要确保对于迭代中交付物的验收,最好的方式就是组织端到端的功能特性的Demo。培养团队有意识的在每次提交代码的时候,都能快速将结果展示出来。

Demo会的一些经验:

同时Demo会也可以邀请一些关键任务参与,如市场人员,树立大家对于产品的信息,以及传达团队对于产品更深刻的理解。

DoD Meeting


DoD: Definition of one。DoD会议主要目的是团队对于一个迭代的输出的总结。团队这个时候可以找个轻松的环境如咖啡厅进行。

"dod"

DoD的一些经验:
- 以迭代为维度作为DoD
- 版本中的第一个迭代的DoD要为下一个迭代做好风险控制,及时调整版本范围
- 不要只关注代码是否已经完成,要同时关注自动化程度、代码质量程度(Jenkins状态, Sonar状态),文档情况(Doc, Wiki),测试结果,是否已经CodeReview,是否已经做了代码清理工作(如扫描ToDo)等

Retrospect Meeting


回归会主要团队的自我反省以及自我提供,主要是提供机会给团队成员思考有哪些地方做的好的,哪些需要提高的,哪些地方有遗漏等。

"retrospect"

Retrospect meeting的经验:

总结

"summary"

人是活的,流程是死的;没有明文禁止的,都是应该可以改变的

大家不要过于拘束学术上的定义,而是真实根据自己团队的情况进行调整,适应以及高效就是好的流程。也不是说Scrum一定能保证高效,也不是说没有Scrum就不高效,一切取决于人。就像有些大的互联网公司的核心平台团队,每个人的能力和自主性都很强,没有比散养更好的管理方式了。

另外,如果管理者愿意看到团队的自治与效率提升,则切实应该考虑如何更好的去信任团队,去辅助团队自治,而不是在去做“保姆式”管理。