【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

敏捷实践背后的“真实期权”

  • 2007-06-12
  • 本文字数:6570 字

    阅读完需:约 22 分钟

不管人们是否已经意识到,“选择的自由”是许多敏捷实践背后的原则,我们把这个原则叫做“真实期权(Real Options)”。对真实期权的理解使我们能够发展和完善新的敏捷实践,并将敏捷引领到新的方向。真实期权也帮助我们理解为什么有人会坚持某些实践。

用通常的话来说,真实期权说的是“推迟决策到职责要求的最后一刻”,这是精益软件(Lean Software)方法的一条明确原则。通过避免过早的承诺,你为后面的选择赢得了更多的灵活性。后面我们将给出更加正式的定义。

从真实期权的角度看敏捷

真实期权在敏捷实践中无处不在。为了阐明这一点,让我们看看一些敏捷实践中是如何尽量推迟承诺的。下面只是几个例子。当你真正意识到真实期权之后,你自己会发现更多的实例。

行为驱动开发(Behaviour Driven Development)和测试驱动开发(Test Driven Development)提供了许多期权,特别是“改变软件同时知道何时软件已被破坏的期权”。如果没有测试驱动开发,也就没有 _ 重构 _ 可言。换言之,测试驱动开发去掉了对设计的承诺,对设计的选择可被推迟到编码开始之后。更妙的是,测试驱动开发让开发者明确知道他们什么时候算是完成了,而不必事先推断编程工作何时完成。测试驱动开发的过程完全不需要决策,只要在所有测试都亮绿灯的时候停止编码就好了。类似地,模拟对象(mock objects)让开发者推迟决定一个类如何实现,直到他们对这个类的需求有了更多了解之后。测试驱动开发还建立了一个很好的递归式实现模式。

极限编程(XP)和 Scrum 推迟对要开发的内容的决策到编码开始之前的一刻。这使团队能够汇集在最后时刻才收集到的信息,比如新的客户需求。Scrum Backlog 提供的论坛让任何对功能上的想法都可以被记录下来,而不要求立刻承诺去实现这些想法

在 Chris 正在进行的项目中,开发活动按照客户需求来排列优先次序。实际上,销售人员通过确定各项功能对客户的相对重要性来推动优先排序的过程。开发团队直到客户要求一项功能之后才会去实现它。“策略”会议几个月之前就已经被取消了,因为这些会议只不过是开发团队猜测客户会喜欢哪些功能的水晶球。现在开发团队等着看客户到底要求些什么

通过推迟承诺要实现哪些功能,团队得以减少将客户要求的新功能推出市场的时间。当客户要求一项功能时,开发团队可以自主行动,因为他们不再被束缚在开发不需要的功能之上。短迭代和快速的回归测试周期使之成为可能。

结对(Pairing)提供的期权是系统的任何部分都有不止一个开发者对其有深入的了解。这减低了“车祸数字(trunk number)”(又称作“彩票数字”)风险和“关键人物”依赖。(车祸数字指的是,如果项目中一定数量的人都被大卡车撞了,使得项目陷入严重困难的最低人数 [1]。通过扩散对系统的知识,即使团队中的任何人赢了彩票辞职不干了,项目也不会陷入危险。)

那么什么是真实期权

真实期权是使人们能作出在当前环境下的最优决策的一种方法。这听起来很难,但本质上它只是对当我们面对如何作出决策时的一个不同视角。真实期权有两面,一面是数学的,一面是心理学的。真实期权的数学方面,根据金融期权理论(Financial Option Theory),给我们提供了一个最优决策过程 [2]。关于不确定性和决策的心理学研究(根据神经语言程序学,Neuro-Linguistic Programming [3][4] 和认知行为,Cognitive Behavioural 理论)告诉我们为什么人们不遵循最优决策过程而结果作出不理性的决定。

金融期权包括卖出期权、股票和股份。为了给这些期权定价和控制风险,已经发展出了非常多的数学工具。“真实期权”这个术语是我们创造出来,用来描述我们运用金融期权的数学来帮助我们在真实世界中作出最优决策……真实期权是真实世界的决策。

现有的许多著作都解释了我们如何运用 Black Scholes 公式来给真实期权定价。Fisher Black 和 Myron Scholes 以及 Robert Merton 是获得过诺贝尔奖的经济学家,他们发明了给金融期权定价的公式。不幸的是,这些著作中的大部分当应用到真实期权的时候都是错的。我们不能用著名的 Black Scholes 方程给真实期权定价。虽然推导 Black Scholes 方程或者证明我们刚才的结论需要金融数学的博士或者硕士学位,不过运用这些结论并不需要了解数学。

关于期权,这些金融期权数学能告诉我们的“只有”:

  1. 期权有价。
  2. 期权会过期。
  3. 绝不提早决定,除非你知道原因。

相当简单,这些数学告诉我们不要作出承诺直到最后一分钟,除非我们明确知道为什么要提前作出决定。有点耳熟吧?

“真实期权”决策过程并不新鲜。Preston Smith 是第一个说出“直到最后关头才作承诺”这句话的人之一[5]。虽然Preston 的观点是根据大量的观察而得出的,而真实期权是根据金融数学。

在2006 年夏天,我们举行了一系列关于真实期权的会议。其中一个与会者,Iain Brocklehurst,JP Morgan 公司的一名资深IT 经理说:“这只是包装起来的常识。”虽然真实期权有其数学根源,关注决策过程的心理学方面可能比其数学方面更加重要。不理解心理学的话,大多数实现一个新的决策过程的尝试都将失败。

选择

对于任何将要作出的决策,都可以分成三类,称之为“正确的决策”,“错误的决策”和“没有决策”。大多数人都会认为只有两类;要么你是对的要么是错的。考虑到通常我们并不知道哪些是对的而哪些又是错的决策,最优的决策实际上是“没有决策”,这将推迟承诺直到我们获得了更多的信息来作出一个有所根据的更好的决策 。

但是,当我们观察大多数人的行为时,我们发现出于对不确定性的厌恶,人们倾向于及早决定。真实期权对付这种对不确定性的厌恶的办法是,定义应该作出决定的确切日期或必须满足的条件。相较于“还不行”,真实期权方法说的是“当……时作出决定”。这让人们得以确定决策何时将会作出,从而对推迟决策更加安心。推迟承诺让决策者仍然握有选择权因而更具灵活性。这让他们能够运用他们的期权去管理风险/不确定性。

真实期权开始的时候会感觉有些不自然。就像滑雪下山时身体前倾,或者骑马从高处跳下时身体后仰。有些人能够自然地适应。其他人则需要教练、时间和练习。听上去熟悉吧?有点像敏捷对不?也许这些对不确定性的“不自然的”感觉,正是有些人对敏捷如此反感的原因之一。

与其说决策,不如说真实期权实际上是关于承诺的。很多时候人们作出的决定变成了对某个想法的情感上的约束。他们没有意识到他们其实是可以改变想法的。

同意跟一个朋友出去是一项期权还是一项承诺?大多数人会认为是承诺,因为他们跟他们的朋友达成了一项协定,但实际上这是一项期权。如果刚好有人向你提供更高的价值(比如你的梦中人请你一起去U2演唱会的后台),你就会打电话给你的朋友重新约时间。协定是期权。

金融期权有一个契约上规定的终止日(期权结束或到期的时间)。真实期权的终止日是条件性的而非契约性的。真实期权最有力的一面,是你可以延后期权的终止日,从而获得更多的时间去发现最优方案。为推迟承诺买单是有价值的。

商业实例

这些实践都是正在实际使用中的。就像我们之前说的一样,没什么新鲜的。有三家著名的公司已经成功地应用真实期权:丰田、微软和谷歌。

丰田跟期权的关系在Mary 和Tom Poppendieck 的《精益软件开发》 [6] 一书中已经阐述得很清楚。丰田有名的是,他们一直等到客户买下一辆车之后才开始生产这辆车。这样够推迟承诺的了吧?

微软跟真实期权的关系也是众所周知的,比如微软在展销会上的摊位就“看起来像是杂货店”。当其他公司将他们全部家当都赌在单一产品或策略上时,微软则处处下注,这样即使它输掉了操作系统的阵地,仍然能够赢得办公自动化的战役。微软是等、等等、再等等看策略的终极大师。想想看 Internet Explorer 的情形,微软一直等到互联网作为一项技术脱颖而出之后才出手。我们期待得到答案的一个问题是:“当微软面对这一危机的时候考虑过多少个开发团队和方案?”到底它是采纳传统的“成本最优化的”最佳方案还是在斟酌许多替代方案?我们觉得答案是相当明显的。

谷歌是最早的信息主义者(Informationalist)[7] 公司之一。它不与其客户发生利益冲突,而是与之合作。没有随机的广告条,而是你真正可能感兴趣的产品和服务广告。

敏捷的未来

要毁掉别人的期权常常太容易。因此,当参与者彼此合作时真实期权才能得到最有效的发挥。这跟我们隐藏自己真实意图的普遍做法相抵触。不过,我们可以从谷歌的方法中学到一些东西。毕竟,如果我不知道你的目标是什么,我怎么去帮助你呢……也许这应该成为敏捷管理实践的出发点。

我们需要学习如何倾听,这样我们才能帮助别人达到他们的目标。讽刺的是,“倾听”这个词并没有出现在 APLN 的《互相依赖的宣言》之中。领导者必须提供和创造期权给一同工作的人们,而不是替他们作决定。

如前所述,真实期权是让一些实践得以成立的一组原则,它也可以被用来产生新的实践。目前敏捷需要发展出符合敏捷心态的(除项目管理之外)领导实践和管理实践,以走出 IT 部门,迈入企业的其他部门之中。

为了用一些例子来说明真实期权如何运作,让我们来看看决策过程和资源管理。

决策过程

最优决策过程如下所示:

  • 对每项决策,确定可供选择的期权。
  • 确定作出决策的最终点。即作出承诺前要满足的条件。这可通过先确定期权实现的截止时间,然后回推到决策点(即生产周期, Takt Time )来计算得出。第一项决策在第一项期权届满时作出。
  • 在终止日之前,继续寻找新的期权。
  • 尝试推迟决策时间。通常这是没有成本或者成本非常低的。要做到这点,我们必须能够尽可能快地实现期权。在淡季,则致力于提升过程的速度(就像丰田在他们的生产计划中做的那样)。
  • 认识到成本最优化并不等于收益最优化或者风险降低。有时候投资在多个期权上面,即便成本可能稍微增加,也是值得的。毕竟,期权有价(问微软就知道了)。
  • 等等再做决定,再等等……再等等……直到条件都对了为止。
  • 当你需要作出承诺并开始行动……做得越快越好。而且你可以充满自信地去进行,因为你知道你的决定已经是尽可能最好的有根据的决定了。

在最近我参加的一次会议中,我们讨论了对“B 计划”的需要。我们有一个“A 计划”。对是否真的需要“B 计划”则有所争论。对“A 计划”的成功率有 99%、50% 等等不同的说法。我运用了“真实期权”,然后建议我们首先确定何时应该切换到“B 计划”。我们还确认了要使“B 计划”成为一项期权所需的额外的前期投入。结果显示这件十分钟的工作是必须的,不过这件工作需要花上好几天才能完成,因为涉及的步骤和部门太多。我们动态地设立“B 计划”期权。更进一步,我们勾勒出“B 计划”的粗略细节。一旦“A 计划”失败,就是我们切换到“B 计划”的时刻,每个人都清楚他们需要做什么。这个切换过程是很平滑的。没有冒险的紧急任务,也没有混乱的后果,“B 计划”进行得如此平滑,以至于许多人都没有意识到我们曾在最后一分钟改换了跑道。 —— Chris Matts

从真实期权学到的关键一课是,决定一个想法是否一个好想法的正确时刻是在你尝试它之后,而不是在你倾听它之前。

资源管理

当运用到资源管理上时,真实期权告诉你应该从最没有经验的团队成员开始配置资源。最有经验的团队成员拥有最多的期权(最多的技能等等),他们应该最后被分配。这意味着你最有经验的员工可以被配置去应对显露出来的问题。在没有被分配时,他们可以与资历较浅的成员结对来训练他们(创造期权)。这确保他们能够保持好的实践,并时时了解程序的架构。这可以是项目经理或者开发领导的工作。他们应该学会偷懒——阅读 Tom DeMarco 的《松弛》 [8] 会是一个好的开始。

组织内的行政人员应该采用基于期权的投资策略,而不是对项目预算的承诺。行政人员应该推迟对全额投资的承诺,直到他们看到初始投资的成功或者商业实例的成效。投资应该根据成功的标准分别投给每次交付。成功与否不应根据开发项目而应该根据商业项目来确定。即是否提升了商业价值。即使在项目中增加一项功能使得预算翻倍,只要收益也提升得足够高,项目仍然是成功的。类似地,即使是只花了一半预算的完美项目,如果它不能产生足够的收益,也应该被取消。应该允许行政人员增加对进行得很好的项目的投资。要做到这一点,他们需要由于按照真实期权进行资源管理而提升了的开发人员的流动性。

最后,IT 相关公司里的行政人员应该考虑采纳客户驱动的开发,由真正的客户来选择功能和优先次序(即客户来自于公司外部,而不是像极限编程那种属于项目团队一部分的客户)。要做到这一点,销售和 IT 开发部门应该融为一体。销售人员给客户提供的应该是一份功能(期权)的价目表,而不仅仅是下一版本的功能列表。销售人员提供菜单上的所有东西,客户也可以选择不在菜单上的东西。要给项目引入新功能,整个团队先对功能进行头脑风暴,为确定功能的生产周期(Takt Time)做刚好足够的分析,并确定主要的风险。销售团队将得到这份对生产周期的估计,以便提供给客户。如果客户不想要这些功能,就不开发。如果客户想要,就开发。根据 Standish Chaos 的报告《很少或者从来不用》 [9],通过这种方式你可以避免 67% 的功能的开发工作。

这是我们在当前项目中采用的方法。销售人员很爱它。与其向客户推销他们不想要的功能,销售人员可以征询客户的需要然后满足他们。听起来熟悉吧?(如果这种方式对谷歌行得通……)我们发现销售团队已经开始邀请项目团队加入他们跟客户的会议,以便能够更详细地解释这种方式。

还有很多实践正等着我们去发掘……

提醒一句。真实期权是一种积极的风险管理策略。持续不断地监控你的期权,确保它们不被破坏是非常必要的。而且,它是一个信息饥渴的过程,因为它要求执行者主动去寻找信息。还要记住什么都不做也是一项选择。真实期权并不是给拖延找借口。

结论

真实期权是敏捷背后的原则。许多敏捷实践都尽量推迟决策。成功企业如丰田和谷歌都运用真实期权并从中得益。真实期权让我们能够把握敏捷心态并将之投射到以前没有进入过的领域。

最后的想法:去年 Chris 在伦敦一家酒吧里遇到一位朋友。跟很多人不一样,她马上就“了”真实期权。在之后的十分钟里,她找出了许多真实期权的内涵。(她花十分钟想到的东西花了我们六个月。)然后她沉默了。在几分钟的沉默之后,她说:“这些跟创造一个更好的工作环境有关。”她是对的,但还不止如此。这是我们实践真实期权的原因。不是因为它会让我们富裕,虽然它会,而是因为它是有趣的。

祝君愉快。:-)

参考资料

  1. http://c2.com/cgi/wiki?TruckNumberFixed
  2. http://en.wikipedia.org/wiki/Real_option
  3. “NLP Unplugged”, Gary Sage & David Hagan,
  4. "User Manual for the Brain,’ Bodenhammer, Bob G. & Hall, L. Michael
  5. “Flexible Product Development” Smith, Preston G.; (Sept 2007)
  6. “Lean Software Development”, Poppendieck, Tom and Mary; Addison-Wesley Professional (May 2003)
  7. 信息主义(Informationalism):“一种以由于微电子、软件和基因工程领域的革命而导致的人类处理信息和相互沟通的能力的提升为基础的技术范型。”出自 Castells, M. 《Informationalism, Networks, and the Network Society: A Theoretical Blueprint.》。另请参见 http://en.wikipedia.org/wiki/Netocracy
  8. “Slack”, De Marco, Tom; Broadway (November 2001)
  9. 此 PDF 文档的第 5 页可看到该图玫瑰照片归功于 Ed Parcell。

关于作者

Chris Matts 是一名项目经理和商业分析师,他有十年以上的为投资银行包括 JP Morgan Chase、BNP Paribas 和 Dresdner Kleinwort Wasserstein 开发商业和风险系统的经验。Chris 作为一名前程序员,拥有商业和金融数学的硕士学位以及微电子及软件工程的 MEng。Chris 目前是一项产品的程序经理,在其间他运用真实期权和敏捷技术来使销售和项目开发团队融为一体。

Olav Maassen 是 QNH 公司的总工程师,荷兰人,有九年的金融机构项目的 IT 经验。他的主要兴趣是让人们工作得有效率。

目前 Chris 和 Olav 正合作一本书,是关于真实期权及其运作的。

查看英文原文:"Real Options" Underlie Agile Practices - - - - - -

译者简介:郭晓刚是一名独立开发者。在经过了 10 年修练之后,总算是懂得一点编程了。目前主要关注以 SpringFramework 和 Hibernate 为主干的 Java Stack 和 Adobe Flex。Microsoft Office 的插件开发也是关心的方向之一。同时也在尽力做一些技术翻译工作,把知识分享给更多的人。参与 InfoQ 中文站内容建设,请邮件至 china-editorial@infoq.com

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2007-06-12 20:021419
用户头像

发布了 225 篇内容, 共 60.9 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

深入理解Java String类

Java 程序员 后端

源码分析Dubbo 泛化调用与泛化实现原理

Java 程序员 后端

牛!阿里巴巴首推的《Java进阶必备宝典》,从理论到实战

Java 程序员 后端

用好这几个技巧,解决Maven-Jar包冲突易如反掌

Java 程序员 后端

牛批!Java集合框架面试题精华集(2020最新版),附PDF版

Java 程序员 后端

深入学习Kafka数据消费大致流程(如何创建并使用Kafka消费者)

Java 程序员 后端

渣本Java开发小伙如何一步步成为架构师?回首看来,每一步都不容易

Java 程序员 后端

生产环境JVM内存溢出案例分析

Java 程序员 后端

消息中间件

Java 程序员 后端

深入理解Java类加载器(一):Java类加载原理解析

Java 程序员 后端

深入理解MySQL索引

Java 程序员 后端

漫谈一条SQL语句的一生

Java 程序员 后端

深入理解JAVA虚拟机原理之Dalvik虚拟机(三)

Java 程序员 后端

玩转互联网公司面试!快手、爱奇艺、小红书等14家互联网企业面经分享!

Java 程序员 后端

用 Java 爬美女图片,这个厉害了!

Java 程序员 后端

测试用例的设计方法及案例

Java 程序员 后端

清幽现云山,虚静出内功。阿里《Java开发手册》最新嵩山版发布

Java 程序员 后端

渣本Java开发小伙如何一步步成为架构师?回首看来,每一步都不容易(1)

Java 程序员 后端

源码分析ElasticJob选主实现原理

Java 程序员 后端

牛皮!华为工程师总结的Java生态知识体系面试必看笔记,太秀了

Java 程序员 后端

消息发送常见错误与解决方案

Java 程序员 后端

深入理解什么是端口(port)

Java 程序员 后端

牛逼,这2招,彻底让你和 null say 拜拜

Java 程序员 后端

独角兽余额宝(Java现场面试48题):性能调优+索引+Mysql+缓存

Java 程序员 后端

浅谈(chain of responsibility)责任链模式

Java 程序员 后端

淦!阿里限产新一代微服务+K8S+容器进阶笔记,实战理论满满

Java 程序员 后端

深入浅出MySQL - MyISAM有趣的那些“锁”事儿

Java 程序员 后端

深入理解JAVA虚拟机原理之内存分配策略(二)

Java 程序员 后端

源码分析Dubbo服务消费端启动流程

Java 程序员 后端

爱了,在GitHub超火的Java程序性能优化实战笔记,实在太香!

Java 程序员 后端

用时17天完成4面阿里,已斩获offer,总结下个人面经心得体会

Java 程序员 后端

敏捷实践背后的“真实期权”_研发效能_Olav Maassen_InfoQ精选文章