DevOps落地笔记-21|业务价值:软件发布的最终目的
上一课时介绍如何度量软件的内部质量和外部质量。在外部质量中,我们提到用户满意度是衡量软件外部质量的关键因素。“敏捷宣言”的第一条原则规定:“我们最重要的目标,是通过持续不断的及早交付有价值的软件使用户满意”。从这一点也可以看出,“用户满意度”也是衡量业务价值的重要指标。通过将有价值的软件、满意的用户与企业的最终业务目标相联系,就能实现企业的业务价值,即商业目标,比如用户量的增长,收入的增加,成本的降低等。这也是今天这一课时要介绍的内容。
什么是业务价值?
首先,我问你一个问题:“实施 DevOps 的目的是什么?”。你可能会说:“提高部署频率”“缩短故障恢复时间”“提高服务可用性”等。那么,我们再多问一句:“提高部署频率、缩短故障恢复时间、提高服务可用性,这些的目的是什么?”
DevOps 一般是在企业里实施的,我们需要从企业的本质去考虑。企业是的目标是追求利润最大化。所有企业的经营活动,战略的制定,组织结构的调整,甚至实施 DevOps,最终目标都是为了实现企业的这一目标。如下图所示:从 DevOps 目标到企业目标的递进过程。
& DevOps 目标:提高部署频率、缩短故障恢复时间、提高服务可用性等,这一切都是为了满足用户的目标。
& 用户目标:提高用户的满意度。让用户满意,用户才会将产品推荐给其他人以及继续使用产品和服务,从而实现企业的业务目标。
& 业务目标:市场占有率增长、用户数增长、用户使用时长增长,从而实现企业目标。
& 企业目标:收入增长,实现利润最大化。
可以看出,DevOps目标并不是实施DevOps的最终目标,业务目标以及企业目标才是实施DevOps的最终目标。

如何衡量业务价值
上面也提到,DevOps 的成功不仅意味着更快的发布软件,而且意味着要为企业带来业务价值,使得企业更有竞争力。因此,DevOps 的度量不仅要度量发布频率、代码缺陷数和需求数这些研发数据,还要度量用户、市场占有率、净推荐值的数据变化。
软件是通过每一次的发布来交付用户需求,也只有在软件发布之后,之前做的所有的努力才能体现出价值。每次发布都是价值增量的交付,那么,如何衡量发布的软件带来了价值增量呢?比如:会增加收入吗?会降低成本吗?会吸引更多用户吗?会阻止现有用户离开吗?等。
在发布阶段就要确定发布的功能范围,也要衡量发布完成后的价值,以便确定项目的收益与实际的收益是否匹配,是否真正实现了业务价值。业务价值度量的动态性,使得衡量业务价值并不容易,可以从以下几个指标来衡量软件的业务价值。
用户数据
可以从以下几个指标度量用户数据。
& 用户访问量。
用户访问量也就是平常所说的 PV,即 Page View,页面浏览量,同一个人浏览同一个页面算一次。网站的 PV 跟电视的收视率是一个概念,可以衡量产品内容或服务受欢迎的程度。
& 独立访客数。
独立访客数也就是平常所说的 UV,即 Unique Visitor,指访问某个网站的不同 IP 人数。该指标提供了在一段时间内用户数量的度量统计,可以衡量使用产品和服务的真实用户数。
& 新增用户数。
新增用户数是指在一段时间内新注册的用户数量。该指标可用于衡量产品或服务的推广效果和渠道转化用户的质量。在增长黑客的 AARRR 模型中,将用户生命周期分为获取用户、提升活跃、提高留存、获取收入、自传播5个阶段,新增用户只是获取用户阶段,后续还需要通过产品或服务的质量和价值去活跃用户、留存用户。
& 用户忠诚度。
用户忠诚度,也称为用户黏性,是用户对企业的产品和服务进行重复使用的一种度量。这是用户满意度、良好的用户体验以及用户从企业获取产品或服务的整体价值的结果。当用户忠诚于企业的产品或服务时,就不会在意产品或服务的价格。因此,用户忠诚度越高,就能带来更多的收益。衡量用户忠诚度的方法有以下几种。
1.重复购买次数:在一定时期内,用户对某一个品牌的产品或服务重复购买的次数越多,说明其对这一品牌的忠诚度越高,反之就越低。
2.决策时间得长短:根据消费心理学研究,用户在购买商品时,有要经过仔细挑选和比较的过程。如果用户在购买时决策时间较短,说明用户对该品牌的产品或服务形成偏爱,因此忠诚度也越高,反之越低。
3.对价格的敏感度:一般情况下,用户对产品或服务的价格都是很敏感的。但是,对于喜爱品牌的产品或服务,用户对其价格变动的承受能力会更强,因此忠诚度也就越高,反之越低。
4.对竞争者的态度:用户对某一品牌态度的变化,多数情况是通过与竞争对手产品相比较而产生的。可以根据用户对竞争者产品的态度来判断用户的忠诚度。如果用户对其他竞争产品没有兴趣,则说明对该品牌忠诚度高,反之就低。
5.对产品问题的态度:任何一个产品都可能因某种原因出现问题。如果用户对某一品牌的忠诚度高,就会对产品问题以宽容的态度对待。反之,则会非常敏感,甚至不再使用该产品或服务。
& 用户留存率。
用户忠诚度衡量的是重复购买的人数,而用户留存率也是以类似的方式衡量用户满意度。用户留存率衡量的是公司在一定时期内留存用户的百分比。对于销售IT服务的软件公司而言,用户留存率对于衡量用户满意度至关重要。因为,不满意的用户可能寻找能够为其提供更多价值的替代产品。当企业发现用户留存率降低时,就说明企业的产品或服务哪里有问题,或者竞争对手为用户提供了更多价值的 IT服务。
用户留存率的计算公式为:用户留存率=((EC-NC)/SC)*100%
其中 EC 表示一段时期末的用户数量,NC 表示此期间的新增用户数量,SC 是该时期开始时的用户数量。
举个例子:假设新发布了一个产品功能,当月开始时有1000位用户,在月末时有1200位用户,同时该月增加了 400 位新用户,通过公式计算:(1200-400)/1000=80 % 可以看出,该月的用户留存率为 80%,对于 IT 服务用户更加关注用户体验,可以通过 DevOps 实践不断提高产品或服务的用户体验来提升用户留存率。
市场占有率
市场占有率对于确定企业收入占行业总收入的百分比至关重要。当企业获得的市场占有率增多并且用户留存率提高时,即可表示发布的软件为用户交付正确的价值。反之,当市场占有率萎缩时,表明竞争对手提供了比你的 IT 服务更多或更好的价值。
在评估市场占有率之前,首先要界定市场,将目标顾客具体化,识别相关的竞争者。原则是,应该从符合顾客需求的角度出发,并且应该以覆盖全部能够满足用户需求的可替代产品和服务的总和的方式进行描述。比如,用户需要在互联网上搜索信息,可以是百度搜索,它的替代品有搜狗搜索、Google 搜索、好搜等,下图是 2020 全年国内搜索引擎占有率的趋势图。

从图中可以看出,在国内搜索引擎市场中百度搜索的市场占有率遥遥领先,第二位是搜狗搜索。市场占有率决定了企业在该领域的利润,也就是搜索服务的业务价值。结合 DevOps 实践来说,假如搜狗搜索利用 DevOps 实践提高了搜索服务版本更新的速度和搜索的准确性,为更多的用户提供了更好的搜索服务,就会有越来越多的用户选择搜狗搜索,此时就会影响到二者的市场占有率。
净推荐值 eNPS
净推荐值是一个针对企业良性收益与用户增长所提出的用户对企业产品或服务信任的概念。一般需要用户回答“您在多大程度上与愿意向您的朋友推荐该公司的产品或服务?”,答案范围为 0~10,10 分表示非常愿意,0 分表示非常不愿意。根据用户的推荐意愿,将用户分为三类:推荐者、被动者和贬损者。推荐者和贬损者是对企业的产品或服务口碑有影响的用户,这两部分用户在用户总数中所占百分比之差,即为净推荐值(Net Promoter Score,NPS)。如下图所示。

净推荐值是一个容易操作、容易理解的数值,但该值本身并不会为业务带来改变。重要的是通过该值来分析用户对产品和服务的满意程度,可以辅助我们对影响用户满意的潜在问题进行根因分析,帮助制订产品规划和改进计划,这才是真正实现商业价值。
DevOps 实践能够为企业带来更好的业务价值,这个结论在 2013 年到 2016 年的 Puppet Labs 的年度 DevOps 现状报告中,已经给出了结论。DevOps 能够从根本上打破开发、运维长期以来存在的冲突,使得高绩效者更加敏捷和可靠。同时,也为企业带来了利润率、市场份额和生产效率大幅提升的丰厚回报。
总结
本课时主要介绍了实施 DevOps 的最终目标——实现业务价值。在企业里,DevOps 是为业务服务的,是为了实现企业的业务目标,最终实现企业目标。如果业务不成功,DevOps 有多么的成功都是徒劳的。对于业务价值的度量需要从最终用户的角度出发,衡量用户对产品或服务的认可程度,以及企业在市场上的份额,因为只有这些数据,才能了解企业业务发展的趋势和问题。
到目前为止,DevOps 度量指标这部分就讲完了。这部分的重点是,指标是用于发现问题、指导改进的,要建设全局的、面向结果的指标,而不是局部的、面向过程的指标。DevOps是否能够帮助企业成功,是通过业务指标来体现的。
相关文章:
DevOps落地笔记-21|业务价值:软件发布的最终目的
上一课时介绍如何度量软件的内部质量和外部质量。在外部质量中,我们提到用户满意度是衡量软件外部质量的关键因素。“敏捷宣言”的第一条原则规定:“我们最重要的目标,是通过持续不断的及早交付有价值的软件使用户满意”。从这一点也可以看出…...
【动态规划】【前缀和】【数学】2338. 统计理想数组的数目
作者推荐 【动态规划】【前缀和】【C算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode:2338. 统计理想数组的数目 给你两个整数 n 和 maxValue ,用于描述一个 理想…...
【已解决】onnx转换为rknn置信度大于1,图像出现乱框问题解决
前言 环境介绍: 1.编译环境 Ubuntu 18.04.5 LTS 2.RKNN版本 py3.8-rknn2-1.4.0 3.单板 迅为itop-3568开发板 一、现象 采用yolov5训练并将pt转换为onnx,再将onnx采用py3.8-rknn2-1.4.0推理转换为rknn出现置信度大于1,并且图像乱框问题…...
多路服务器技术如何处理大量并发请求?
在当今的互联网时代,随着用户数量的爆炸性增长和业务规模的扩大,多路服务器技术已成为处理大量并发请求的关键手段。多路服务器技术是一种并行处理技术,它可以通过多个服务器同时处理来自不同用户的请求,从而显著提高系统的整体性…...
SpringBoot - 不加 @EnableCaching 标签也一样可以在 Redis 中存储缓存?
网上文章都是说需要在 Application 上加 EnableCaching 注解才能让缓存使用 Redis,但是测试发现不用 EnableCaching 也可以使用 Redis,是网上文章有问题吗? 现在 Application 上用了 EnableAsync,SpringBootApplication࿰…...
Linux------命令行参数
目录 前言 一、main函数的参数 二、命令行控制实现计算器 三、实现touch指令 前言 当我们在命令行输入 ls -al ,可以查看当前文件夹下所有文件的信息,还有其他的如rm,touch等指令,都可以帮我们完成相应的操作。 其实运行这些…...
LLM少样本示例的上下文学习在Text-to-SQL任务中的探索
导语 本文探索了如何通过各种提示设计策略,来增强大型语言模型(LLMs)在Few-shot In-context Learning中的文本到SQL转换能力。通过使用示例SQL查询的句法结构来检索演示示例,并选择同时追求多样性和相似性的示例可以提高性能&…...
双非本科准备秋招(19.2)—— 设计模式之保护式暂停
一、wait & notify wait能让线程进入waiting状态,这时候就需要比较一下和sleep的区别了。 sleep vs wait 1) sleep 是 Thread 方法,而 wait 是 Object 的方法 2) sleep 不需要强制和 synchronized 配合使用,但 wait 强制和 s…...
使用SpringMVC实现功能
目录 一、计算器 1、前端页面 2、服务器处理请求 3、效果 二、用户登陆系统 1、前端页面 (1)登陆页面 (2)欢迎页面 2、前端页面发送请求--服务器处理请求 3、效果 三、留言板 1、前端页面 2、前端页面发送请求 &…...
spring aop实现接口超时处理组件
文章目录 实现思路实现代码starter组件 实现思路 这里使用FutureTask,它通过get方法以阻塞的方式获取执行结果,并设定超时时间: public V get() throws InterruptedException, ExecutionException ;public V get(long timeout, TimeUnit un…...
c++设计模式之装饰器模式
作用 为现有类增加功能 案例说明 class Car { public:virtual void show()0; };class Bmw:public Car { public:void show(){cout<<"宝马汽车>>"<<endl;} };class Audi:public Car { public:void show(){cout<<"奥迪汽车>>&q…...
WordPress如何实现随机显示一句话经典语录?怎么添加到评论框中?
我们在一些WordPress网站的顶部或侧边栏或评论框中,经常看到会随机显示一句经典语录,他们是怎么实现的呢? 其实,boke112百科前面跟大家分享的『WordPress集成一言(Hitokoto)API经典语句功能』一文中就提供…...
【退役之重学前端】vite, vue3, vue-router, vuex, ES6学习日记
学习使用vitevue3的所遇问题总结(2024年2月1日) 组件中使用<script>标签忘记加 setup 这会导致Navbar 没有暴露出来,导致使用不了,出现以下报错 这是因为,如果不用setup,就得使用 export default…...
[linux]-总线,设备,驱动,dts
1. 总线BUS 在物理层面上,代表不同的工作时序和电平特性: 总线代表着同类设备需要共同遵守的工作时序,不同的总线对于物理电平的要求是不一样的,对于每个比特的电平维持宽度也是不一样,而总线上传递的命令也会有自己…...
python3实现gitlab备份文件上传腾讯云COS
gitlab备份文件上传腾讯云COS 脚本说明脚本名称:upload.py 假设gitlab备份文件目录:/opt/gitlab/backups gitlab备份文件格式:1706922037_2024_02_06_14.2.1_gitlab_backup.tar1.脚本需和gitlab备份文件同级目录 2.根据备份文件中的日期判断…...
292.Nim游戏
桌子上有一堆石头。 轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可…...
Spring和Spring Boot的区别
Spring 是一个轻量级的 Java 开发框架,它提供了一系列的模块和功能,例如 IoC(控制反转)、AOP(面向方面编程)、数据库访问、Web 开发等。Spring 的目标是使 Java 开发更加简单、高效和可维护。 Spring Boot …...
备战蓝桥杯---动态规划(理论基础)
目录 动态规划的概念: 解决多阶段决策过程最优化的一种方法 阶段: 状态: 决策: 策略: 状态转移方程: 适用的基本条件 1.具有相同的子问题 2.满足最优子结构 3.满足无后效性 动态规划的实现方式…...
FPGA_ip_pll
常使用插件管理器进行ip核的配置,ip核分为计算,存储,输入输出,视频图像处理,接口,调试等。 一 pll ip核简介 pll 即锁相环,可以对输入到fpga的时钟信号,进行分频,倍频&…...
【实验3】统计某电商网站买家收藏商品数量
文章目录 一、实验目的和要求∶二、实验任务∶三、实验准备方案,包括以下内容:实验内容一、实验环境二、实验内容与步骤(过程及数据记录):三、实验结果分析、思考题解答∶四、感想、体会、建议∶一、实验目的和要求∶ 现有某电商网站用户对商品的收藏数据,记录了用户收藏…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
