敏捷回顾会议的套路与实践分享

640?wx_fmt=gif

01

关于敏捷回顾会议

        实践过敏捷的人都知道,在敏捷中会有很多的会议要开,比如计划会议(Planning)、站立会议(Daily Scrum)、评审会议(Review)以及回顾会议(Retrospective)等。如果用几个简短的词语来概括敏捷的精髓,我想一定是:“小步迭代,快速反馈,持续改进”,通过将大块的整体需求拆分成迭代增量,每个迭代的成果对于用户而言都是一个可用品,因此可以快速地得到反馈,从而防止走偏。那么,如何做到持续改进呢?这就涉及到今天谈论的话题:“回顾会议”。

640?wx_fmt=png

Scrum 迭代框架图

  在身边大部分实践敏捷的团队里,大家对于回归会议其实都不是很重视,包括我自己前三年在M公司(某世界500强外企)的时候也是不重视的,总是认为迭代已经很紧了,干嘛还要花时间去开那个会议,无非也就是让大家休闲一下嘛,还不如出去找个农家乐团建一下来的实在。但是,如果我们有这种想法,其实是无法帮助团队做到持续改进的。所谓持续改进,就是在每个迭代之后发现每个迭代整个团队的痛点又或者说是槽点(对,回顾会议更像是团队的吐槽大会,能够将回顾会议变成吐槽大会也说明主持人主持的很成功),然后选出1~2个团队认为最应该解决的槽点想一下怎么应对,然后一起制定一个Solution把它变为一项机制在下个迭代中进行避免或解决,然后如此反复,每个迭代都解决一个槽点,这样团队就会变得越来越像一个卓越的团队。正如回顾会议的一本经典图书《敏捷回顾-团队从优秀到卓越之道》的名字一样,做好回归会议,真的会让团队从优秀变为卓越。

640?wx_fmt=jpeg

敏捷回顾-团队从优秀到卓越之道

  在此,也真心推荐一下这本《敏捷回顾-团队从优秀到卓越之道》,虽然这本书已经有一定年份了,但是姜还是老的辣,里面的方法和套路是我们值得学习的,然后在实践中应用他们,选出最合适自己的一部分套路,得出自己的一点心得,然后帮助团队做到持续改进,就是足以自豪的地方了。

02

敏捷回顾会议的那些套路

640?wx_fmt=png

Agile Retrospective

  相信经历过敏捷回顾的朋友们都会对回顾会议有一个结构化的流程认知,这个流程大致包括以下几个内容:

预设会议基调

  回顾会议一开始并不是直入主题,而是要让团队成员抛开迭代开发中的苦闷,休闲一下放松心情,特别是营造一个良好的便于讨论问题的氛围很重要,能够让人人都发言是重点。主持人(一般是SM,Scrum Master)会在此期间重申回顾会议的目的和此次会议的目标。

收集数据

  一个迭代中发生的事件很多,一个人(即使是Leader或SM或PO)不可能了解完这些所有的事件,因此需要从所有团队成员那里收集这些数据(一般指事件),让这些数据绘制成一幅共享图,记录所有发生过的事件。这些事件中有的是值得高兴的,有的是令人苦闷的,找到这些苦闷的并试着去解决它就是关键。

决定做什么

  记得彼得德鲁克在《卓有成效的管理者》中建议“一次只做一件事”,同理,一个迭代的时间有限,团队成员的精力也有限,我们需要在收集到的数据中选出1~2个优先级最高的,对后续迭代价值最大的事情进行解决,产出能产生积极效果的行动方案。

激发灵感产生见解

        找到了那些令人苦闷的事情,这时就该问“为什么”和开始考虑解决这些问题的方法了。大多数人的思维是:一旦出现问题,人们容易一下就跳到解决方案上,最初想到的解决方案可能是对的,但大多数情况下都不一定是对的,往往是治标不治本,因为并没有找到其根本原因。因此,在这一步骤中,我们往往会通过一些方法究其根本原因。

总结结尾

        所有好事都有个尽头,回归会议也不例外,该结束时就结束,这时可以感谢每个人在迭代开发和回顾活动中的努力,以此作为回归会议的结尾。

03

敏捷回顾会议的一些实践总结

在这几年实践敏捷的过程中,发现自己一直开不好回顾会议,因为这个会议真的很难,但也在不断的学习和被领导指点的过程中有了一点自己的实践总结。

设定一个安全的吐槽环境

        虽然敏捷强调自组织和扁平化,但是并不代表大家都能敞开心扉,因此在经历一个迭代之后,让大家都能敞开心扉的聊一会天,吐一下槽,得到迭代开发中最真实的感受很重要。但是,不是所有人都能说出来,可能并不是他不想说,而是你创造的环境并不让他觉得安全。因此,我一般都会选择在迭代的最后一天下午进行回顾会议,这天下午不安排什么工作,大家休闲一下,进行两个小时的回顾会议。会议地点我一般会选择一个宽敞一点的会议室,然后提前买好零食和饮料(公费报销,一般也就30块左右),关好会议室的门,给大家一种关起门来high的感觉,团队成员的防备心就会减弱,有利于敞开心扉吐槽大会。

640?wx_fmt=png

 安全的划水环境必备—零食与饮料

  此外,回顾会议不是“批评与自我批评”,更不是“问责和处罚”,要以一种休闲且认真(是不是很矛盾)的心态主持这个会议,否则即使团队成员人人都开口说话了,但仍然达不到想要的效果。最好的效果就是,要让团队成员觉得在回顾会议上没有领导,啥都可以说,反正回顾会议一结束,说过的话大家就都忽略了。

激发团队成员的发言欲望

        有了安全的吐槽环境,但还是有可能一些同事由于性格原因(虽然大多时候都是闷骚)不愿意多说话,这时候就需要主持人通过一些小桥段或者小游戏让他们多说话。这时我一般会采用一些小游戏来暖场,比如我会准备一些打印好的纸条,里面写着“在Sprint 3,我最想感谢______,因为________________________”,然后给大家5分钟时间,每个人完成这个纸条来写下他最想感谢的人,并说明不少于10个字的原因。5分钟之后,不少人写完了,这时我会告知大家被感谢的次数最多的人会请在场的同事一人一杯奶茶。然后,这时就可以安排成员们一个一个上来说了,现场氛围一下就可以达到火热化,每个人都在计算着自己被感谢了几次,最终某个成员被感谢了多次,被迫请了奶茶。最后,我也准备了一个道具“荣誉证书”,送给了这位被迫请奶茶的同事聊以慰藉。

  激发团队成员放松下来开口说话的方式有很多,必要的暖场活动也是需要的,毕竟,有些时候仪式感还是很重要的,不要觉得麻烦就不去弄,你的心思最终都会被团队成员看在眼里的。

  最后,为了回顾会议能够高效进行,除了要暖场保证会议在一个较为轻松的氛围中进行,同时还得约定一些“协议”。比如,我会要求团队在回顾会议期间尽量不玩手机,如果有人违反这个协议,那就会罚款5元加入团队的公款账户或者请某人喝一杯奶茶之类的约定,这样下来,大家都会集中于回顾会议本身而非三心两意。

收集数据时一定要落实到具体事件

        在收集数据时大多数时候采用的一般都是“高兴-悲伤”或者“愤怒-悲伤-高兴”法,要求团队成员使用不同颜色的贴纸或卡片来描述他们在迭代中不同时间段的情绪感受,但是大多数时候团队成员都只会描述一个简短的说明语句而并非具体的事件。例如,成员A会说我悲伤的是代码质量差,这就是一个非常笼统的说明,而并非一个具体的事件。而我们在主持收集数据活动的时候,一定要引导成员落实到具体的事件中去,即到底是什么事件让你感到悲伤?因为如果不定位到事件,后续无法准确的去挖根本原因。这里需要注意的是:在描述事件时,一定是描述事件的现象,而非描述事件的解决方案(虽然程序员大多都喜欢提前解决问题,跳入实现细节中去)。

640?wx_fmt=png 

  其次,在大家发表做的好的和做的不好的时候,应该特别注意“对事不对人”的原则。举个例子,我们可以说“代码评审不充分,所以代码缺陷较高”,不能说“某某某评审不认真”,当然夸人帅还是可以的哈。如果违反了这个原则,主持人(比如Scrum Master)一定得记得纠正和防止走偏。

  最后,对于Scrum Master或者Product Owner,最好在最后再发言,以避免对团队成员产生一定程度的干扰。

一次只优化一个问题

       收集完数据之后,通过将各个成员的数据进行分类,然后汇集所有成员进行探讨,找出其中的一项(建议一项,毕竟人的精力有限,事实证明,多了你也实践不好)作为后面分析原因和找出解决方案的项。很多时候,很多团队往往希望尽可能多的在一次回顾会议上想要解决团队成员提出的多个问题,但事实证明,那是不现实的,最后往往一件事都没做好,因为看到事情多,所以没有分析到根本原因,导致问题重复出现。

一定要探求根本原因

        在《敏捷回顾-团队从优秀到卓越之道》一书中,对于产生见解并寻找问题原因这个步骤例举了很多的方法,但最为有效也最为常用的只有5个Why或者鱼骨图法,我一般都用5个Why法。

  所谓5个Why就是对一个问题点连续以5个“为什么”来自问,以追究其根本原因。虽为5个为什么,但使用时不限定只做“5次为什么的探讨”,主要是必须找到根本原因为止,有时可能只要3次,有时也许要10次,如古话所言:打破砂锅问到底。

640?wx_fmt=png

5个Why法的关键所在:鼓励解决问题的人要努力避开主观或自负的假设和逻辑陷阱,从结果着手,沿着因果关系链条,顺藤摸瓜,直至找出原有问题的根本原因。

  在实践5个Why的过程中,需要注意的是:

  • 如果给出的原因多于一个,那么试着找出所有原因的根源;

  • 分析完成后,要从最后一个为什么开始反推“问题的现象”,确认反向逻辑也是正确的;

  下图是一个5 Why分析的运用形势图,来源于互联网:  

640?wx_fmt=png

持之以恒贯彻执行

        “没有做到真正地贯彻执行”是回顾会议存在的最大问题,也是我碰到过的很多团队都存在的问题。一旦分析到了根本原因,我们需要制定出解决方法,通常我们会通过制定团队规则(比如没有经过自测并完成测试用例优先级为2的代码不能提交测试环境等)或者增加Backlog Task(比如为所有backlog增加Code Review环节)来在后续的迭代中贯彻执行,并且在下一次的回顾会议中来一起评价一下这些解决方案是否有效,如果大多数成员都觉得有效,那就证明我们花费的时间是有成果的。

04

小结

        一个团队总说他们现在太忙,没有时间来开回顾会议,没有时间让自己变得更好—从未来的角度看,这就是一个非常短视的观点。在《高效能人士的七个习惯》一书中,Stephen Covey 使用伐木工人花费数天时间用锯条砍伐一棵树来做类比。最终,锯条变钝了。但是,由于目光短浅,伐木工人永远不会停下来磨锯。一个同样目光短浅的团队也不会花费60到120分钟来寻找改进。相反,他们将那60到120分钟里可能开发出的一点点代码看得更为有价值些。

  很多时候,我们都会因为走得太快,低头玩手机,而忘记了停下来“回顾”这一路的初心,我想对于敏捷团队来说,那应该是就是:

  • For a better future;

  • Learn from past;

  • Take action in present;

  愿我们都能定期停下来看看来时的路!

附脑图分享:

640?wx_fmt=png

参考资料:

Esther Derby / Diana Larsen,《敏捷回顾-团队从优秀到卓越之道》(★★★)

森林游泳的鱼,《敏捷回顾-团队从优秀到卓越之道学习总结》

刘恒,《华为云敏捷回归会议实践分享》

Unknown,《敏捷开发中回顾会议是什么?为什么总有人开不好回顾会议?》

Ben Linders,《从敏捷回顾中收获价值》

Holger Paffrath,《Agile Retrospective : Lessons Learned》

640?wx_fmt=jpeg

恰童鞋骚年,风华也许不再正茂,但却仍想挥斥方遒

本公众号会长期关注和分享.NET Core,Microservice,Docker,Kubernetes,CI(持续集成)等技术内容文章,还会与你分享个人生活成长的点滴及各类好书的读书笔记,希望能对你有所帮助,一起成长!

640?wx_fmt=png

640?wx_fmt=png
点个【在看】,和更多人一起分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光栅化坐标映射公式

Direct3D中投影空间内的点坐标与屏幕上(或视口内)点的对应关系, 设屏幕大小为wh,屏幕左上角像素的中心被定义为(0,0),整个屏幕是从(-0.5,-0.5)-(w-0.5,h-0.5), 像素 将投影空间内的x轴上区间(-1.0-1/w, 1.0…

朋友圈

1、题目描述 班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。 给定一个 N * N 的矩阵 M…

.Net Core AA.FrameWork应用框架介绍

开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我。AA.FrameWork 是基于.NET core流行的开源类库创建…

RBM/DBN训练中的explaining away概念

可以参照 Stanford大神DaphneKoller的概率图模型,里面贝叶斯网络一节讲到了explaining away。我看过之后试着谈谈自己的理解。 explainingaway指的是这样一种情况:对于一个多因一果的问题,假设各种“因”之间都是相互独立的,如果…

.NET Core使用gRPC打造服务间通信基础设施

一、什么是RPCrpc(远程过程调用)是一个古老而新颖的名词,他几乎与http协议同时或更早诞生,也是互联网数据传输过程中非常重要的传输机制。利用这种传输机制,不同进程(或服务)间像调用本地进程中…

排序链表

题目描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4示例 2: 输入: -1->5->3->4->0 输出: -1->0->3->4->5解法 思路1,归并排序 publi…

DBN训练学习-A fast Learning algorithm for deep belief nets

转载自:http://blog.sciencenet.cn/blog-110554-889016.html DBN的学习一般都是从Hinton的论文A Fast Learning Algorithm for Deep Belief Nets开始。如果没有相关的背景知识,不知道问题的来由,这篇论文读起来是相当费劲的。 学习过程中主…

程序员家的大闸蟹:青壳、白底、肉多、爆黄,现在是吃大闸蟹的最佳时期

其实,我跟大家一样,也是dotNET跨平台和张队长的忠实粉丝,也是一名程序员。上上周,我在dotNET跨平台的优选商城买了队长推荐人生果,也是第一次吃这个人生果,味道鲜甜、汁水也特别多,但由于快递的…

环形链表II

1、题目描述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则…

YUV常用的两种保存方式_YUY2和YV12

转自:http://blog.csdn.net/yiheng_l/article/details/3784874 简单的说,YUV的格式在存储上有两类布局: Packed和Plannar。Packed的方式就是把相邻几个象素打包起来。比如把水平方向2个象素打包到一个DWORD里。Planner方式则相反。Y分量和UV分量完全分…

.NET Core Love gRPC

这篇内容主要来自Microsoft .NET团队程序经理Sourabh Shirhatti的博客文章:https://grpc.io/blog/grpc-on-dotnetcore/, .NET Core 3.0现已提供grpc的.NET 托管实现 grpc-dotnet, gRpc 取代WCF成为 .NET的一等公民。自2018年11月以来&#xf…

使用两个队列实现一个栈

栈&#xff1a;先进后出 队列&#xff1a;先进先出 思路&#xff1a;利用一个队列做主队列&#xff0c;另一个队列作为辅助队列&#xff0c;把元素翻转过来即可。 public class Test {class QueueStack {private Queue<Integer> queueA new LinkedList<Integer>…

Magicodes.IE已支持通过模板导出票据

本次更新如下&#xff1a;【重构】重构HTML、PDF导出等逻辑&#xff0c;并修改IExporterByTemplate为&#xff1a;Task ExportListByTemplate(IList dataItems, string htmlTemplate null) where T : class;Task ExportByTemplate(T data, string htmlTemplate null) where T…

complementary prior

Complementary Prior 解决了多层网络中层间参数W无法计算的问题。 多层有向网络如下图&#xff0c;如果计算 W&#xff0c;我们需要知道第一个隐层的后验概率&#xff0c;那么会遇到几个问题&#xff1a;多层sigmoid网络1&#xff09;后验概率几乎不可计算&#xff0c;因为所谓…

Memcached

本文来自 58沈剑&#xff1a;https://mp.weixin.qq.com/s/zh9fq_e2BgdIeR8RKtY6Sg memcache是互联网分层架构中&#xff0c;使用最多的的KV缓存。面试的过程中&#xff0c;memcache相关的问题几乎是必问的&#xff0c;关于memcache的面试提问&#xff0c;你能回答到哪一个层次…

使用FastReport报表工具生成报表PDF文档

在我们开发某个系统的时候&#xff0c;客户总会提出一些特定的报表需求&#xff0c;固定的报表格式符合他们的业务处理需要&#xff0c;也贴合他们的工作场景&#xff0c;因此我们尽可能做出符合他们实际需要的报表&#xff0c;这样我们的系统会得到更好的认同感。本篇随笔介绍…

DXSDK_June10安装错误

今天安装DXSDK_Jun10时&#xff08;下载地址&#xff1a;http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe&#xff09;&#xff0c;出现错误Error Code:s1023 错误原因&#xff1a; 计算机上有安装过更新版的Microsoft Vi…

相交链表

1、题目描述 编写一个程序&#xff0c;找到两个单链表相交的起始节点。 如下面的两个链表&#xff1a; 在节点 c1 开始相交。 示例 1&#xff1a; 输入&#xff1a;intersectVal 8, listA [4,1,8,4,5], listB [5,0,1,8,4,5], skipA 2, skipB 3 输出&#xff1a;Refe…

.NET Core 3.0中IAsyncEnumerableT有什么大不了的?

.NET Core 3.0和C# 8.0最激动人心的特性之一就是IAsyncEnumerable<T>(也就是async流)。但它有什么特别之处呢?我们现在可以用它做哪些以前不可能做到的事&#xff1f;在本文中&#xff0c;我们将了解IAsyncEnumerable<T>要解决哪些挑战&#xff0c;如何在我们自己…

Kullback-Leibler Divergence

本文转自&#xff1a;http://www.cnblogs.com/ywl925/p/3554502.html KL距离&#xff0c;是Kullback-Leibler差异&#xff08;Kullback-Leibler Divergence&#xff09;的简称&#xff0c;也叫做相对熵&#xff08;Relative Entropy&#xff09;。它衡量的是相同事件空间里的两…