近来写了不少敏捷开发的系列文章,如《敏捷开发中如何开发高质量产品》,《敏捷开发的架构设计》,《我的敏捷开发实践》,《敏捷开发中的Code Review》等,这些都是关乎方法的。方法固然很重要,但还有另外一部分笔者觉得非常的重要,而且不容易被人关注,也是这篇文章想和大家一起探讨的内容,这就是敏捷开发的“精神”。笔者认为敏捷开发的“精神”是敏捷开发的核心,也是敏捷开发之所以称为敏捷开发之所在。
    方法和精神,孰重孰轻,是仁者见仁智者见智。但缺少精神的方法,长久以往,便形似而神不似,缺乏核心和灵魂,犹如 “行尸走肉”。君不见,美国的民主模仿者不在少数,民主民权,三权分立,权力制约,方法可谓一套一套,有Best Practice(最佳实践)可循,但强大富强如美国者也仅此一家,如铁杆小弟墨西哥却是远不如,偷渡到美国倒是积极有余。想起前阵有一部电视剧——《士兵突击》,受到广大观众的喜爱,假如我们做一个问卷调查,问一些观众:什么是“钢七连”?答案有:钢七连是超强的作战能力,钢七连是纪律严明的团队,钢七连训练刻苦,钢七连是“不抛弃、不放弃”的一种精神。我想很多观众都会说,钢七连是“不抛弃,不放弃”的一种精神。所以,作者认为方法之外,还有超乎方法的所在,就是精神。敏捷开发也是如此,方法之外(迭代、测试驱动、重构、结对编程等),还有超乎方法的精神存在。
    记得前两年敏捷开发流行之始,在公司上下掀起了一股敏捷之风,尤为壮观的是“一夜”之间所有的团队都敏捷了,全都号称自己团队正在敏捷开发,全部装备了“敏捷开发”的光环。了解之后,发现其中大部分团队的确是开始使用一些敏捷开发被推崇的方法,比如,一些团队使用了迭代开发,还有一些团队使用了结对编程,还有一些团队开始使用测试驱动开发。当然,我们团队(包括我本人)也是其中的一员。这倒让我认识到,从众心理不仅在人与人之间存在,在团队之间也是存在的。
    这里倒不是去点评这些团队的做法,开始使用敏捷是值得鼓励和赞赏的。只是这样的现象引发了我当时不少的困扰和思考:到底什么是敏捷开发?是否真是“神说,要有敏捷,于是就有了敏捷”?是否一夜间大家就由于使用了一个迭代开发的方法(尽管一个迭代里面还是用瀑布),大家就都敏捷了?
    直到前几天去上地的“小肥羊”吃火锅,又触动了心中一直在思考的什么是敏捷开发的问题。在“小肥羊”里现在也能看到和“海底捞”一样拉面条的小弟,也有免费送豆浆的服务。但是虽然这些方法都类似,却还是觉得和“海底捞”不太一样。后来觉得二者确实不一样,不一样的是人,是气氛,是那种服务的精神。
    所以,总而言之,笔者认为:敏捷开发之所以为敏捷开发,不是因为其方法(虽然方法也很重要),而是因为敏捷的精神存在,我称这种敏捷的精神为“小跑精神”。下面让我们一步一步去看看,到底敏捷开发的“小跑精神”是什么?
敏捷开发的“小跑精神”
    不知诸位读者是否都注意到一个现象,不管在哪个行业,餐馆也好,酒店也罢,甚至飞机上的空乘服务,总有一些好的服务人员,他/她们在服务时总是满怀热情地,“小跑”着为大家服务。他/她们总能注意到客人的需求,总能给客人提供及时的服务,而且总是在寻找“金矿”似的寻找自己可以贡献的地方。他/她们或许没有那种所谓的礼仪方法,满口的“您好”,“您辛苦了”,“谢谢”,“谢谢光临”这些方法,但他们的态度和精神,无时不刻地体现她们的热情,无时不刻不在感染顾客。
    这就是我称之为“小跑精神”名字的来源。“小跑精神”是一种主人翁态度,是一种自动服务的热情,而不是表面的方法和寒暄。现在太多的公司和团队,都太注重所谓表面的形式,而往往忽略了内在的精神。如在任何银行的电话中心,拨打进去后都是机器的寒暄“您好,欢迎光临某某银行电话中心……”,但是如果没有真的传递“小跑精神”的服务给客户,这样的话语只不过是浪费顾客的时间和顾客电话费而已,不能感染顾客,并提高的客户满意度和忠诚度。
    敏捷开发中“小跑精神”也是这样的一种精神和态度,一种对产品,对项目的由内而外的热爱,乐于贡献的主人翁精神。每个个体都可以按照组织的最高利益,自我驱动的完成组织的目标。
    小跑精神可以体现在下面几点:
    1. 人找问题,而不是问题找人
    问题找人,是一个极其普遍的现象。在组织协调中,一个很常见的现象是“责任分散”。当一个问题由一个人负责时,犹如个体户经营,那这个个体肯定是尽心尽责,因为这是他一个人的“责任”。当组织逐渐壮大,特别是近几年全球化的经营方式,一个任务由多人负责,甚至多个不同国家的人负责的情况,已经司空见惯,这样的团体协作中,容易滋生“责任分散”的现象。
    什么是责任分散?比如,在街头,四周只有你一个人,当你看到旁边有个小孩躺在地上哭,你一定会过去扶起小孩,然后提供你的爱心和帮助。但是,换另外一个场景,在一个繁忙的街边,四周都是匆忙而过的人群,当你看到旁边有个小孩躺在地上哭时,你可能会随着人群走过。这就是责任分散,当人越多时,大家都觉得,一件事情可能是别人会去做,所以自己就不去做了,而且自己不去做内心收到的谴责也不会很大。因为,所有的责任都分散到了所有的个体上,收到的内心的谴责也都分散到了所有的个体。
    在软件项目管理中,也是经常问题找人,而不是人找问题。下面的场景大家肯定不陌生:
    在产品开发早期,由于代码开发过快,代码混乱,需要重构。但开发人员觉得还没发生问题,无需重构。所以一拖再拖,最后索性不重构了。
    今天有个Defect开给了某个开发人员,测试人员在Defect里面的描述写的不是很清楚,导致无法重现Defect。开发人员一直等着测试人员,测试人员等着开发人员,一拖就是两天过去。
    今天是Code Review deadline,但没找到会议室开review会议,就延迟到了明天,明天还是没找到,就延迟到了后天,最后就是由于会议室,导致Sign Off延期三天。
    类似这些人找问题,而非问题找人的现象缺的不是技术、也不是条件,缺的正是一种“小跑精神”。一种不断主动发现问题,积极解决问题的精神。
    敏捷开发中的“小跑精神”下应该是人找问题,只要是对组织和项目有帮助的,都要积极主动的去思考和提高,并积极的采取行动,不要等到每次问题找你头上了再开始消极的去回应。
    2. 自我决策,而不是事事等待命令
    “小跑精神”崇尚流程与灵活的平衡,科学管理与情感精神的统一。当今商业环境快速变化,唯一不变的就是变化。冲在一线的“开发人员”是最了解系统架构和技术、开发工作量,某一件改动对项目影响的人。“小跑精神”的团队成员,应该拥有在一定范围内的自我决策的能力,充分灵动的为产品创造最大价值。
    如果把项目比作从北京到广东自驾旅游,那除了项目目标、方向和主要的汇合点外,团队在哪个路段开什么速度行车,由于堵车走哪个小路,哪天在哪个加油站加油这些具体的执行层面,完全交由团队自身决策。这样既能下方复杂度,又能充分发挥团队的“小跑精神”,选择最佳方式实现组织的目标。
    所以,“小跑精神”是在大方向和策略不变的情况下的自我决策,而不是事事层层汇报,等待上级命令(当然在影响大方向和战略的情况下,还是应该向上汇报)。