DevOps落地笔记-02|影响地图:产品规划和需求分析的利器

从这一讲开始,我们进入 DevOps 正题。按照端到端的顺序,讲解 DevOps 中的最佳实践如何在软件开发过程中发挥作用。所谓端到端,是指从需求提出到需求被发布到生产环境交付给用户的整个过程,可以理解为软件开发的全生命周期。所谓最佳实践,是指被业界广泛采用的、被证明有效的方式方法。这个系列课程会囊括软件开发过程的各个阶段,每一课时都会对应解决这一阶段的某个或某些问题,比如需求阶段如何对用户需求达成共识,开发阶段如何保证提交代码的质量,如何平衡技术债务和开发进度等等。

今天这一讲主要介绍如何使用影响地图这个工具来解决产品规划、里程碑规划和用户需求分析的问题,保证软件开发的大方向是正确的。

为什么要进行产品规划?
首先,请你思考以下问题:

1.你所参与的软件产品开发中,有多少功能是用户真正需要的?

2.你所参与的项目,有没有做到一半就取消的功能和产品?

你可能会长舒一口气,这两种情况太多了。

软件行业是一个成功率较低的行业。据 Standish Group 发布的 CHAOS Report 显示:截至 1994 年,在研究了 8000 多个软件开发项目后,只有 16% 的软件项目是成功,其他 84% 的项目不是失败了,就存在严重的问题。

在十年后的 2004 年,当研究人员将项目样本增加到了 4 万个,发现这时软件项目的成功率提高到了 29%。为什么十年后软件开发的成功率会增加?其中一个原因就是精益思想和敏捷软件开发方法的广泛采用

但根据 2015 年的报告,从 2011 年到2015年,软件项目的成功率并未再有大的提升,基本是在 30% 左右,可以参考下图:
在这里插入图片描述
其中,在这些失败的软件项目中有 31.1% 在未完成之前就取消了。软件项目的失败最终付出了金钱和时间的代价,最重要的是失去的机会是一去不复还的,有些企业失去抢占市场的先机,因此而倒闭。

“项目中途取消”“需求中途取消”“项目延期超支”等问题的出现,最主要的原因有以下两点:一点是“不了解用户真实需求”。在产品在开发阶段,不去调查用户需求,而是想当然的自我设定用户需求, 最终导致所开发的软件和用户想要的不一致。另一点是对产品缺乏整体的认识和理解。产品的规划没有重点,眉毛胡子一把抓,什么想都做,但最终什么都没做好,错失了产品投放市场的最佳机会。

由此可以看出,挖掘用户的真实需求是多么重要。如果一开始没有按照用户的需求进行开发,终究会落得中途废弃的下场。

因此,我们需要找到一种工具或方法,能够挖掘出用户最真实的需求,能够帮助我们对产品进行定义和里程碑规划,确保交付的软件和用户的需求一致,并且是用户最高优先级的需求。这个工具就是——影响地图。

什么是影响地图?
影响地图是一种战略规划方面的技术。它通过清晰的假设、可视化的形式,建立产品功能与商业目标之间的关系,并最终做出更合理的里程碑规划。从而使得开发人员在构建产品和交付过程中避免迷失方向。

影响地图通过回答为什么(why)、谁(who)、怎样(how)、什么(what) 这四个问题来一步一步构建完成一个思维导图。该思维导图一般是由技术人员、业务人员及其他相关人员共同协作完成。最终的思维导图框架如下图所示:
在这里插入图片描述
下面介绍下这四个问题的含义以及在影响地图中的作用:

1. 为什么(why)?
开发过程中,我们首先要回答的问题就是:我们为什么要做这件事?或者我们为什么要开发这个功能?问题的答案正是我们要达到的目标。设立清晰的目标听起来简单,但真正做起来非常不容易。有很多软件项目失败的原因就是目标不清晰。注意,这里的目标指的是业务目标。我们要实现的目标一定是业务目标。这个目标要有明确作用:或者能够为企业带来利润、客户,或者能够为其降低成本。

因此,目标的设定非常关键。切记不可不切实际! 好的目标应该符合 SMART 原则:Specific(明确的),Measurable(可度量的),Action-oriented(面向行动的),Realistic(现实的),Timely(有时限的)。比如:3 个月新增用户 100 万或年底之前完成销售额 1000 万等。

2. 谁(who)?
地图的中间已经放好了要实现的目标,那么接下来的第一层就是表明实现这个目标和哪些人或角色有关系。这个关系可以是正面的,也可以是负面的。比如:谁能帮助实现这个目标?谁会阻碍实现这个目标?这里要尽可能把所有相关联的人列举出来。防止开发过程中突然出现的角色对开发过程造成影响。

罗列出的角色可以分为主要角色、次要角色和场外角色。主要角色一般指软件的最终用户;次要角色一般指软件的提供者,可能会包含产品经理、开发人员、测试人员、运维人员等;场外角色一般指不直接参与的人员,比如高层管理者。

3. 怎样(how)?
第一层列举了实现业务目标影响到的角色。第二层就要考虑这些角色是如何影响最终要实现的目标的?也就是说,考虑角色是如何帮助或阻碍目标的实现?这里就要思考角色会有哪些行为变化。我们可以根据行为的影响大小,实现难易进行优先级地排列。从而根据影响地图的层次结构清晰地掌握是谁造成了这些影响,以及他们如何影响目标的实现?

注意,这里的“影响”影响到的并不是具体的产品功能,而是角色行为的变化。是行为与之前相比的不同之处。比如:页面响应时间缩短 30%,而不是页面响应时间本身。页面响应时间在之前的功能中也有,只是实现时间较长。如果要实现 why 的目标,需要将响应时间缩短30%,这才体现出与之前的变化。

4. 什么(what)?
回答完前面三个问题,就可以讨论具体要做什么才能实现这个影响了。比如:是应该交付一个软件功能,还是组织一场线下活动?这一层就是我们的工作范围了。注意:这里罗列的内容并不是所有要交付的内容,而是交付内容的可选项。我们需要在这一层筛选出有价值的部分,同时过滤掉没有明显价值的部分。有价值的部分就可以作为里程碑规划中的内容,也是我们应当优先完成的内容。比如:为页面数据添加缓存,减少计算逻辑的再次处理等。

通过将交付的内容,内容产生的影响,影响实现的目标串联起来,我们能清楚地知道做这件事情的前因后果。从而在实际开发过程中合理分配资源,不会产生范围蔓延的问题。下面我通过一个实际的例子来描述如何使用影响地图进行需求分析。

使用影响地图进行需求分析实践
在工作中,有用户投诉说打开商品详情页特别慢,加载时间特别长。产品经理针对这个问题建了一个任务“商品详情页异步加载显示”并拖到了下一个迭代里。这种情况下,究竟要不要按产品经理说的去做?如果不做又有什么其他解决方法?下面,我使用“影响地图”来分析一下这个需求。

STEP 1:Why? 先确定任务目标

在这个例子里,产品经理提出“商品详情页异步加载显示”的需求。透过现象看本质,产品经理的最终目的并不是要把商品详情页改造成异步加载的方式,而是要提高商品详情页的加载速度,异步加载只不过是实现这个目标的一种解决方案。因此,我们先定义好目标。
在这里插入图片描述
STEP 2:Who?这个目标跟谁有关?

根据经验,页面加载缓慢的因素有很多种。例如,后台的接口慢、前端的代码加载策略有问题、系统的部署架构需要优化、服务器的配置需要升级、 采用 CDN 进行静态资源分发等。因此要实现这个目标,关联方就会涉及以上提到可能因素相关的所有人员:后端开发人员、前端开发人员、架构师、设备管理员还有在购买设备和 CDN 服务时需要审批的领导等。因此,我们将影响任务目标的角色放入影响地图,如下图所示:
在这里插入图片描述
STEP 3:How?每种角色是如何影响这个目标的?

为了达成目标,我们根据每种角色的职责和工作范围,思考他们用什么方式影响这个目标。比如:后台开发人员提高后端接口提高响应时间,前端开发人员进行前端代码优化,架构师优化系统部署架构,通过负载均衡分散访问压力;静态资源文件单独存放加快下载速度,设备管理员提升硬件性能,领导需要加快方案落地速度等。这里要考虑的是角色行为对目前现状与改进后的差异。有些是从无到有,有些是提高,有些是减少…总之角色的行为要产生变化。这些变化要影响到目标的实现。如下图所示:
在这里插入图片描述
STEP 4:What?具体做什么?

这一步要求我们针对上面每种角色不同的影响,罗列具体的操作内容。也就是说,我要做什么事情才能产生上面这个影响。后台开发人员想要提高后端接口响应速度,可以通过添加分布式缓存、数据库添加索引、数据库读写分离等方式解决。前端开发人员想要优化前端代码,可以通过添加浏览器缓存、采用懒加载方式和采用 CDN 访问静态资源等方式解决。架构师想要优化服务器部署结构,可以通过改单点部署为集群部署,用负载均衡服务器分担单节点压力等方式解决。设备管理员想要提升硬件设备性能,可以通过购买高性能服务器和更换万兆光纤等方式解决。领导想要加快方案落地速度,可以通过及时审批(审查?)审批流程等方式解决。这些就是我们每个迭代需要的具体任务,在迭代结束时应该提供的交付物。如下图所示。
在这里插入图片描述
STEP 5:选择最短路径。

通过上面 4 个步骤,我们形成了一份可供选择的任务清单。接下来我们应该做的并不是完成所有的任务,而是选择其中成本低、效果好的完成。这里需要我们预估每个交付物的效果和成本。如下图所示,我们可以看出效果较好,成本低的交付物有:添加分布式缓存、数据库添加索引、添加浏览器缓存和采用懒加载的方式等。选择这些路径完成,将为我们减轻不少负担。
在这里插入图片描述
STEP 6:里程碑规划。

上一个步骤中选择的最短路径,可以作为第一个里程碑中需要交付的内容。如下图所示,标记为 ① 的任务是需要加入里程碑规划里的任务。待该里程碑完成后,我们要根据度量指标衡量目标达成的效果,再从剩余的选项中继续选择成本低、效果好的任务添加到下一个里程碑规划中,直到目标达成。
在这里插入图片描述
到此,我们利用影响地图对产品经理提出的需求进行了分析和里程碑规划。从而确定了需求目标、具体工作内容和里程碑规划。上面这几个图有几个特点:

& 结构化。

影响地图是结构化的。它的第一层是目标;第二层是影响哪些用户或角色能够实现这个目标,即角色;第三层是这些角色通过什么影响来帮助实现这个目标,即影响;第四层是通过什么具体的功能或事项来实现这个影响,即交付物。层层细化,非常清晰。

& 整体性。

影响地图是从目标到角色,到影响,再到交付物的树状视图。也是一个为产品开发,功能迭代中各相关角色提供的一个共享的、整体的视图。每个角色都能按照这个整体视图的脉络,理清自己的思路和职责,确保交付的功能能够帮助目标的达成。

& 协作性。

影响地图是各个角色沟通和协助的桥梁。各相关角色可以基于这张图来制定产品规划,里程碑规划。相比于过去基于“产品功能列表”的里程碑规划,基于影响地图的里程碑规划可以按照从交付物到目标的最短路径方法进行规划。这样制定出的规划更符合实际需求、更有效。

& 动态性。

这个图是需要不断迭代更新、不断完善的。因为基于影响地图的产品规划和需求分析,都是以假设为前提条件进行的,各一是假设最终的交付物能够产生各角色然后期望的影响,二是假设期望的影响能够达成最初定义的目标。这些假设是需要在迭代过程中进行验证的,然后我们也要根据验证的结果调整后续的里程碑规划。

总结
就像我在本课时开头提到的那样。大多数软件项目之所以失败,是因为在软件开发过程中投入太多精力关注软件功能本身,反而忽略了需要交付的业务目标。产品经理在进行产品规划、里程碑规划和任务分配时,只是给出“做什么”和“怎么做”,很少去解释“为什么”。这样,在不了解目标的情况下,开发工作就像一只没有方向的船在大海上航行一样,虽然一直在航行,却难以到达目的地。

这时候,影响地图这一个工具就成了大船航行的方向和航海图。它可以辅助确定业务目标,将具体的工作任务与目标相关联,在制定里程碑规划时始终考虑目标,并通过最短路径快速实现业务目标。这些对于一个产品,甚至是一个企业都是至关重要的,感兴趣的小伙伴可以在工作中尝试一下。

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

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

相关文章

06 SB3之Thymeleaf实现视图返回

1快速尝试一个返回视图的项目 1.1创建器添加Web, Thymeleaf, lombok依赖创建项目 1.2 编写Controller Controller public class QuickController {RequestMapping("/exam/quick") public String quick(Model model){//业务处理结果数据,放入到 Model 模…

【lesson1】高并发内存池项目介绍

文章目录 这个项目做的是什么?这个项目的要求的知识储备和难度?什么是内存池池化技术内存池内存池主要解决的问题malloc 这个项目做的是什么? 当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc&#xf…

万户 ezOFFICE SendFileCheckTemplateEdit.jsp SQL注入漏洞

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

Redis内存设置

通过redis-cli进入Redis命令行 redis权限认证命令:auth 查看redis内存使用情况的命令:info memory 查看最大内存命令:config get maxmemory 设置最大内存命令:config set maxmemory 也可以通过redis.conf配置文件修改最大内存…

MicroPython核心:映射和字典

MicroPython字典和映射使用称为开放寻址和线性探测的技术,本文详细介绍了这两种方法。 开放寻址 开放寻址用于解决碰撞问题,碰撞是非常常见的现象,当两个条目恰好散列到同一个槽或位置时就会发生碰撞。例如,散列设置如下&#x…

计算机基础知识讲解(原码反码补码)(以及在C语言里面是如何计算和运用的)

补码反码掩码以及原理 补码、反码和掩码是计算机科学中用于表示和处理数值的三种编码方式。 原码 原码是最直观的数值表示方法,它将数值的二进制表示与其符号位结合起来。在原码表示中,正数的符号位为0,而负数的符号位为1。原码的缺点在于…

【pytorch】nn.linear 中为什么是y=xA^T+b

我记得读教材的时候是yWxb, 左乘矩阵W,这样才能表示线性变化。 但是pytorch中的nn.linear中,计算方式是yxA^Tb,其中A是权重矩阵。 为什么右乘也能表示线性变化操作呢?因为pytorch中,照顾到输入是多个样本一起算的&…

比Filebeat更强大的日志收集工具-Fluent bit的http插件实战

文章目录 1.前言2. fluent bit http插件配置以及参数详解3. Http 接口服务3.1 开发Http 接口服务3.2 重启fluent bit向http web服务发送数据 1.前言 Fluent Bit 的 HTTP 插件提供了一种灵活而通用的机制,可用于将日志数据 从各种环境中传输到指定的远程服务器&#…

C++_list

目录 一、模拟实现list 1、list的基本结构 2、迭代器封装 2.1 正向迭代器 2.2 反向迭代器 3、指定位置插入 4、指定位置删除 5、结语 前言: list是STL(标准模板库)中的八大容器之一,而STL属于C标准库的一部分,因此在C中可以直接使用…

TestNG中的DataProviders(@DataProvider annotation)

目录 什么是数据提供者? 数据提供程序及其返回的内容 DataProvider语法 DataProvider注释的方法可以返回什么? 使用数据提供程序的测试用例 如何在测试用例中使用数据提供程序? 其他类中的数据提供程序 在DataProvider带注释的方法中…

深度强化学习(王树森)笔记11

深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…

植物病害检测YOLOV8,OPENCV调用

【免费】植物病害检测,10种类型,YOLOV8训练,转换成ONNX,OPENCV调用资源-CSDN文库 植物病害检测,YOLOV8NANO,训练得到PT模型,然后转换成ONNX,OPENCV的DNN调用,支持C,PYTH…

算法——线性代数——逆序数奇偶

一、逆序数奇偶 分析: 概念: 求一个排列的逆序数奇偶性有两种方法,一种是从前往后遍历数组,另一种是从后往前遍历数组从前往后时,当前数字前面大于它的数字的个数即为它的逆序数个数从后往前时,当前数字前…

Docker的使用方式

一、Docker概念 Docker类似于一个轻量的虚拟机。 容器和镜像是Docker中最重要的两个概念,镜像可以保存为tar文件,Dockerfile是配置文件,仓库保存了很多第三方已经做好的镜像。 基本指令 查找镜像 docker search nginx 拉取nginx镜像 do…

Yalmip学习笔记

这里写自定义目录标题 基本用法变量定义关于大MBilevel programming 注:这篇文章主要是留给自己查漏补缺的,所以从来没有使用过yalmip的读者看着会觉得跳来跳去。 基本用法 建模开始前,使用yalmip(clear)清空Yalmip的内部数据库。 下面是一个…

少儿编程教育:培养未来创新者

在这个数字化飞速发展的时代,编程已经成为了一门新的通用语言。随着科技的不断进步,编程教育正逐渐从高等教育领域向中小学乃至幼儿园渗透。6547网认为少儿编程不仅是一种技能的培养,更是对孩子们逻辑思维、解决问题能力和创造力的锻炼。图形…

Spring 中获取 Bean 对象的三种方式

目录 1、根据名称获取Bean 2、根据Bean类型获取Bean 3、根据 Bean 名称 Bean 类型来获取 Bean(好的解决方法) 假设 Bean 对象是 User,并存储到 Spring 中,注册到 xml 文件中 public class User {public String sayHi(){retur…

Mac安装及配置MySql及图形化工具MySQLworkbench安装

Mac下载配置MySql mysql下载及安装 下载地址:https://dev.mysql.com/downloads/mysql/ 根据自己电脑确定下载x86还是ARM版本的 如果不确定,可以查看自己电脑版本,终端输入命令 uname -a 点击Download下载,可跳过登录注册&…

Oracle 面试题 | 01.精选Oracle高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

python统计分析——中心极限定理

参考资料:用python动手学统计学 对于任意总体分布,样本容量越大,随机变量的和的分布越接近正态分布,这就是中心极限定理定理。 以掷硬币为例讲解。模拟投硬币1万次中,正面朝上的次数的分布。 import numpy as np impo…