敏捷开发时代,彻底结束了

最近,我收到一位读者的私信,他最近“内耗”得非常厉害,他可能一时兴起把我的私信当作了吐槽箱。

他们公司一直实行敏捷的管理模式,复盘发现了一个问题:发布与迭代具有强相关性,一个迭代就发布一次,导致需求交付周期过长,严重超出团队和业务部门可接受的时限。现在他在考虑到底该如何改变,是选择SAFe还是DevOps。

卡尔·波普尔曾说:“新的基本原则是,为学会避免犯错误,我们必须从我们的错误中学习。”敏捷本身并不能带来投资回报。当改进开发流程而不改进部署时,我们最终不可避免会面临这些问题。我之前陆陆续续写过一系列DevOps文章,我的看法是选择DevOps。

大家可以先从了解DevOps入手,我已经在之前的文章《DevOps生命周期,你想知道的全都在这里了!》中已经详细说明了。敏捷和DevOps毫无疑问可以共存,DevOps很多时候被视为敏捷的延申,将敏捷的理念扩展到代码部署之外。
agile-devops

那我们该如何在敏捷团队中启用DevOps?

01 放弃使用手动

手动流程是最常见的错误和延迟源头。在软件开发过程中,我们需要注意“手动”一次,包括手动测试、手动部署、手动交付……这些都是浪费时间的蛛丝马迹。

02 找到瓶颈

在整个流水线中实施检测,查看代码在哪些地方受阻,然后集中精力消除瓶颈。没有什么能比通过最慢部分的速度更快。管道中其他地方的改进只会让瓶颈变得更糟,因为它们只会在堵塞点堆积更多的任务。要想取得进展,唯一的办法就是解决最大的瓶颈。

03 自动化测试

这是实现真正有效的敏捷的关键因素。我听说它被描述为黄金标准,但并非绝对必要。错。自动化测试是绝对必要的。它能让你永远快速。人们喜欢说他们做的是测试驱动开发(TDD),但通常他们只是说先写测试再写代码。真正的TDD是自动化的。而有效的TDD是立即完成的。人们常说以后再写测试。这永远不会发生。

如果你打算这么做(你应该这么做),现在就做。不仅要自动化UI测试,还要自动化集成测试、单元测试和验收测试。是的,在功能代码之上编写测试需要更长的时间,但从长远来看,这不会拖慢您的工作进度。事实上,自动化回归套件能帮助你实现持续和无限的速度,正如《敏捷宣言》所设想的那样。试图用手动测试来实现敏捷是失败的秘诀。尽一切努力实现自动化,并不惜一切代价保护它。

04 使用自动化工具

在选择配置管理工具时,我们应优先考虑支持基础设施即代码(IaaC)的工具,这是实施DevOps理念的关键。这种方法能够方便我们在多种平台上部署应用,避免重复的工作。

提高自动化程度至关重要,包括大部分代码、扫描流程,以及预防任何潜在的Bug。我们应在存储库中构建工件,或者实施自动发布,以极大程度上减少基础设施和开发团队之间的协调工作。

同时,我们需要注重文档的记录。虽然在敏捷方法中,团队可能不会详细记录他们的会议纪要或其他交流内容,但在DevOps环境中,完整的设计文档和规范对于理解软件版本至关重要。
agile-devops

当然,企业转型DevOps难免会遇到一些“不可抗阻力”和“结果不尽如人意”,禅道提供DevOps咨询课程, 帮助企业从持续集成、持续部署到自动化测试和监控的落地全方位DevOps流程。

既然我们已经知道了改进的方向,那么我们就该勇敢地尝试,最终形成能够持续交付和以客户为中心的团队,交付让客户满意的产品。正如培根所说:“世界上有许多做事有成的人,并不一定是因为他比你会做,而仅仅是因为他比你敢做。”

也不知道那位读者能不能看到我的回复!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++语法13 单分支结构的相关问题详解

一、奇偶数问题 要判断一个数是否是偶数,只要判断这个数字能不能被2整除即可。如果一个数字a除以2,没有余数,那么就是偶数;如果除以2有余数,那么就是奇数。 if(a%20) a是偶数 if(a%21) a是奇数 训练&#xff1…

2-Matplotlib是什么

Matplotlib是什么 Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂,深受广大技术爱好者喜爱。 NumPy 是 Python 科学计算的软件包&…

【面试干货】常见的编译时异常(运行时异常)及其处理

【面试干货】常见的编译时异常(运行时异常)及其处理 1、SQLException2、IOException3、FileNotFoundException4、ClassNotFoundException5、EOFException6、总结 💖The Begin💖点点关注,收藏不迷路💖 在Jav…

背就有效!2024下《系统架构设计师》50个高频考点汇总

宝子们!上半年软考已经结束一段时间了,准备备考下半年软考高级-系统架构设计师的小伙伴可以开始准备了,毕竟高级科目的难度可是不低的,相信参加过上半年架构的小伙伴深有体会。 这里给大家整理了50个高频考点,涵盖全书…

示例:WPF中绑定枚举到ComboBox想显示成中文或自定义名称如何实现

一、目的:在开发过程中绑定的枚举不想显示成英文字段怎么办,这里通过TypeConverter的方式来实现绑定的枚举从定义的特性中读取 二、实现 首先定义如下枚举 [TypeConverter(typeof(DisplayEnumConverter))]public enum MyEnum{[Display(Name "无&q…

LLM上下文长度扩展方案:Position Interpolation

文章目录 前言1. 预备知识2. PI3. 实验 前言 题目: Extending Context Window of Large Language Models via Positional Interpolation 论文地址:Extending Context Window of Large Language Models via Positional Interpolation 1. 预备知识 由于P…

打造工业操作系统开源开放体系

我国制造业具有细分行业、领域众多,产品丰富,制造模式多样等特点,围绕以工业操作系统为核心的工业软件赋能体系建设,离不开平台运营商、工业软件开发商、系统服务商、科研机构、工业企业等多方联合参与。聚众同行、聚力创新&#…

MySQL约束详解:构建数据完整性基石

目录 MySQL约束1.1 约束1.1 数据类型1.2 主键约束[重要]1.3 自增约束1.4 唯一约束1.5 非空约束1.6 默认值代码演示 1.7 外键约束[了解]思维导图最后 MySQL约束 MySQL作为广泛使用的开源关系型数据库管理系统,其强大的数据约束功能对于维护数据的一致性和准确性至关…

宋仕强论道之华强北假货

宋仕强论道之华强北假货,在华强北野蛮生长猥琐发育的那些年假货一度泛滥,就电子元器件来说,就有翻新(拆机)货、散新货、换标货、虚标货、也国产替代白牌货等几种主要的类型。今天我们来分析华强北假货初探之散新货&…

Windows环境部署MySQL_8.4.0 LTS的部署安装、验证连接以及卸载全过程实操手册

前言: 什么是 MySQL MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内&am…

IT入门知识第四部分《数据库》(4/10)

目录 1. 数据库基础 1.1 数据库的定义 1.2 数据库的关键概念 数据模型 数据库架构 数据库操作语言(DML 和 DDL) 总结 2. 关系型数据库 2.1 MySQL MySQL 的历史和特点 MySQL 的安装和配置 MySQL 的基本操作 2.2 PostgreSQL PostgreSQL 的特…

LabVIEW利用旋转编码器脉冲触发数据采集

利用旋转编码器发出的脉冲控制数据采集,可以采用硬件触发方式,以确保每个脉冲都能触发一次数据采集。本文提供了详细的解决方案,包括硬件连接、LabVIEW编程和触发设置,确保数据采集的准确性和实时性。 一、硬件连接 1. 旋转编码…

Linux搭建我的世界乌托邦探险之旅3.2整合包服务端,Minecraft开服教程

Linux服务器使用MCSM10 搭建 我的世界 乌托邦探险之旅3.2 整合包 服务端 的教程,Minecraft整合包开服教程。 大型养老探险整合包:乌托邦探险之旅3.2,探索上千种结构,造访丰富的自然群系,欣赏生动的生物动画&#xff0…

Android如何简单快速实现RecycleView的拖动重排序功能

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 要实现这个拖动重排序功能,主要是用到了RecycleView的ItemTouchHelper类 首先是定义一个接口 interface ItemTouchHelperAdapter …

MVC 框架安全

在现代 Web 开发中,使用 MVC 架构是一种流行的做法。MVC 是 Model-View-Controller 的缩写,它将 Web 应用分为三层,View 层负责用户视图、页面展示等工作;Controller 负责应 用的逻辑实现,接收 View 层传入的用户请求&…

代码随想录算法训练营第三十九天| 416. 分割等和子集

416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int i0;i<nums.length;i){sum nums[i];}if(sum%2!0){return false;}int weight sum /2;// int[][] dp new int[nums.length][weig…

软件测试-第1章-绪论

目录 1.1软件危机和软件生存期 &#xff08;1&#xff09;软件危机 &#xff08;2&#xff09;软件生存周期 1.2软件测试的意义 1.3什么是软件测试 &#xff08;1&#xff09;软件测试的定义 &#xff08;2&#xff09;软件测试的范围 1.4怎样认识软件测试 1&#xff…

【包管理】Node.JS与Ptyhon安装

文章目录 Node.JSPtyhon Node.JS Node.js的安装通常包括以下几个步骤&#xff1a; 访问Node.js官网&#xff1a; 打开Node.js的官方网站&#xff08;如&#xff1a;https://nodejs.org/zh-cn/download/&#xff09;。 下载安装包&#xff1a; 根据你的操作系统选择对应的Node…

Go语言RPC开发深度指南:net/rpc包的实战技巧和优化策略

Go语言RPC开发深度指南&#xff1a;net/rpc包的实战技巧和优化策略 概览理解net/rpc的核心概念RPC的基本原理net/rpc的工作模式关键特性 快速开始准备RPC服务和客户端的基础环境构建一个基础的RPC服务端构建一个基础的RPC客户端 开发一个实际的RPC服务设计服务接口实现服务客户…

《Windows API每日一练》4.5 GDI映射模式

上一节讲述设置绘图模式时&#xff0c;包括设置背景模式、混合模式&#xff0c;还有一个就是映射模式。本节我们将详细讲述映射模式。 本节必须掌握的知识点&#xff1a; 设备坐标和逻辑坐标 视口和窗口 MM_TEXT映射模式 度量映射模式 自定义映射模式 第27练&#xff1a;GDI映…