相信很多在软件项目中的人都会有一种体会:“虽然我们想把质量做好,但是时间太紧,来不及。” “一开始我们定了很高的完成标准(DoD),但是后来发现无法达到,是不是要求太高了,那就让我们先降低一点点标准吧,看看是不是能做到。” 这些似乎有道理的原因,让人觉得目标很好,不过要实现可以逐步来,先从能达到的来,但是最后发现往往总是无法达到最初的目标了。这是为什么呢?
最近在学习用系统思考的方式来观察和探究一些问题的根源,正好拿这个问题来练习一下。欢迎小伙伴们一起来探讨。
系统思考
下图是两个调节回路图,所以我用大写的 “B” 来表示。下面就让我们解读一下下面的系统图:
-
左侧图一:展示了我们为实现交付标准做了些什么。这里的“实际差距”说的是交付质量和目标质量的差距,也就是项目中客户的原本期待交付的质量,或者产品开发一开始确定的完成标准(DoD)。差距越大,团队需要采取的工程改进力度就会越大,这也就会带来更好的工程实践的效果。从而提高了交付质量。如果一切顺利,更好的工程实践效果会让实际差距降低。而实际情况可以看到,效能改进力度加大,并不能马上带来工程实践的效果。因为这里有一个延迟(红色的等号是延迟响应的符号)。事实也确实如此,例如你引入TDD,或者CI/CD这类工程实践之后。并不能马上就看到效果,而是需要一段时间的积累,才能看到效果。也就是说这个平衡矩阵期待能够带来差距减少的效果,但是必须忍受一定时间的延迟。不过一旦达到了,那么自然这个平衡回路会自动调整回来。
-
右侧图二:展示了是什么驱动我们调整了交付标准。当我们实际的交付质量由于各种原因无法达到交付目标的时候,高标准会导致差距拉大,随之而来的是压力。这里的压力可以是因为项目延期带来的客户方压力,也可能是延期交付带来的市场竞争压力,还可能是修改问题而需要的更多的人员需求带来的压力。这些压力会让我们不得不调整交付标准,降低目标,以减轻压力。调低了标准,那么实际的差距就会缩短,压力自然会减轻。那么调节回路在这里期待的是,因为压力缓解后,能够重新提高标准回到原来的位置。而实际却往往是标准只会一再下降而不会上升,原因在下面图三。(注意:图二中没有延迟响应。可以看到降低标准能够马上缓解压力,只不过这种缓解属于自欺欺人。)
|:--|:--|
| 图一 | 图二|
图三
- 上方图三:既然两个调节回路都有调节功能,如果能够按照正常的演进,应该可以恢复到正常的标准,而实际情况会是怎样的呢?上图展示了两个调节回路和在一起,组成了一个整体的增强回路。可以看一下红色的8字形箭头。会发现因为图一中有一处延迟,导致虽然效能改进的力度足够大,但是工程实践的效果并不能够立竿见影,导致实际差距并没有立即减少。而这个时候,右侧的调节回路开始发挥作用,压力减少,带来左侧的效能改进的力度降低,这也会最终影响到交付质量降低,从而又刺激实际差距的拉大,进而导致压力增加,而这种压力,又进一步刺激右侧的调节回路会不断调低交付标准。最终形成一个恶性循环,导致我们的交付标准越来越低。
综合上面的分析,最终的一个全景图如下:
全景联想
让我们联想一下周围发生的事情,是否还有类似这种情况的事情发生?例如:
- 健身计划,一开始定的目标每周保证3天,每次至少30分钟。而随着各种原因导致无法实现,退而求其次的调整我们的目标,每周一次,每次10分钟,最后还是一次都做不了了。
- 迭代开发中,我们期待每次迭代都能高质量交付,所以DoD中包含了各个方面,包括安全、性能、响应式页面等等。但随着时间推移,团队会提出各种各样的理由,例如:时间紧,安全和性能能否在最终Release前进行集中调整?最终导致我们的完成标准(DoD)越来越低。而最后集中处理的那一次,往往也会因为积重难返而无法解决所有问题,最后只能解决一部分问题。
感受
《思考快与慢》中说到,人脑的条件反射, 遇到危险或压力的时候,两种动机:要么打,要么逃。当目标与现状存在差距时,产生的压力是人们不愿意接受的。因此,人们就会想办法来纾解压力,办法有两种:要么改变现状,逐渐趋向目标;要么降低目标来缓解压力。彼得·圣吉把前一种力称为“创造性张力”,把后一种力称为“情绪性张力”。实际中,我们往往会选择情绪性张力,因为它能够立即缓解压力,而创造性张力则需要时间,需要积累,需要耐心地等待两边到质变。“情绪性张力”的缓解压力无需等待的特性,成为了我们大多数人的首选,是不是有点像自我安慰的感觉?
保持清醒,并带着一颗勇敢的心和耐心来面对压力,才能够真正的解决问题。避免目标不断被侵蚀而永远无法达到。
最后
欢迎小伙伴在留言区交流。如果你有更多的系统思考的问题或者案例,欢迎留言,我们可以一起分析和探讨。
参考引用
- 如何系统思考(第2版)(《第五项修炼》作者彼得·圣吉作品,系统思考入门指导书)邱昭良
网友评论