写点什么

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

  • 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

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2007-06-12 20:021409
用户头像

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

关注

评论

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

[译]探索 Go 中 io/fs 包以提高测试性能和可测试性

黑客不够黑

golang 测试 io/fs

电脑风扇控制软件:Macs Fan Control Pro中文激活版

真大的脸盆

Mac Mac 软件 电脑风扇控制 风扇转速控制

SpringBoot快速搭建、自动流程进阶、装配机制、功能扩展点详解

三十而立

Java 程序员 IT

复杂度分析:如何分析、统计算法的执行效率和资源消耗

京东科技开发者

数据结构和算法 算法和数据结构 复杂度分析 空间复杂度 企业号 3 月 PK 榜

面试滴滴、中信字节跳动等10+公司面经+面试题及答案分享(java岗)

三十而立

KaiwuDB 荣获第三届 ISIG 产业智能大会年度最佳技术创新奖

KaiwuDB

技术创新 KaiwuDB AIoT数据库

如何将营销模板以小程序的形式上架至App?

FinFish

小程序容器 小程序技术 营销模板

如何自动化测试你的接口?—— Rest Assured

JAVA旭阳

Java springboot

PopupWindow(悬浮框)的基本使用

攻城狮Wayne

android AlertDialog PopupWindow

PyTorch 深度学习实战 |用TensorFlow训练神经网络

TiAmo

神经网络 tensorflow MNIST

深扒RocketMQ源码之后,我找出了RocketMQ消息重复消费的7种原因

程序员小毕

程序员 RocketMQ 后端 架构师 消息中间件

dubbo Triple 统一参数验证

昵称不能为null

dubbo triple协议 参数验证

朴素系统优化思维的实践

京东科技开发者

方案 构架 系统优化

Spring Boot 如何防护 XSS + SQL 注入攻击 ?终于懂了!

Java你猿哥

sql Spring Boot 后端 ssm XSS

如何防止订单重复支付?

采菊东篱下

Java 编程

聊聊To B企业的客户成功价值

老张

交付 客户成功

架构实战 - 模块 9 毕业项目

mm

#架构实战营

深入了解 JavaScript 内存泄漏

京东科技开发者

JavaScript 前端 内存 计算

技术领导力之路 - 安全感

阿里技术

技术成长

精准测试之分布式调用链底层逻辑

京东科技开发者

分布式 精准测试 调用链 Spark 源码 企业号 3 月 PK 榜

无处不在的边缘网络感知

阿里云视频云

云计算 边缘云 边缘网络

阿里菜鸟国际Java研发面经(三面+总结):JVM+架构+MySQL+Redis等

三十而立

面试 java

Go 第三方 log 库之 logrus 使用

江湖十年

后端 日志 Go 语言

如此丝滑的按钮交互效果

南城FE

css3 前端 设计 动画 交互

一种异步延迟队列的实现方式

京东科技开发者

架构 软件架构 企业号 3 月 PK 榜 延迟处理

OMG!Go语言设计模式,这样用简直不要太爽!

博文视点Broadview

组装式应用新趋势:小程序技术科提高软件开发效率

FinFish

小程序容器 组装式应用 小程序技术

一个基于序列的弱监督视觉信息抽取学习框架

合合技术团队

人工智能 计算机视觉 OCR

浪潮 KaiwuDB x 河工大 | 推进能源行业数字化转型建设

KaiwuDB

解决方案 数字能源 KaiwuDB

程序员标配Springboot!终于有人把SpringBoot讲的通俗易懂了

三十而立

SpringCloud 整合Gateway服务网关

Java你猿哥

spring Spring Cloud Spring Boot ssm

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