QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

软件项目管理中价值流反馈回路的意义

作者:Pavel Azaletskiy, Jack Maher

  • 2022-10-06
    北京
  • 本文字数:2831 字

    阅读完需:约 9 分钟

软件项目管理中价值流反馈回路的意义

在探讨价值流程图时,我们总会将交付时间与数据吞吐看作是静态的,但这些参数实际是价值流图的行为特征。价值流程通过步骤、能力、处理事件、反馈回路、概率等在内的结构,定义了价值流的交付时间、在制品(WIP)及动态吞吐量。


让我们从一个简单的价值流开始,只有一个步骤“工作”,负责材料的某些工作。材料每分钟到达一次,所有材料的处理时间步幅固定为一分钟,材料在输入队列中放置时间为一分钟。在这个简单实验中,我们只有一个重新处理的材料“返工”(redo)反馈回路。


如你所见,返工并不是必须执行的步骤。质量优秀的项目会直接进入输出队列,但如果项目质量堪忧那么它将进入返工队列,再次执行“工作”这一步骤。从我们的实验来看,质量不过关重新返回“工作”队列的概率很重要,我们将这种情况称作是“返工”概率。


在实际生活中,这种过程非常常见:

  • 在代码审查中,代码修改提交者会收到代码是否存在问题的反馈,如违背代码标准、实施问题等

  • 在质量保障实践中,测试团队会返回应用构建后存在的 bug

  • 在场景可靠性工程中,新版本部署需要人工干预解决先前被忽视的问题


也许你会认为我们所用的例子过于简单,以至于无法完全反映上述例子中的场景,但我们现在还不需要过多的细节。正如一位科学家所言,所有模型都是错的,但有的可能错得有用。这句话完美符合我们现在的情况。让我们先从这个模型开始,看看能在其中学到什么可以应用至软件工程管理中的知识。


图 1.实验性质的价值流图

 

如果你想要对模型进一步探索,调整参数或根据需要添加细节,可以参考这个链接

 

第一个实验是研究一个步骤中的“返工”概率对整体流程交付时间和吞吐量的影响。这种实验设置对软件工程经理来说非常现实,它能提示我们在不增加雇员的情况下要如何提升交付价值。让我们先从抽象案例开始,进一步探讨其对软件管理的实际意义。


在我们的模拟中,我们以 10%的步幅将返工概率从 0%提升到 90%,假设材料处理顺序代表结果差别,是输入队列还是返工队列的材料优先被处理,换句话说,我们是否需要将 bug 修复优先于功能开发。

我们将以下三种设置的价值流图模拟运行 100 分钟:

  • 当输入队列优先级高于返工队列时,工程团队实际是在处理新需求而不是改 bug

  • 当输入队列优先级与返工队列相同时,工程团队是将新需求与 bug 混合在一起

  • 当输入队列优先级低于返工队列时,工程团队优先处理 bug 再处理新需求

 

输出模拟如下:



图 2. 三种情况的模拟结果

 

只有当输入队列优先级高于返工(bug),也就是新功能比改 bug 更重要的情况下,才会出现交付时间固定为两分钟的情况。解释也很简单,因为输入队列的材料(新功能)拥有更高优先级,所有返工队列(bug)的材料都积压在底层,无法进入“工作”这一步骤。尽管两分钟的交付时间看起来很美好,但这也只是一个假象,不断推迟处理的返工材料只会延长 WIP 的时间:这些 bug 或技术负债终究还是要处理的,新材料(新功能)无论如何都会被推迟。因此,将团队部分能力分配给已知问题的处理是合理的。

 


图 3. 高优先级输入队列中,在制品有 50%的概率返工

 

在制品(WIP),一个不能细看的东西。我们或许可以参考道路交通和网络流量这两个模型来研究在制品的影响,由于道路宽度和带宽的有限性,新加入的车辆或数据包都会对当前部分的基础设施造成影响。在低负载时,这些影响可以忽略不计;但随着负载的增加(车辆或数据包的数量),整体交通流动速度会下降。“降低流量水平”,这看板(Kanban)使用 WIP 作为流程机制的关键原因。以 WIP 为阈值指标确实可以帮助我们监控“流量”,但前提是它能够捕捉到全部的项目工作,包括计划内、非计划内、行政管理等等各种会占据我们精力和时间的活动,然后这一切又会变成优先级争夺的游戏。


让我们继续回到模型的研究。当输入队列(新功能)优先级高于返工队列(bug)时,事情大不相同了:交付时间会随着返工概率的增长而增长。原因是材料在离开过程,也就是项目工作完成前,会多次进入“工作”的步骤。另一个值得注意的现象是,随着返工的增长吞吐量反而会降低,这也是必然的,因为吞吐量的计算公式是离开材料和到达材料的比率。在一段时间内(在我们的模拟中是固定的 100 分钟),如果交付时间增长,那么离开的材料数量会减少,吞吐量也会下降。


那么这对于实际软件工程管理来说有什么实际意义呢?率先解决反馈回路中会出现大量 bug 或问题的部分,以恢复团队能力。举例来说,如果我们的架构脆弱或代码可维护性很低,在部署任何变更后都需要大量返工,那么重构是必要的,只有这样才能提高工程团队的能力,恢复生产力。


最后的一个观察结果是,模拟时长决定了交付时间。价值流模拟的时间越长,交付时间的变化就越多。这种行为是直接反应了价值流图结构中反馈回路,在输出队列与返工队列之间的概率分布。工程管理者在接手包含大量累计债务的历史遗留代码时,考虑对解决方案增量返工是较为合理的,否则,不仅仅是追赶进度的速度,交付速度也会一直迟缓。


追求简单的艺术:越是复杂就越容易提高结果在可接受范围外的概率。为避免这类情况发生的一种方法是,尽可能简化反馈回路,使其快速且直接。对数据质量评估和鉴定之前所收集到的一切信息应保持怀疑态度,让变更部署质量的反馈保持简单、简洁、快速,是 TDD 和 BDD 之类工程实践会如此强大的原因。


后续可以尝试单一变量的迭代变化,当然最好是通过实验设计自己搭建一个价值流,以充分性为目标,看看最后会是什么结果,你可能会面临“完美并不意味着好”的挑战。更高阶的挑战会包括跨流程影响、间接影响,甚至还会有活动和数据观测之间尚未被发现的关系。流程和数据透明化、可见性都能够成为价值流程图中传递意图和映射现实的强有力工具,并在利益相关者的参与中构建可信度和可用性。

 

下图列表展示了价值流图的多个流程是如何有多个交付时间,在输入和返工队列拥有相同优先级且返工概率为 50%时,材料在离开项目时留下的流程痕迹。如你所见,一个材料可以有各种形式的返工反馈回路。当软件工程经理面临这种多类型反馈回路的场景时,可以根据情景发生频率、对吞吐量和团队能力的不利影响等不同情况有不同处理方式。先找到反馈的根源,是什么导致工程师无法及时收到反馈?另一个重要的问题是针对重复性反馈,为什么工程师无法在收到反馈后立即做出变更?架构或环境配置本身都极可能导致工程师无法在本地进行测试、运行这套反馈流程,只能从其他团队或管道步骤中获取反馈。在生产力最高的环境中,工程师都可以在本地,不影响代码库的请胯下运行所有管道步骤和各类测试。



综上,我们会建议敏捷DevOps领域使用价值流图的从业者透过价值流结构和视角来观察其包括交付时间、吞吐量、WIP 等在内的动态特征。搞清楚价值流中的哪些结构因素会导致动态观察的结果变化是对改进或新的、更平衡的价值流而言至关重要的。


希望这些想法和见解能在你的实践中派上用场。欢迎随时联系我们,分享你认为重要的经验教训。


原文链接

The Implication of Feedback Loops for Value Streams


相关阅读:

DevOps 已死,平台工程才是未来

POC、Scrum 和低质量软件的解决方案

2022-10-06 10:5510419

评论

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

观测云产品更新 | 异常追踪、数据保存策略、BPF 日志、管理优化等

观测云

产品迭代

流程挖掘,为光伏企业重塑确定的竞争力

望繁信科技

数字化转型 流程挖掘 流程智能 光伏企业

实训机房用什么样的云桌面系统合适?

上海锐起科技

得物App白屏优化系列|网络篇

得物技术

android 企业号2024年8月PK榜

一文了解电商大促系统的高可用保障思路-献给技术伙伴们

京东科技开发者

解锁未来财富密码:AI 自动化副业创收班 - 终身财富加速器

测试人

软件测试

成本效益分析:观测云投资的回报

可观测技术

成本优化

MIAOYUN与CStack签署总代协议,共拓一体化云端交互管理市场!

MIAOYUN

云计算 云原生 云服务 云桌面 战略合作

豆包大模型综合能力提升20.3%,火山引擎成立零售大模型生态联盟,加速企业AI落地

新消费日报

DOGS空投掀起交易所竞争热潮,TON生态能否再次引爆市场?

区块链软件开发推广运营

区块链开发 链游开发 NFT开发 公链开发 dapp项目开发

秒验SDK扩展业务功能设置

MobTech袤博科技

开发者

零成本搭建个人 APP 和小程序后台

北桥苏

php Python 运维‘ Vercel railway

未来展望:观测云技术的发展与企业业务的融合

可观测技术

业务监控

火山引擎携手领克汽车与英特尔,发起首届AI创造者大赛

新消费日报

观测云的安全监控策略:Prometheus 生态的深度集成

可观测技术

Prometheus

创新驱动:观测云如何帮助企业在竞争中保持领先

可观测技术

数据分析

基于飞桨框架实现PCA的人脸识别算法

百度Geek说

人脸识别 百度飞桨

5个Spring 异步与事件注解:解耦与高性能注解应用案例(必须收藏)

肖哥弹架构

spring Spring Boot 异步 事件

秒验合规指南

MobTech袤博科技

开发者

IPQ5018 motherboard: QCN6102-QCN6122 Multi-band integration -DIY customization

wifi6-yiyi

wifi ipq5018 WIFI6E

ReidsTemplate序列化器

李爽

秒验集成指南

MobTech袤博科技

开发者

PYUSD跃升为第六大稳定币:借势Solana和高APY的成功之道

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 NFT开发 公链开发

AIGC应用实战营-毕业总结

王琨琨

让程序员欲罢不能的职场工具合集

伤感汤姆布利柏

如何快速做一个优美的网站?

coxi_vv

开源 建站 网页 halo博客 1Panel

安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!

阿里云数据库开源

动态化-鸿蒙跨端方案介绍

京东科技开发者

软件项目管理中价值流反馈回路的意义_文化 & 方法_InfoQ精选文章