《A++ 敏捷开发》- 26 根与翼
中国社会一直非常强调家庭价值观,希望实现家族的持续传承,家族有族谱,代代相传的关系对每个家庭成员的成长产生深远影响。我们每个人都只是人类进化过程中的短暂过渡。父母普遍希望把最好的东西传承给下一代。然而我们需要问自己,什么东西能够持久,仅仅是财富和金钱吗?
继承大量财富,但如果不懂得如何正确利用,可能反而会削弱个人的竞争力,适得其反,最终成为社会的蛀虫。
《七个习惯》的作者史蒂芬•柯维(Stephen Covey)在书的结尾(最后一章)中提到,我们可以传承给下一代并具有持久价值的,只有2样东西:根和翼。
“There are only two lasting bequests we can give our children - one is roots, the other wings.”
根
回看人类过去130年,除了打了2次世界大战外,也做了很多前所未有的创新:
- 电灯 (煤气灯)
- 汽车 (马车)
- 飞机
- 摩天大厦
- 半导体,集成电路
- 计算机
- 互联网
- 移动电话
现在我们使用的的发明其实都是‘发明者’依据之前人的经验演化出来的。 我在爱丁堡大学的古乐器博物馆 见过各种奇形怪状的古乐器,这些都是 原来是现代乐队里的铜管和木管乐器,例如双簧管、单簧管、巴松管、圆号、小号等的前身,有如达尔文先生物种起源里物种演化一样,去弱留强,最终演化成现代各种乐器。
现在我们熟悉的口琴和手风琴,其实都是欧洲人依据中国的笙改造出来的。
人类创新并不仅限于前述领域,这只是我们看到的凤毛麟角,其他在医疗、电影、音乐、数学等各个领域都表现出了卓越的创新力,这些都是祖先留给我们的宝贵财富。
举例来说,如果19世纪欧洲城市的居民能够坐上像“Back to the Future”那样的时间跑车,见到200年后现代人的生活,他们将感到难以置信。
正因为每一代人都有承传前人的成果,继续发展,我们人类才能有现在的成就。这就是我们的根。
翼
除了根的传承,祖先还留给了我们“翅膀”,赋予我们自由思考的能力打破负基因传承,而不是简单地将这些基因传给下一代。
以下面2故事介绍2种不同的策略。
飞行实验
人类一直都想飞上天,中西方对此都有尝试,但始终以失败告终。例如,传说明代火箭专家万户陶成道尝试在凳子上绑47根火箭,又绑上风筝做飞行试验,结果爆炸而亡。15世纪,意大利人达芬奇也模仿鸟类的翅膀设计飞行器,但只是留在图纸设计阶段。
莱特兄弟 (Wright brothers) 在1903年首次成功进行机动飞机飞行, 在12月17日的第四次飞行在空中飞行了59秒,航程达到259米。
|
从莱特兄弟的飞行故事,可以看到他们兄弟为了"飞天梦"能成功绝非偶然,不仅单靠意念和冲劲,更重要是不断试验,从自己和前人的失败中获取经验教训,收集数据持续改进。
= = = =
2年后的1905年,在大西洋对岸,在瑞士伯尔尼(Bern) 一名26岁专利局员工发表了5篇科学论文,其中第4篇提出时间与空间并非固定,而是相对观察者的移动,打破了自三百年前牛顿力学的观点。这篇后来被认为是物理界最具影响力的论文就是爱因斯坦的《狭义相对论》。
为什么这年轻小伙子能做到?
好奇心和年轻人无限的想象力。
触动他的好奇心是之前物理学家从实验发现光速是不变的,但这与牛顿的传统力学有冲突。但他不是理学家,没有实验室,他只能单凭想象力,利用一系列的假想试验,创建了狭义相对论公式。
假设光速是C,高速火车地板与车顶的高度是 C/2,光从高速火车地板射到车顶,然后再发反射回地板总共时间是1单位。 假设高速火车以高速v从左往右运行,一位静止的人从外面看这火车,也看到光从火车地板射到车顶,然后反射回到地板,因火车已经往右移动了vt,所以光线的总长度是Ct (=Ct/2+Ct/2)。 如果光速C是永恒不变,时间t必须大于一才对,而且v越大,t也越大。所以在高速火车里的时间比外面地面静止的时间短。了解了因光速不变,时间相对必须变的道理,便能理解为什么会出现“太空飞行员乘高速火箭太空旅行,30天后回到地球会发现实际已经过了几十年,亲人都已经去世”的可能。 |
(爱因斯坦后面被访问时说“我很骄傲的一点是,我有着大把大把的空闲时间。”因为在专利局工作,所以他有很多时间,可以尽情思考、想象。)
日本数学家樱井进先生从小一直崇拜爱因斯坦,他总结:
“他教会我要去珍视人类所拥有的‘想象力’。想象力比知识更重要,因为知识是有限的,而想象力概括着世界上的一切。他教会我要去珍视人类所拥有的“想象力”。正因为有着想象力的翅膀,人类才能抵达去不了的地方,看见看不见的东西。而我们每个人都有着这双翅膀。展翅高飞。”
他发表相对论时,大部分物理界学者觉得这只是理论,无法验证,也缺乏实用价值。
科学本身就是一种喜悦,是一场旅行,旅行者能看更多其他人看不见的风景。爱因斯坦教会我享受数学、科学研究之旅的乐趣。将科学运用到实际中去是另外一回事。 (随着科技不断发展,相对论启发了后面的“宇宙大爆炸”和“黑洞”,也帮我们能精准地测量卫星的时间与定位。)
“我们都不知道。我们所了解的知识和小学生没什么两样。” 爱因斯坦也说:“这个世界最难以理解的部分,就是去理解这个世界。” 也正因为这年轻人敢面对这世界最难的挑战,使人类的物理认知上了一个台阶。 后者的策略是依赖年轻人的无限想象力,抛开前人留下来的包袱,达到创新。
= = = =
虽然我们都继承了祖先的根与翼,但不是每人都能为人类继续发展作出贡献,要具备什么重要元素才能做到?
To be a powerful transition person, one must first change his inner first. 要成为有影响力的过渡者(a powerful transition person),无论采用以上哪类策略,我们必须首先进行由内而外的改变,这样的改变才能持久。 以上源自Covey先生在《七个习惯》最后一章的总结。 |
‘魔术师’乔布斯1997年重回苹果,13年后再把苹果带上高峰
1985年乔布斯被迫离开苹果公司,独资开创NEXT公司,到1997年NEXT被苹果公司收购,乔布斯重返苹果(当时苹果公司在破产边缘),到2010年将苹果公司带回到美国市值最高的科技公司,中间也经历了多次失败。
乔布斯在他的传记里说,“是什么力量推动我? 我觉得大多数创新者(Creative people) 都很希望感谢我们的前辈,感激他们对人类的贡献。
我并没有发明我用的语言或数学。我的食物基本都不是我自己做的,衣服更是一件都没做过。我所做的每一件事都有赖于前人的贡献。我们很多人都想回馈社会,在历史的长河中再添上一笔。因为我们不会写鲍勃•迪伦(Bob Dylan)的歌或汤姆•斯托帕德(Tom Stoppard)的戏剧,我们只能用自己能掌握的方式去表达、体现。试图用自己的才能去表达内心感受,去表达对前人的感激、并做点贡献,那就是推动我的力量。”
共通点
为什么莱特兄弟、爱因斯坦、乔布斯能在航天、物理、电子产品领域作出突破性重大贡献?他们的故事都有两个共通点:
- 专注 -- 例如:
- 专心研究飞机
- 解决物理难题,更好理解这个世界
- 结合新技术研发针对个人市场的领先电子产品
- 长期锲而不舍 -- 从启蒙到成功都经过很多年不断努力,中间困难重重,必须内心坚定,也正是这心态让他们成为有影响力的过渡者,继续传承人类的根与翼。例如,乔布斯从被迫离开开始,前后经过25年,经过iMac iPod iPhone iPAD 等,最终才使苹果再创辉煌(因为这是公司级突破,不是个人,所需时间更长)。
“你的例子都是超级明星级大人物,根与翼概念不一定适用于我们这些普通人群。”
“为什么你认定自己不能成为有影响力的过渡者?”我问。
每次听到这类反驳,我都会接着讲我的故事。
因从小很喜欢看书,从小学到大学毕业一切都很顺利,没有遇过什么挫败 – 例如,因80年代香港经济还是高速发展,大学毕业后不难找高薪岗位,每年2位数调薪,所以对自己的能力信心爆棚,也看不出自己的问题、弱点。 但香港缺乏研发工作,1992年我31岁,第一位小孩出生,但工程职业生涯已经到了天花板,如要继续提高收入必须转到市场和销售岗。 但转销售后虽然能达标,但一直没有特出表现, 最终在2000年被公司辞退沦为失业汉。失业后审视自己的问题和不足:发现自己一直保持工程师思维,总觉得只要方案具优良、具竞争力,客户无理由不买!但不知道产品只是商务购买的其中一个考虑因素,市场如战场,有太多的因素会导致失败。最关键是自己一直都没有这意识,也不觉得有问题。 现在静下心来想,自己一直都是先制定总体计划(最短也几个月),然后按计划执行的传统工作模式,这方式在8、90年代香港没有问题,但2000年后市场环境快速变化,思路必须转变过来,当时也刚读完软件工程,学过敏捷和精益等概念,自己的工作方式也转为每一小步试验,有效果才做下一小步的做法。例如写这本书里,每写完一个章节,必须找我的“写作伙伴”们看看,让他们给反馈,有些专门挑语法问题,有些能专门看出总体架构问题。经过他们的反馈,我再修正,然后才会在公共媒体上发布。 想尝试创业,但创业很难,风险非常大。不能用传统方式制定大计划,只可以不断尝试各种能产生收入的机会,尝试,看看效果。所以开头几年试过各种的工作,比如给企业做项目管理培训,进高校当讲师,帮朋友公司做市场调研与分析,并写产品推广方案书等等,为自己带来一些收入。因为刚读完软件工程,在富士通工作时也与一些CMMI5级软件开发公司合作过,并开始探索软件工程的质量改进和参与CMMI评估,慢慢学习(因毕业后一直没做过软件开发)。 从2006年始,香港政府开始鼓励软件开发公司使用CMMI模型做改进与评估,提供资助,我便开始专注软件开发CMMI过程改进的培训与评估,也开始从长三角地区开始,与大陆本地公司合作提供CMMI服务(虽然我成本较高,但CMMI源自美国,绝大部分材料都是英语,与大陆高校老师比较,我是直接读英文原文,比单看中文翻译能更好理解。) 十年后,2016年左右,越来越多团队使用敏捷开发,我便开始深入比较各种敏捷开发方法。2018年,正值美国PMI推出ACP个人证书,我开始与培训机构合作教学生ACP,发现如果团队能在每次迭代回顾利用数据(缺陷和返工)分析根因能更有效提升(背后其实是改善,CMMI, 敏捷,精益等原则)。 越接触更多开发团队越发现要有改进动力不仅仅是工程的问题,开始再探索人性相关问题(虽然以前读MBA时接触过,再细读 X-Y理论,组织发展 (Organization Development)的方法与理论), 并在培训 和 现场辅导中不断实验有效的方法帮助团队提升。 学习敏捷大师和软件工程学院科学家与学者等前辈们的贡献,成为我的软件工程的根,没有他们,我不可能从零自己创造这么多东西出来。 不固步自封,因市场环境变化,从传统模式改变为精益思路,是我的翼,这都是我自身根和翼的经历,让我可以成功走过24年独自创业之路,也帮我成功出版第一本书 (也希望这书能为软件工程做些微小的贡献)。 根与翼如能用得其所确实能促成有影响力的过渡者。 |
“所以任何人,只要把心态转过来,并能锲而不舍,都有机会。”我总结说。
“好吧。但你说这些跟敏捷开发、持续改善有什么关系?我没有期望能成为爱因斯坦!”
我认识很多软件开发公司虽然已经做了很多轮的CMMI评估(3年一轮)但一直没有任何实质的改善,是什么原因?
他们误以为CMMI是一套最佳过程,只要完全按这标准执行,开发质量便得以保障。
本来美国设计这模型时,因对团队每个岗位都要有用,覆盖的范围很广,除了软件工程 从需求到最终验证确认外,还包括项目管理、配置管理、PDCA 试点与推广、度量与根因分析等。虽然模型是面面俱全。但企业使用这模型来做PDCA过程改进时应每一轮试点应只针对最大的痛点做改善,有显著改善后再针对其次的痛点改善,最终满足模型所有实践范围。所以每当美国软件工程协会(原创CMMI模型的机构)听到某企业能快速“高效”在12月内从零开始,达到三级评估要求,都会觉得是不可思议的笑话。
与成为有效过渡者的要素一样,企业、团队、个人要有效改善,必须有针对性,大部分企业没有利用数据、找根因、做改进。所以开始时应只针对缺陷排除和返工工时,每次迭代回顾时分析根因。
“听你这样说,反观我们团队,我立马想到有很多地方需要改进,例如需求调研、开发流程、持续集成、测试自动化、配置管理等。为什么你提议只针对减少缺陷引起的返工做改进?”
要理解背后的原因,先听听质量大师Dr Juran回顾过去质量改善的成功要素:
- All Improvement takes place Project by Project 所有改进只能按项目逐个进行
- Backlog of Improvement projects is huge 潜在的改进项目非常多
- Quality Improvement does not come Free 质量改进并非免费
- Major gains come from the Vital few projects 主要效果(收益)来自少数重要项目
- Quality improvement extends to All parameters 质量改进可扩展到各类参数 (如生产率、进度、安全性、环境等)
(以上源自 Juran 博士《 Juran Quality Handbook 》第五章质量改进。)
所以如果开始时同时对4 – 5 个方向同时做改进,反而会失去聚焦,难以尽早看到改进的效果。
但如果只针对降低缺陷引起的返工,目标明确不仅让大家容易接受,而且也容易扩展到各个过程,例如需求、开放、产品集成,甚至配置管理。
因开始时能否引起高层对改进的兴趣很重要,与企业领导的首次见面,我也都会讲以下内容,说明团队如何分析迭代缺陷数据,开始定量管理。
TED演讲式总结
今年被质量经理邀请参加他们的质量沙龙,但只有30分钟,我就用了TED演讲思路,用了17分钟讲软件开发公司的常见质量问题和改进措施。
你觉得下面4种工作,哪一类工种占的工作量最多?
从2012年Capers Jones对美国软件公司的统计中看到,编码只排第二(占开发工作量的25%),测试与评审和缺陷修改的总工作量才是排第一(占30%)。你选1.编码,其实大部分耗时的不是写代码,而是修正错误代码。软件开发有特点,缺陷发现越晚,修改耗费的工作量就越大。如果早期发现,可能只需要花费半小时、1小时修正。原因很简单,当已经集成为一个十几万行的系统,里面有很多组件。如果集成完成后使用时才发现BUG,首先很难找出是哪里代码出问题,然后为了验证代码修正对不对,首先要测试单元模块通不通过,再测集成通不通,最后也通过系统测试才能给客户。但是如果前面自己自测、集成测试、评审时尽早发现并解决问题,便能节省了很多时间。 |
如果有老师教练教大家各种分析技巧,并能帮助大家客观看到团队水平,大多数团队对针对降低客户缺陷率和返工这明确量化目标都会感兴趣,认同大家一起分析迭代缺陷和返工量数据,制定下一轮改进计划与措施(好比《汤姆历险记》里,Tom认为给花园栅栏涂漆是件极富挑战,一般人难以做好的任务,他的朋友圈都会很想参加,甚至愿意付Tom礼物)。反之,如果是为了公司顺利通过3年一次的评估,大多数人都会说后面3-6 个月的非常忙,没有时间。
但任何显著的提升都同样需要有他们那种内心思维的转变。 也正因为改变固有思想和习惯很不容易,如果个人、团队、企业没有改变思维,满意现状,觉得暂时不需要继续改善,敏捷大师提供的敏捷宣言、12条原则和各种方法(如SCRUM、XP),和相关的培训、技巧学习,最终都无法对做好敏捷开发出效果。
反之,如果个人和企业领导不满意现在的工作状态,真心相信必须改善质量,有危机感,觉得这些应是工作的重要部分,是唯一能真正完善时,不一定单纯依赖敏捷的原则和方法,甚至可以在改善过程中创建更佳方法与技巧。
团队和企业要健康成长依赖以下主要因素(与上一章创新的要素类似):
- 高层要制订高的目标,也要提供资源。
- 可参考开始过程改进之旅里面的获取高层支持,尽早估算改进能节省多少成本,要求立项,把过程改进作为项目来管理。
- 改进要有专注。
- 例如针对如何减少缺陷返工,尽早在评审和前期测试发现缺陷,如何做好迭代回顾部分能帮助团队了解应如何开始。
- 团队成员的能力与动力。
- 个人提升、自我管理、代码质量等部分能帮助提升。
有竞争才有进步,不知道自身的不足,缺乏危机感是改善的最大阻力。
东北虎作为濒危物种,目前在国内的数量估计不超过30只,因此国家动物保护组织采取了多项措施予以保护,其中包括人工饲养。专家曾试图将这些人工饲养的东北虎重新放归野外,但这一任务极为艰巨。它们是否能够在野外独立存活下来,仍然是一个未知数。有一部纪录片生动地讲述了动物保护组织在这一过程中所面临的各种挑战和困难。 要确保老虎在野外能独立生存,它们必须能够自行觅食。在自然环境中,它们主要的捕猎对象就是鹿,但鹿非常敏捷,时速可达50公里,而且具备很强的耐力。因此,专家需要评估老虎是否能够成功捕猎到鹿,否则就不能将它们放归到野外。在评估过程中,专家发现老虎的奔跑和狩猎能力明显不如野生老虎,因为缺少运动,它们缺乏狩猎的能力。因此,专家设计了多种锻炼方法,如使用车辆牵引轮胎,并插上鲜肉块来刺激它们奔跑。经过一系列的锻炼,老虎的体力得到了恢复,但能否成功捕猎到鹿仍然是未知数。接着试验是用汽车拖着鹿的尸体吸引老虎奔跑。然而,有些老虎因为在平时的饲养过程中并没有吃过鹿肉,所以对此并不感兴趣。最终只有两三只老虎追着汽车跑,试图抓到鹿。最后有2只年轻的老虎获胜了。但要将鹿的尸体作为奖励喂给获胜的老虎也并不容易,发现它们对着鹿的尸体不知道如何下口,因为以前都是由饲养员将肉切好后喂给它们吃。最终这2只老虎花了数小时才慢慢学会如何吃到鹿肉。 |
环境是影响团队能力与动力的重要因素。看完这部纪录片,我立刻想到了有些本来很有抱负的年轻程序员,也是同样受到环境的影响。公司大部分程序员都只是天天赶工,不注重质量,管理层也习惯了大量的缺陷等到后面测试阶段才暴露,大量返工这种生产方式,如何能希望这些年轻的程序员注重代码质量。跟保护区把饲养的东北虎放归野外一样,但这些新人几个月后也习惯了大家的工作模式,后面要改变习惯便非常难。需要经过艰苦的培训,才能提高大家的竞争力。关键是管理层必须认识到,如果自己也满足于当前的模式、质量水平,对产品质量和不断改进没有要求,那么公司的产品质量将永远无法提高,也难以与其他公司竞争。
针对软件开发,我们这一代继承了之前从60年代以来的各种硬件软件的创新,给予我们继续发展的“根”。
敏捷宣言指出了传统瀑布式开发和传统计划驱动开发的弊端,给我们“翼”,为有能力的团队提供了机会,可以更快速地开发出高质量的产品。
千万不要误以为这过程会一帆风顺,按计划执行就能达到目标。实际肯定会遇到种种无法预料的问题,但只要个人、团队、企业了解当前水平,分析根因,采取纠正措施、持续改善,像第一章丰田方式的习惯4:“持续改善没有停止”—— 龟兔赛跑里的乌龟。
以上简单道理不仅适用于敏捷开发,但回顾周围,有多少人、团队能做到?
即使知道了最佳实践方法,如果没有动力(心态转变),最终只是梦想。
反观我的动力是什么?虽然软件工程发展历史不长(50年代才出现第一台大型计算机),但发展速度惊人。环顾周围,几乎难以找到没有附带软件的产品。 在此过程中,我们受益于软件工程的前辈,包括软件工程学院的 Humphrey先生,发表敏捷宣言的17位敏捷大师等,以及质量改善和组织发展的研究,如 Juran 博士、Lewin 教授、Weisbord 先生等。希望在我有限的能力和时间内,尽可能系统地总结这20多年与软件团队交流中的所见所闻和经验教训,解读敏捷开发最佳实践,方便大家参考。也希望各位同仁可以找到驱动个人或团队改善的动力,沿着前辈的步伐一路前行,持续改善。
参考 References
- Covey, Stephen R. The Seven Habits of Highly Effective People. (1990) Fireside Book
- Isaacson, Walter. Steve Jobs. (2011)
- Juran, Joseph M. Juran's Quality Handbook (5 ed., 1999) McGraw - Hill