在软件产业历史上有的疯狂的点子中,XP既拥有结对编程,又有测试驱动开发的方法,在它第一次公布的时候是一个非常疯狂的想法。Mob编程看起来则比它更进一步:它是一个整个团队都在同一个地点、在同一时间使用同一台电脑进行工作的开发方式。
Woody Zuill在第一届Mob编程大会上就Mob编程发表了一个演讲,在其中,他回答了每个人在他四年的mob编程中不停问他的问题。Mob编程大会在2016年5月1日至2日在美国麻州剑桥镇召开。InfoQ通过问答与文章报道了整个事件。
这篇文章通过两部分来对keynote和对Zuill的采访中的想法进行回顾,其中包括了引入Mob编程的不同方式、IT工业最主要的问题、mobbing适合的其他活动和mobbing的目的。
Keynote:Mob编程是做什么的?
关于XP的历史以及对C等级和高级(非IT)经理解释技术实践的困难,很明显的一个问题是:“一个在一台电脑上工作的五人团队如何有很高的生产力?”Woody Zuill给了我们两个答案:
将工作分开到多人中就很高效的证明到底在哪里?这与Robert C十分接近。在Martin对IT历史的回顾和Peter Drucker对于“知识工人”的工作中提到:使用工厂标准来衡量知识工作是一种解释,但(据我所观察到)没有通过证明的证据。
我们的目标不是多产而是有效。为了使用精益实践画一条线,多产而非有效通常是一个迅速产生浪费的好方法。
一个团队在开发软件时所面对的最主要的问题在Mob编程中全部消失了。例如:
在2012年,Zuill在Hunter中和他的团队尝试了一些新的实践。在通过twitter进行了一些讨论后,他开始问自己他在会议中都做了什么。在大量的演讲中,他持续问自己同样的问题,于是他决定写一些幻灯片来解释它,并在脑中铭记Peter Block的这句话:
“另一个人经验的价值是为了给我们希望,而不是告诉我们该怎样或该不该前进。”
Zuill有一个复杂的问题:“为什么团队要像现在这样工作?”观众们的回答都是因为团队,而他的回答却不同:一个团队用Mob的方式进行工作的唯一原因是这个团队决定了这么做。
这也许就是Mob最适合敏捷思维的地方,而且它也许比Manifesto更敏捷,更像Alex Krivitsky在2011年重写的那样:这全都是关于“个人和交流”。为了做到这点,Mob编程“manifesto”(我不确定会有人这样称之)如下:
所有聪慧的头脑在同一件事、同一个时间、同一个地点、同一台电脑上工作。
我看到了它与第一个manifesto的两点不同:
为了达到并强调这一模式,Zuill解释了强结对编程的引入,其中Llewellyn Falco是这样定义的:
为了一个想法从你的大脑输入电脑,你需要借助别的手。
Woody对Mob编程则十分谦虚:他一起工作的团队刚刚才尝试了一些实践;他们只是在更多地使用他们认为有用的实践方法。Woody刚刚看到了代码的感觉,并要求团队提升一些技术。他这么说道:
做这个工作的人能最好地决定怎么做这项工作。
这样的mob团队典型的一天是由不需要站会的、每天一小时的学习时间开始。在那之后,整个团队开始做他们的产品,一天不超过八小时。在一小段时间后,产品负责人基本上全天都作为小组的一员工作。他们还使用了一些原则:
Robert Henri总结了其中的要点:
对象不是艺术,但是在这样美妙的状态下,它会不可避免地称为艺术。
作为总结,Mob编程是有关学习态度的:
Zuill没有讲Mob编程提升到“必须要做的事”,而他鼓励更多频繁的回顾和对团队基本的关心。Mob编程也许和在这里描述的实践一样重要,通过不同的,对于团队的效果会有所不同。
每个参与mob的人在Mobbing中都随时保持能与大家接触,这意味着为了使它成功,你必须确认团队的心理安全。这和Richard Kasperowski在两天前展示的Core Protocols的解释很接近。这也许就是为什么有了Core Protocols之后,敏捷的开放空间和Mob编程中定义了现代化的敏捷。
对Woody Zuill的采访
InfoQ:Woody,非常感谢你能够接受InfoQ的采访。在你的keynote之后,你说IT工业已经破产。你可以分享你为什么这么认为吗?
我不至于说出IT工业已经破产这样的话,但是我们现在遵循的许多实践方法只不过是按照惯例执行。这就像Adm. Grace Hopper所说的:“人类已经开始拒绝改变。他们喜欢说:‘我们总是这么做’。而我试图做出反抗。”当我们只是简单地因为“我们曾经总是这么做”而去做事情,我把这样的情况看作一个提升的机会。
InfoQ:以这样的角度,你认为我们可以做什么来提升我们商业的情况?
把关注点放到运行得很顺利的事情上是很有用的,然后再做一些实验来看我们可不可以找到一种放大利益的方法。例如,在探索“Mob编程”前我们聚集起来开会,来查看一些开发者一直有困难而没有解决的工作。在查看过有问题的地方后,我们开始在会议上共同解决这些问题。这就不是提出一些想法然后再回到自己的办公桌上开始尝试写代码,我们一起工作来定义代码中的问题并且作为一个团队来解决问题。我们发现这样做非常高效,所以决定继续用这样的方式作为实验工作几天,来看我们是否能够“提高协作的效果”。最终表明它十分有效,这也是我们为什么会这样工作,即每天作为一个团队进行“Mob编程”的原因。
InfoQ:作为Mobbing中的主要代理人,你怎样在公司中引入Mob编程的想法?
虽然我十分自信Mob编程有很多的好处,但是我不会随意推测我看到和体验到的这些好处是普遍适用的。然而,当我被邀请向团队介绍Mob编程时,我做了一个研讨班,其中我们探索了软件开发的本质、团队工作的好处,以及分享创意和有礼貌地解决冲突的技巧。
InfoQ:从另一方面来讲,如果我们的读者都很相信Mob编程,你可以从内在分享些引入Mobbing的建议吗?
慢慢来。如果人们对实践Mob编程很感兴趣,我建议共同实践简单的代码练习或Katas是一个很好的开始。没有了在生产工作中的工作压力,我们可以练习如何一起工作并且学习怎么样良好且有意义地沟通。Mob编程就是有关学习一起工作的。
InfoQ:从一些角度来说,你认为Mob编程可以在编程外的其他领域使用吗,就像Scrum?
就像敏捷编程和极限编程,Mob编程也是关于软件开发的,但是类似的概念也同样适用于其他类型的工作,例如设计、市场、硬件工程、文档工作等,甚至可以说任何事情。在许多领域里一起高效地工作都是优势。
InfoQ:在协调人的一次研讨班中,你说:“这不是有关Mob编程的”。所以如果mob不是有关mob的,那什么与mob有关?
它是关于探索原则和实践的,这在你正在做的事和你在共同工作的人的环境中是十分重要的。Mob编程本身只不过是通过使正在做工作的人们能够决定怎么样做自己的工作而发展出来的结果。我们在练习如何从频繁和定期的回顾中获得好的结果、更关注能使工作变得好的事、以及提高它的效果,它就是发生在这样的环境下。当我们能把这件事做好,我们就能找到任何环境下正确的实践结合。
InfoQ:如果我们的读者想要更深层地了解Mob编程,你建议他们可以读/看/听/做些什么?
youtube上有一个三分钟的视频,可以作为一个有趣的开始——它展示了我们最初的团队如何使用“Mob编程”在工作日的全部8小时中共同工作。
我还与Kevin Meadows写了一本书,他们可以阅读。
我们在大会上有大量的演讲视频和播客节目,我还经常做有关Mob编程的免费网上研讨会。并且我很乐于通过视频会议来解答任何问题。
查看英文原文:Mob Programming - an Interview with Woody Zuill
感谢刘嘉洋对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们。