复杂适应系统(CAS)和敏捷团队

随着1990年代末和2000年代初敏捷方法的出现,与关注个人相比,重点转移到了导致项目成功交付的团队上。与传统的软件工程实践相比,敏捷方法论被认为是开发软件产品和系统的另一种替代过程。注重强调并将人和团队因素融入软件开发过程中,构成了敏捷开发的核心部分。敏捷组织中强调自组织,自组织团队被认为是以最小的依赖性进行运作的团队。

敏捷团队可以被看作一个复杂适应系统(complex adaptive systems=CAS)。

软件开发本身就是一个复杂自适应系统。它几乎具有CAS的所有基本属性,并且有趣的是,例如,翻阅了各种CAS中的适应性,并考虑了其在软件开发和敏捷性原则中的应用。

对复杂适应系统的深入了解将为敏捷开发的真正根源提供一些启示。掌握了这些知识之后,我们将更容易理解为什么它起作用以及为什么失败。我们将更容易的为做出更好的软件快速的做出决策。

身边的复杂科学

复杂科学其实以及融入到很多科学中。控制论,生态学,社会学,气象学,机器学习,人工智能都在研究复杂性。

蚂蚁建桥

如果把看作一个单体,它非常简单,群落能在没有中央控制的情况下作为一个整体协作完成非常复杂的工作,例如:齐心协力搬运巨大的食物,修建复杂庞大的地下巢穴。 蚂蚁群体可以自我组织产出比任何单个个体产生的结构要复杂得多的结构。

蚂蚁建桥

根据研究表明,蚂蚁能做某种“成本效益分析” 。当建造的桥梁即利用了短路径又没有占用太多工蚁时,它们就会停止搭桥。

大脑神经元的协作

大脑和蚁群一样是由众多简单个体在没有中央控制的情况下呈现出了复杂的行为。 大脑中的“个体” 就是神经元。 每个神经元都很简单,且没有中央控制,而据信人类的感知,智能甚至创造力都是有神经元和其连接共同形成的。

还有一些例子,例如人的免疫系统,人的大脑没有办法控制免疫系统,体内的免疫系统细胞群可以根据其所处的环境改变自身。这种适应是复杂系统的另一个重要特征。

让我们先了解一下复杂适应系统。

复杂适应系统的定义:

定义:复杂系统是由大量组分组成的网络,不存在中央控制,通过简单运作规则产生出复杂的集体行为和复杂的信息处理,并通过学习和进化产生适应性。

复杂适应系统的常见属性:

  • 系统是由相对(整个系统来说)简单的部件组成(通常称为“agent”)
  • 部件间的非线性相互作用没有中央控制
  • “涌现” (Emergent) 行为
    -- 层级组织 (蛋白质->细胞->组织-> 器官->肌体)
    -- 信息处理 (从所处环境获取信息并据此决策自己的行为,一般只在系统级别而非部件级别)
    -- 动力学 (系统的变化)
    -- 进化与学习 (让系统能够更好的适应环境而存活)
CAS 属性 软件开发中的解释
代理 系统组件 开发团队中的人员和其他相关人员(产品所有者,利益相关者)。
反馈 CAS中的每个代理都对信息流做出反应。作为回报,该特工将来将收到的信息受其行为的影响。此反馈可能会增强或削弱代理行为。 开发团队依靠先前的经验(先前的项目,先前的迭代)进行决策。决策影响未来的行动。
涌现 是复杂系统和模式由相对简单的多种交互作用产生的方式。代理的小动作会导致意外的紧急系统行为,并且不可能基于单个代理的行为来预测系统行为。 小错误会堆积起来,并可能导致大问题,甚至根本停止项目。开发团队中的每个人都没有有关该项目的所有信息。人与人之间的沟通与协作会带来意想不到的结果。
非线性 反馈和涌现会导致非线性系统行为。 一个项目成功还是失败?您从一开始就不知道。软件开发的可预测性很难(在许多情况下几乎是不可能的)。因此,您不能预先制定大型计划,也不能预先制定大的设计。非线性是CAS的自然属性,因此所有制定大型计划,制定大的设计都是错误的尝试。
对初始条件的敏感性 也称为蝴蝶效应。即使只有很小的变化,也可能会产生重大影响。同样,它与可预测性背道而驰,您不能预测超过2周的天气。蝴蝶效应是混沌系统的一个特性,因此CAS也是一个混沌系统。 代码中的一个小错误可能会给最终用户带来巨大的问题。关键项目人员在某个特定日期不可用可能会导致重大失误,因为此人不在时做出了错误的决定。我敢打赌,你有现实生活中的例子。
高适应性 CAS非常灵活且适应性强。它可以保持其基本结构和行为,对外部环境的变化做出反应并利用这些变化的优势。 开发团队应应对环境变化(新需求,技术变化,开发人员流失等)。它应该适应新的条件,即使在最坏的情况下也要设法利用。
信息交换 代理交换信息。 人们在开发团队和外部开发团队(利益相关者,产品所有者等)中进行沟通。
合作 CAS中的代理商进行合作以达到目标。 开发团队中的人员合作生产该软件。顺便说一句,博弈论研究的是合作,可以应用于软件开发。这一点Alistair Cockburn已经做到了。
专业化 代理可能具有专业性。强大的CAS具有多种代理类型。这为使用环境功能并使其适应提供了更多机会。 很显然,我们有开发人员、测试人员、Scrum Master、产品负责人、系统管理员等。如果一个团队只由开发人员组成,那么它的效率会比跨职能团队低。
自组织 在复杂的自适应系统中没有命令和控制的层次结构。没有计划或管理,但不断进行重新组织以找到最适合环境的方法。该系统通过涌现和反馈的过程不断进行自我组织。 传统上,软件开发中存在层次结构。有一个负责项目管理的项目经理,有职能经理,有开发副总裁等。在敏捷开发中,没有层次结构。目标是拥有自组织团队。
混乱边缘处于平衡状态的系统没有内部动力,无法使其对环境做出反应,因此会缓慢(或迅速)死亡。处于混沌中的系统会停止作为一个系统的功能。处于最高生产力的状态是在混乱的边缘,那里存在最大的多样性和创造力,从而带来了新的可能性。 很难按顺序创建软件。开发团队将没有足够的创造力来解决突发的复杂问题。这就是为什么重量级方法论不适合软件开发的原因。在混沌中创造软件是不可能的。我们都知道hack & fix会带来哪些结果。理想情况下,我们应该使用相对较轻的方法论(敏捷?一套简单的规则允许混乱的边缘,并赋予创造力、灵活性和成功。

通过以上列表对比,您是否联想到什么?

混沌的边缘(Edge of Chaos)

“混沌的边缘”一词广泛传播并应用于复杂的自适应系统。例如,我们可以提出,进化推动着系统走向混沌边缘(蛋白质->细胞->组织-> 器官->肌体),这是生命起源的原因之一。生活本身就是一件非常有趣和复杂的事情。很可能它既不可能出现在有序状态,也不可能出现在混沌状态。如果有一个稳定的基础,但又有变化的可能性,生命就会存在。

这个“边缘”介于随机性和结构性之间, 却是能产生最大学习效果的所在,能为创新构建最佳的环境。要在“边缘”保持平衡,需要所有人能在一个更加杂乱却激动人心的领域里工作,在这个领域中,不确定性被大家接受,而解决方案可能是转瞬即逝的。这不是一个安全或舒适的所在,却能让组织创造未来。重要的问题并不是如何适应快速变化的环境,而是如何足够快的去适应。

《EDGE 价值驱动的数字化转型》 by Thoughtworks

在软件开发中,复杂的流程和臃肿的规则会阻碍创造力,团队被命令-控制。 另外,如果没有了流程和规则就会导致混乱。开发团队没有办法完成任何有价值的事情,这就是我们制造bug和修复bug的过程。

混乱的边缘是开发团队以最高效率工作的状态。
我们回头看一下CAS应用于混乱的边缘的属性,这些属性可能导致开发团队实现超高生产率:

  1. 反馈
  2. 信息交换
  3. 合作
  4. 自组织
  5. 高适应性

这些因素也是我们在倡导的敏捷(scrum)中的基础。
我们可以轻松地定义阻止高生产率的条件:

  • 没有反馈 在瀑布过程中,反馈被延迟,有时甚至不存在。团队无法学习和适应。效率低。
  • 信息交流不畅 大型的团队,分散的团队,庞大的职能部门,人际关系问题-所有这些都阻碍了信息交换。
  • 没有合作 公司内部或开发团队内部的政治游戏,愚蠢的公司规则,错误的激励方案,由于个人喜好而引起的沟通问题-几乎是导致合作几乎不可能的一些因素。
    -- 自组织的可能性和较弱的适应性 复杂的公司规则,严格的层次结构,命令和控制管理,没有充分授权所以达不到自组织。

所以我们在转型中,应该关注管理层,从CXO , PM 到Scrum Master,他们应该消除上面的障碍,让团队踏入混沌的边缘。

复杂系统中的简单规则

许多复杂的系统都基于简单的规则。一组简单的规则会导致复杂的,智能的行为。
以下是复杂系统理论中的经典例子。

鱼群的简单规则

请观看: 鱼群为什么能完美统一畅游-复杂系统的简单规则
鱼群没有领导, 每个都是个体,当聚集了足够遵守正确规则的时,鱼群形成。
每条鱼都遵循2个简单的原则:

  1. 相互跟紧但不能靠的太近
  2. 不停地游

谁在指挥鸟群

成百上千只的鸟成群在空中飞翔,仿佛形成了一个巨大的个体

在19世纪30年代, 英国鸟类学家Edmundd Selous 用了“通灵”(Thoughts-Transference) 这个术语来解释鸟群令人惊异的协调能力,这也许是当时很时髦的“科学词汇”吧。 但限于历史条件,他对运动群体中的鸟之间如何交流,信息如何在群体中传递毫无所知。

在此前,程序员编写鸟群的运动程序时,程序中都已经规定好了每只鸟的运动轨, 程序员其实是鸟群的中心指挥者。而Reynolds在1987年发表的一篇文章中发明了一种“自组织”的算法,根据这种方法,鸟群中的每只鸟只需获取自己局部的环境的信息, 并根据这些信息自行决定自己下个时刻的运动状态。

具体说就是每只鸟每个时刻都要遵守如下三条规则:

1、 避免与附近的其它成员碰撞。
2、飞行方向与附近邻居的平均飞行方向一致。
3、不要落单。

这种算法只要求单个个体能够分析自己附近的局部环境, 符合动物因生理条件的限制而只能处理有限信息的常识。这个算法的最大特点是整个的运动群体不再有中心的指挥者,每个群体成员根据自己的局部环境决定自己的运动状态,进而决定整个群体的运动状态。

敏捷中的原则

复杂的流程和原则会导致一些机械的行为。 敏捷方法很简单,其实《敏捷宣言》和《敏捷软件开发12原则》 就是抽象出来的简单原则。

Scrum也是一样非常轻量级的框架, 3-3-5-5,但是要真正实现Scrum也是很困难。


参考:
Agile teams as CAS

Edge of Chaos and Hyper Productive Software Development Teams

混沌、复杂适应系统和敏捷
《失控》 凯文·凯利

你可能感兴趣的:(复杂适应系统(CAS)和敏捷团队)