MAMOS蓝图: 打造自己的质量工程

针对团队中存在的问题,构造MAMOS蓝图,从而以系统化的方式识别并解决问题。本文将针对减少等待时间这一问题举例说明MAMOS蓝图的组成和使用方式。原文: MAMOS Blueprint: Build your own for Quality at Speed

alt

很难完全摆脱等待时间。

我认为没有必要争论延迟成本(cost of delay)、团队受挫成本(team frustration)、闲置成本(idle costs)和返工成本(late rework)对业务的影响,问题的关键在于如何减少这些成本。

由于软件生产系统中的多重因果关系,造成等待时间的原因相当复杂: 副总裁想要更多功能,经理不会拒绝,鼓励做越来越多的工作,团队有不同的优先级和工作方式,等等。由于等待时间太长,组织甚至可能在流水线上增加更多工作,从而使问题变得更糟。

通过建立敏捷流程和精益过程来帮助解决的同时,仍然需要将管理和组织联系在一起,形成"人员、流程和技术"的闭环,才能协调一致的减少等待时间。

本文将分享如何通过使用MAMOS构建软件生产系统以获得可持续的质量和快速发布能力,从而明确减少等待时间。

浮于表面的方法远远不够

我们已经看到、听到过许多尝试消除等待时间的失败案例,涉及各种背景或行业。而在现实生活中,如果无法解决制度问题,也会在政治和生态方面面对同样的问题。

例如,管理层在全员大会上把某项任务作为关键优先事项,却在没有考虑已经开始的工作的情况下,悄悄改变了新的优先事项。另一家公司聘请了顾问,开始敏捷转型,但由于缺乏内部责任和流程变革而失败了。

他们的共同点就是浮于表面。

图1: 浮于表面的解决方案,thinkk.org
图1: 浮于表面的解决方案,thinkk.org

表面变化很有吸引力,可以在短时间内展示一些结果,在持续面临交付压力时是有用的输出。但问题在于,这是浪费资源,因为问题会以不同形式出现,而浮于表面的解决方案解决不了根本原因。

软件生产系统中的可持续变化需要系统方法(system approach) 来创建良好的架构和积极增强的系统,以实现我们的目标。只有这种方法才能建立真正的能力,并持续产生影响。

拥抱MAMOS可持续方法

减少等待时间的可持续方法需要将核心原则与软件生产系统中的具体活动和操作结合起来。

范式转变需要关键利益相关者在以下方面达成一致:

  • 精益原则(Lean principles): "少即是多(Less is more)"、"慢即是快(Slow is fast)"、"限制在制品(Limit WIP)"是与乐于改变的利益相关者分享的核心原则。
  • 拉动而非推动(Pull instead of push): 从头到尾做一件事,只有在可以的时候才开始做新的事情,而不是在别人要求的时候。
  • 从小处着手(Start small): 范围越大,风险越大。拥有真正的全球视野,但选择一个明确边界来迭代和快速交付价值。

现在可以开始讨论用MAMOS构建什么了:

图2: 带有输出(黄色)和目标(黑色)的MAMOS蓝图
图2: 带有输出(黄色)和目标(黑色)的MAMOS蓝图

软件生产的系统方法基于MAMOS,即质量工程框架(Quality Engineering Framework),围绕方法(Methods)、体系架构(Architecture)、管理(Management)、组织(Organization)和技能(Skills)这5个维度构建。

接下来我们将在一个完整的练习中执行现状分析,以了解系统是如何工作的,执行与蓝图之间的差距,并确定调整的优先级。为了使文章保持简短,我们在这里将重点放在蓝图上。

架构师对系统架构进行可持续变更

发展软件生产系统以满足特定客户在不同领域的需求,同时关注大局和我们想要达成的目的。

蓝图的构建基于:

  1. 结果(Outcome): 要达到的价值目标,在我们的例子中是减少等待时间,这将加速价值交付。
  2. 输出(Output): 有助于达成结果的活动的主要输出,在我们的案例中简化为"减少进行中的并行变更数量"。
  3. 元素(Element): 在MAMOS能力域内作为软件生产系统的一部分构建的单元。

然后将系统中的每个元素交互定义为"启用(enable)"、"强化(reinforce)"、"限制(limit)"和"反馈(feedback)"4个主要交互。

图3: 移除等待时间的MAMOS蓝图(非详尽的)
图3: 移除等待时间的MAMOS蓝图(非详尽的)

基于MAMOS的总体行动计划依赖于:

  • 建立利益相关者治理会来限制在制品: 分配一个内部角色来管理项目组合、优先级、期望,以限制工作流水线的能力。
  • 从看板开始实现"拉动式": 在缺乏成熟度和可预测性的情况下,Scrum和其他方法的成本太高了。应该从小处着手,实现实时化。
  • 让经理成为转型的推动者: 团队需要帮助来实现较小的增量,要能够说不,以共享的方式工作,并持续学习。
  • 建立知识以消除瓶颈: 从有限工作流的连续交付流中了解等待时间的原因并解决。

作为软件生产系统的一部分,要构建的元素将能够维持学习实践,并在此过程中不断发展,构建比个人交付价值的总和更可靠、更有效的东西,这就是质量工程。

更多质量工程蓝图

质量工程的价值是通过使用MAMOS框架构建软件生产系统来实现快速、高质量软件交付。同样的蓝图模型也可以用来解决其他问题。

事实上,消除等待时间只是转型之旅的开始。在这方面的改进为解决其他结构性问题(如平台架构或团队规模)打开了大门,每个问题都需要一个系统才能成功。

alt

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

- END -

本文由 mdnice 多平台发布

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

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

相关文章

在线二进制原码,补码,反码计算器

具体请前往:在线原码/反码/补码计算器

阅读笔记——《UTOPIA: Automatic Generation of Fuzz Driverusing Unit Tests》

【参考文献】Jeong B, Jang J, Yi H, et al. UTOPIA: automatic generation of fuzz driver using unit tests[C]//2023 IEEE Symposium on Security and Privacy (SP). IEEE, 2023: 2676-2692.【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。…

【Spring】10 BeanFactoryAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点,其中之一就是 Bean 生命周期中的回调接口。本文将专注于介绍一个重要的接口 BeanFactoryAware,探…

汽车IVI中控开发入门及进阶(十一):ALSA音频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,音频比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音频文件,如果有视频文件也可以放出音频,看起来很简单,在windows下音乐播放器很多,直接打开文件就能播放各…

【INTEL(ALTERA)】Agilex7 FPGA Development Kit DK-DK-DEV-AGI027RBES 编程/烧录/烧写/下载步骤

DK-DEV-AGI027RBES 的编程步骤: 将 USB 电缆插入 USB 端口 J8(使用 J10 时,DIPSWITCH SW5.3(DK-DEV-AGI027RES 和 DK-DEV-AGI027R1BES)和 SW8.3(DK-DEV-AGI027RB 和 DK-DEV-AGI027-RA)应关闭&a…

内网穿透工具,如何保障安全远程访问?

内网穿透工具是一种常见的技术手段,用于在没有公网IP的情况下将本地局域网服务映射至外网。这种工具的使用极大地方便了开发人员和网络管理员,使得他们能够快速建立起本地服务与外部网络之间的通信渠道。然而,在享受高效快捷的同时&#xff0…

Linux系统vim,gcc,g++工具使用及环境配置,动静态库的概念及使用

Linux系统vim,gcc,g工具使用及环境配置,动静态库的概念及使用 1. Linux编辑器-vim的使用1.1 vim的基本概念1.2vim的基本操作1.3vim正常模式命令集1.4vim末端模式命令集1.5简单的vim配置 2.Linux编译器-gcc/g的使用2.1 准备阶段2.2gcc的使用2.…

Flutter在Android Studio上创建项目与构建模式

一、安装插件 1、前提条件,安装配置好Android Studio环境 2、安装Flutter和Dart插件 Linux或者Windows平台: 1)、打开File > Settings。 2)、在左侧列表中,选择"Plugins"右侧上方面板选中 "Market…

C# OpenVINO 直接读取百度模型实现图片旋转角度检测

目录 效果 模型信息 代码 下载 C# OpenVINO 直接读取百度模型实现图片旋转角度检测 效果 模型信息 Inputs ------------------------- name:x tensor:F32[?, 3, 224, 224] --------------------------------------------------------------- Ou…

【vmware】虚拟机固定ip和网络配置

废话不多说,直接干货 桥接模式不多说,动态ip,一般一键下一步就可 本文主要讲 NAT模式下 静态IP设置及公网问题 创建虚拟机 查看ip ip a 或者 ifconfig 设置静态ip 1.设置虚拟机网络 点击上图中NAT设置,配置网关IP(vmv…

flume:Ncat: Connection refused.

一:nc -lk 44444 和 nc localhost 44444区别 nc -lk 44444 和 nc localhost 44444 是使用 nc 命令进行网络通信时的两种不同方式。 1. nc -lk 44444: - 这个命令表示在本地监听指定端口(44444)并接受传入的连接。 - -l 选项…

docker-compose的介绍与使用

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml,其中定义的每个服务可以通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。 注意如果使用 build 指令,在 Dockerfile 中设置的…

安装文本-图像对比学习模型CLIP的方法

文章目录 一、安装clip的误区二、安装clip的官方方法三、离线安装clip的方法1.下载clip包并解压2.然后激活自己的conda环境2.安装clip 一、安装clip的误区 安装clip最容易犯的错误就是直接使用pip安装clip包,如下: pip install clip这里需要注意的是&a…

Vue自定义指令插槽作用域插槽具名插槽

Vue自定义指令&插槽&作用域插槽&具名插槽 一、学习目标 1.自定义指令 基本语法(全局、局部注册)指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 3.综合案例:商品列表 MyTag组件封装MyTable组件封装 4.路…

【lesson14】MySQL表的基本查询retrieve(读取)1

文章目录 表的基本操作介绍retrieveselect列建表基本测试 where子句建表基本测试 表的基本操作介绍 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) retrieve select列 建表 基本测试 插入数据 全列查询 …

带你亲证AI应用开发的“奇点”时刻

带你亲证AI应用开发的“奇点”时刻 AI 应用开发——新的历史节点 事实上,没有任何一种突破能够不经历重重失败,不体验一轮轮的痛苦,就能直接展现在人类面前。AI 技术自诞生之初直至今日,其发展之路从未一帆风顺——辉煌与寒冬交…

Oracle MongoDB

听课的时候第一次碰到,可以了解一下吧,就直接开了墨者学院的靶场 #oracle数据库 Oracle数据库注入全方位利用 - 先知社区 这篇写的真的很好 1.判断注入点 当时找了半天没找到 看样子是找到了,测试一下看看 id1 and 11 时没有报错 2.判断字段…

如何在Facebook Business Manager进行企业认证

Facebook Business Manager,简称BM,按照字面意思理解就是Facebook官方的商务管理平台,是供广告主团队去使用的一个管理工具。BM可以绑定Facebook公共主页、广告账户等一系列Facebook账号。通过BM,企业就可以在一个后台&#xff0c…

集群消费和广播消费有什么区别?

为了规范消息队列中生产者和消费者的行为,消息中间件的构建中会实现不同的消费模型。本文讨论的话题来自 RocketMQ 中具体的两种消费模式,是消息队列中两种典型消费模型的实现。接下来我们就一起来看一下消息队列都有哪些消费模型,以及对应的…

Unity中Shader URP 简介

文章目录 前言一、URP(Universal Render Pipeline)由名字可知,这是一个 通用的 渲染管线1、Universal(通用性)2、URP的由来 二、Build-in Render Pipeline(内置渲染管线)1、LWRP(Lig…