没有采用框架的LeSS导入

我提倡在使用LeSS中平衡框架导向和实验导向。因为框架导向已经挺强了,我想更多地展开实验导向。有可能不采用LeSS框架来导入LeSS吗?我认为是可能的,因为那其实就是受LeSS实验启发的持续改进。

受LeSS实验启发的持续改进

让我来分两部分加以解释 - 持续改进和受LeSS实验启发。

持续改进

LeSS导入 - 无论是框架还是实验 - 的目的是改进产品开发。为了持续地改进,两件事能有所帮助。

  1. 一个持续改进的周期,基于年/季度/月、版本/迭代等。虽然框架经常会带来一个持续改进的周期,我们并不真的需要一个框架来创建周期;生活中就充满了周期:)

  2. 一个诸如PDCA这样的改进方法。我们定义改进话题、设计并采取措施,学习并加以适应。为了能提升改进质量,我们可以应用系统思考,更多信息请参考“实践系统思考: 2) 从鱼骨图到因果回路图”这篇文章。

受LeSS实验启发

当定义改进话题(改进什么和怎么改进)时,我们能受益于对LeSS实验的学习。我们可以从分析问题开始,然后从LeSS实验中寻找启发:可能的原因和方案、甚至重新定义问题。我们也可以从LeSS实验开始,然后寻找机会来改进我们自己的情况。我把这叫作问题和实验的碰撞。

它们在哪里碰撞?在系统模型中。我们在同一个系统模型中分析问题并学习相关LeSS实验。虽然一个实验可以是一个采取措施的单元,它并不是一个好的学习单元,因为一组实验会共享一个上下文,在更大上下文中一起来学习它们会更有效。这与建议在更大的上下文中分析问题是一致的。系统模型则提供了这个上下文。

一个例子 - 改进遗留代码

比如说,我们有一个改进遗留代码的话题。我们可以把问题定义为“遗留代码拖慢了我们”,然后措施是“重写遗留模块A”。我们把这放入到一个系统模型中,以下是一种方式。我把B1回路命名为“重写以清理遗留代码”。

图片

让我们来学习相关的LeSS实验以获取更多启发。第二本LeSS书中有一个章节就叫“遗留代码”。你注意到的第一件事会是,那些实验被组织成两部分:一部分是如何避免新增遗留代码;另一部分则是如何清理现存遗留代码。事实上这是一个典型的存量流量思考方式 - 如果你识别某个变量为存量,你会考虑它的流入和流出;虽然CLD并不要求显式区分存量和流量 - 它们在CLD中都是变量,我们受益于这种思考从而考虑得更为完整。就这样我们通过拆分/新增了遗留代码相关的变量来对模型加以完善。

图片

我们继续读这个章节。第一部分是如何避免产生更多遗留代码,以下是一组相关实验。

  • 避免……固定内容并带有不合理的截止日期

  • 尝试……透明性和客户协作

  • 避免……招聘许多技能弱的开发人员

  • 避免……相信大学教育会教授开发技能

  • 尝试……增加对学习开发技能的组织支持

  • 尝试……支持更多自学

  • 避免……轻视编程

  • 尝试……提升对遗留代码所产生负面影响的认知

产生遗留代码有两类主要的原因:一个是排期不合理,另一个是开发技能差。在读这些实验的过程中,我们进一步完善模型。

图片

如你注意到的那样,模型被扩展了许多。让我一块一块来解释。

  • B2回路是对期望产出和实际产出之间差距的一种典型反应,我把它命名为“施压以获得更多产出”。然后,R1回路则展示了一个意外的后果,我把它命名为“匆忙/疲劳的开发人员产生遗留代码”。

  • B3回路则是另一种反应,我把它命名为“招聘以获得更多产出”。不幸的是,招聘好的开发人员需要时间,在模型中呈现为延迟。当我们因为不能等而在匆忙中招聘时,就会招许多技能弱的开发人员。因此更多的招聘导致了更低的开发者技能,进而产生了另外两个意外的后果。

  • R2回路展示了一个后果,我把它命名为“技能弱的开发人员会慢”。R3回路则展示了另一个后果,我把它命名为“技能弱的开发人员产生遗留代码”。

借助于系统模型,我们对诸如“避免……招聘许多技能弱的开发人员”、“尝试……增加对学习开发技能的组织支持”和“尝试……支持更多自学”这些相关实验的学习更深入了。

继续第二部分 - 关于如何清理现存遗留代码,以下是一组相关实验。

  • 避免……重写遗留代码

  • 尝试……清理你的周边

  • 尝试……写高层和单元两类测试

  • 尝试……重写致命的遗留代码

我们终于看到了与最初的B1回路相关的实验。等一下,有两个相关的实验:一个是“避免……重写遗留代码”,另一个是“尝试……重写致命的遗留代码”。这很有趣,为什么既避免又尝试?我们深入下去……留给你自己学习:)然后,我为“清理你的周边”增加了B4回路,那是另一条清理遗留代码的路径。以下是更新的模型。

图片

所以,LeSS实验在系统模型中是什么呢?它们对系统施加影响;它们影响某些变量、链路和回路。

在看到所有这些变量和动态之后,我们可能仍然决定采取原先的措施 - 重写遗留模块A。此外,我们采取另一个措施来“提升对遗留代码所产生负面影响的认知”。与此同时,我们理解这些只是这个持续改进周期里的措施,之后我们将继续工作在这个改进话题上。

在这个例子中,我们从一个改进话题和一个措施开始,然后转向学习相关的LeSS实验以获取启发。我们看到了之前没有看到的变量和动态;我们学到了之前没有想到的影响方式。然而,我们也可以从LeSS实验出发,并思考它们试图影响的但还没进入我们视野的问题。这就像是,我们在系统模型提供的舞台上摇摆于我们的问题和LeSS实验之间。

结束语

LeSS导入的这条路走得人少,但它却在LeSS的源头。当我们看那些发布的LeSS案例,它们大多数都是LeSS框架的导入。事实上,我期望看到更多没有采用框架的LeSS导入案例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 命令——安全

我们将学习两个命令。第一个命令是 docker container run 命令,这样你就能看到使用该命令的一些好处。其次,我们将看看 docker container diff 命令,你可以用它来查看在已有的镜像基础上做了什么。让我们看看如何使用这两个命令来确保容器的安…

补充:二分类器实现多分类 --- 一对一与一对多策略

文章目录 前言一、一对多(One-vs-Rest, OvR)1 理论2 决策原则(这里给出的是SVM的,其他的二分类器也类似)2 简单代码演示二、 一对一(One-vs-One, OvO)1 理论2 决策原则(投票)3 简单代码演示总结前言 我在大三刚接触到机器学习课程的时候,回归问题很自然就能跨过这个…

深度学习在蛋白质结构预测的新突破:AlphaFold、RoseTTAFold与ESMFold

在蛋白质结构预测和功能预测领域,基于机器学习的方法最近取得了显著的进展。特别是深度学习技术在这个领域中展现出了强大的能力,代表性的技术有 DeepMind 的 AlphaFold 和 RoseTTAFold。这些技术利用了大量的生物数据和先进的神经网络架构,极…

调试代码Pair-wise-Similarity-module-master

第一步:运行.py文件生成json文件 问题一:json.decoder.JSONDecodeError: Invalid \escape: line 1 column 31616 (char 31615) 解决: for dataset in dataset_list:with open(datasetmap[dataset] ".csv", "r") as li…

什么是Arkose Labs挑战及其解决方法

Arkose Labs挑战是一种复杂的机制,旨在验证用户是真正的人类,而不是自动化的机器人或脚本。这一挑战在维护在线服务的安全性和完整性方面发挥着关键作用,通过防止欺诈活动并确保只有真实用户才能访问某些功能。 目录 什么是Arkose Labs挑战&a…

Python 基础 (标准库):堆 heap

1. 官方文档 heapq --- 堆队列算法 — Python 3.12.4 文档 2. 相关概念 堆 heap 是一种具体的数据结构(concrete data structures);优先级队列 priority queue 是一种抽象的数据结构(abstract data structures)&…

分布式锁(3):jedis基于Redis set命令的分布式锁

1 实现思路 获取锁的时候,使用 setnx 加锁,并使用 expire 命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的 value 值需要指定,可以根据具有业务含义,本文简化为 UUID,在释放锁的时候进行判断,避免误释放。获取锁的时候还设置一个获取的超时时间,若超过这个时间…

A34 STM32_HAL库函数 之 PCCARD通用驱动 所有函数的介绍及使用

A34 STM32_HAL库函数 之 PCCARD通用驱动 所有函数的介绍及使用 1 该驱动函数预览1.1 HAL_PCCARD_Init1.2 HAL_PCCARD_DeInit1.3 HAL_PCCARD_MspInit1.4 HAL_PCCARD_MspDeInit1.5 HAL_PCCARD_Read_ID1.6 HAL_PCCARD_Read_Sector1.7 HAL_PCCARD_Write_Sector1.8 HAL_PCCARD_Erase…

微信小程序-自定义组件checkbox

一.自定义Coponent组件 公共组件:将页面内公共的模块抽取为自定义组件,在不同页面复用。 页面组件:将复杂页面进行拆分,降低耦合度,有利于代码维护。 可以新建文件夹component放组件: 组件名为custom-che…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验3 总线型以太网的特性(广播,竞争总线,冲突)

一、实验目的 1.验证总线型以太网的特性; 2.验证广播特性; 3.验证各主机对总线的竞争使用以及可能产生的碰撞。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容…

PatchMixer:一种用于长时间序列预测的Patch混合架构

前言 《PatchMixer: A Patch-Mixing Architecture for Long-Term Time Series Forecasting》原文地址,Github开源代码地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文,并对其进行了中文翻译…

小抄 20240624

1 不要拿自己的短板和别人的长板比。 看到别人的长板,可以学习,不要因为暂时达不到而自卑,长板能成长板,都是经过长期的刻意练习才达到的。 要在认识到自己长板的基础上,以长板为主,适当补充短板&#x…

软件测试学习笔记丨JUnit5执行顺序

本文转自测试人社区,原文链接: https://ceshiren.com/t/topic/28025 指定顺序使用场景 测试用例有业务逻辑相关集成测试(主流程测试) 排序方式 方法排序类排序Suite官方网站没有明确说明默认排序的具体规则 方法排序的类型 方法排序-Order 注解指定排序 …

python中的nan是什么意思

NaN(not a number),在数学表示上表示一个无法表示的数,这里一般还会有另一个表述inf,inf和nan的不同在于,inf是一个超过浮点表示范围的浮点数(其本质仍然是一个数,只是他无穷大&…

C#语法——ref和out关键字的使用

前言 我们在C#开发中经常需要将一个参数传入一个方法,然后在方法内部改变这个参数的值,如果这个参数是引用类型,那么直接在方法中改变该参数的值,方法执行完以后该参数的值也会被改变;如果这个参数是值类型&#xff0…

利用ChatGPT优化程序员工作流程:实用案例分享

近年来,人工智能技术的迅猛发展给各行各业带来了翻天覆地的变化。作为其中的一员,程序员在工作中也受益匪浅。其中,ChatGPT的出现,更是成为优化程序员工作流程的得力助手。本文将通过多个实用案例,分享如何利用ChatGPT…

使用ChatGPT提升编程效率:程序员的最佳实践分享

在这个信息技术飞速发展的时代,编程已经成为了越来越多人的必备技能。无论你是初学者,还是经验丰富的开发者,都可能会遇到编程中的各种问题和挑战。幸运的是,AI 技术的进步让我们有了新的解决工具——ChatGPT。作为一名科技博客博…

单片机练习题7

一、填空 1、AT89S51的串行异步通信口为 (单工/半双工/全双工)。 答:全双工。 2. 串行通信波特率的单位是 。 答:bit/s 3. AT89S51的串行通信口若传送速率为每秒120帧,每帧10位,则波特率为…

Java+ffmpeg 合并两个mp4文件

使用ffmpeg测试命令 测试命令时系统要安装ffmpeg并配置环境变量:初识ffmpeg、安装配置-CSDN博客 ffmpeg -i "E:\Monitor\video_20240617_10.mp4" -i "E:\Monitor\video1_20240617_10.mp4" -filter_complex "[0:v][0:a][1:v][1:a]conc…

【面试题】Redis面试题

目录 为什么使用缓存?Redis是什么?Redis都有哪些使用场景?Redis有哪些功能?Redis支持的数据类型有哪些?Redis为什么是单线程的?Redis真的是单线程的吗?Redis同步机制是什么?Redis持久…