《精益开发与看板方法》—1-3-3 尽量延迟决策(Decide as late as possible)
1-3-3 尽量延迟决策(Decide as late as possible)
对流程而言:
等到真正需要做改变的时候再做决策,
提前的变更只会增加无形的成本。
对人而言:
等到做决策所需要的信息较充分后,
再来做判断会比较正确。
适当等待是做出好决策时不可缺少的行为
敏捷开发为了处理需求的不断变更,鼓励把决策的下达延到最后可以容忍的时间点再做决定。例如,打印机厂商因出货国家的电源种类不同所产生不同的库存种类以至于无法善用库存而伤透脑筋,如果采用最利于生产线的方式,便是根据运往地点直接配备相应的电源线。但如果采用决策的下达延到最后的概念,就是等货到了该国之后再由销售门市依客户的选择把电源线加上去,就可以避开这个复杂的出货问题了。
对个人而言,延迟决策是为了避免在早期信息还不够清楚的状况下就迅速做出决定或是进行评估,这是一种浪费,因为可能有很多东西之后还需要修改或是重做。
并行开发(Concurrent Software Development)
为了同步我们可能需要等待,而等待所换来的则是“顺序性”的同步工作。工作原本就可以采用异步、并行的方式完成,我们之所以没有采用是因为太复杂了,就为了让工作可以在同步与异步之间做切换,仅仅在处理那种复杂机制所损失掉的力量可能就会大过并行工作所能取得的收获!但那是多年前的说法,多核 CPU 创造了新的并行开发程序语法,而简易的语法造就了更快速的运算效能。
敏捷开发采用短周期迭代的方式来降低风险,就如同异步的语法也仅仅是在小范围的相同理论上运作一般,虽然多任务碍事(Multitasking is evil),但在受控制的小范围内实施却是利多于弊的。因此决策的时间往往需要参考并行工作的结果,所以尽量将决策延迟到信息较明确的状态再下达是一种较高效的做法。
最后负责时刻
最后负责时刻(The last Responsible Moment,LRM)并不等于尽量延迟决策。这是丰田精神转换到软件开发上较有争议的一个地方,“尽量延迟决策”针对生产在线的决策关键时间有相当积极的意义,并无争议,但对应到“最后负责时刻”这个并不是那么正面的用词,就让人十分迷惑。
最后负责时刻是指,当你再不做出“决策时,不做决策的成本就会高于做出决策的成本时,就称之为“最后负责时刻”。
很明显,最后负责时刻是针对在工作上可以获得较高的灵活性。这个词汇最初是由精益建筑协会(www.leanstruction.org)所提出,并在敏捷开发上经常被引用来处理尚不明确的需求,建议决策宜延迟到最后一刻,也就是状态较明朗的时候再做决策。延迟时间,让决策者有较高的灵活性处理其他事情。
谈决策:先深入或是先广度
在处理人工智能的程序里,总是会遇到这种应该先深入问题的探讨还是先广泛搜集更多类似问题再逐一深入探讨的决策性问题。举例子来说,假设我们要寻找一把放在大楼某个房间里头的***,只知道它被放在一栋四层楼高、每层有 5 个房间的建筑里,试问你要怎么寻找它?是先把一层楼都找完之后再换楼层呢?还是找一个房间后就换一个楼层?如何设计这个逻辑决策呢?
图1-5 处理人工智能的程序思考
深度优先(Depth-First)的做法就好比将一个楼层都找完再换另一个楼层,它的优点是简单,你可以很早就下定决策,接着照着做就是了,它可以迅速降低问题的复杂性。缺点是它会过早缩小各种可能性的研究,例如先探讨每个楼层会有几个楼梯?每隔几个房间就有一个楼梯之类的解题参考。
广度优先(Breadth-First)则会延迟决策,当搜寻到有多个楼梯在楼层与楼层之间时,就有机会再拟定新的寻找策略。初学者通常会采用先纵深的方式,等到熟悉后有经验后再做其他尝试。先纵深或是先广度并没有绝对的对或错,经过学习后的再进化才是重点。但不论采用哪一种策略,先搜集相关的专业知识都是不可缺少的(参考上面找枪的例子,设计者通常都会留下一些蛛丝马迹,让有经验的搜寻者做判断的依据,目的当然是让用户能够迅速通过学习来累积经验,期待下一次会有更好的表现)。
直觉式的决策
最后我们来谈一下相对于延迟决策的快速决策:直觉式的决策,这是一种类似“急诊室的分类法”,先做简易分类后立刻做决策(括号中是处理等候的时间):
l 第一级:复苏急救(须立即急救;例如车祸大量出血、意识不清)
l 第二级:危急(10 分钟;例如车祸出血,但生命稳定)
l 第三级:紧急(30 分钟;例如轻度呼吸窘迫、呼吸困难)
l 第四级:次紧急(60 分钟)
l 第五级:非紧急(120 分钟)
TIPS
进入急诊室后,请向医护人员询问您属于第几级伤病?需要等候多久?
通常,救护人员和消防人员很少做决策,他们直觉地依据守则(通常是经验)走,而非理性决策过程!理性决策会先做分解问题、移除上下文、应用分析技术、进行讨论等步骤,这种理性的过程会在有意无意间忽视人们的经验,而经验正是敏捷开发最有利的参考。如果能依靠理性分析指出什么地方存在不一致,什么地方忽略了关键因素,固然很好,但他远远不如直觉来得有用,因为理性分析移除了上下文之间的关系,所以不太可能观察到严重的失误,这就是经验最有价值的地方。培养经验最有效的方式就是通过阅读,把别人的经验变成自己的知识。
- 点赞
- 收藏
- 关注作者
评论(0)