用户故事地图

article/2025/8/23 10:36:08

用户故事地图

用户故事是描述用户需求分析的一个好方法,可以backlog变成一个二维地图,从而容易看到整个规划的全貌,帮助开发人员快速的了解客户的需求,并确定产品模块的实现优先级,实现最大用户价值,学会讲一个好的用户故事是很有用的。

一个基本的用户故事包括三个要素:角色、活动、商业价值,其固定的描述格式:作为什么角色,要进行什么活动,才能实现什么商业价值。这个固定语句格式,只是了解用户故事的第一步,用于描述一些简单的用户故事实际中的用户故事是很复杂的,简单的套用固定语句格式,只能带给我们一堆零散的故事点。从公司角度来讲,一个好的故事,应该是具有很好的商业价值体现,尤其是以客户为中心的情况下是具有很强的说服力的。而且,在项目协作的过程中,一个好的故事是很容易促成大家的共识,一致协作,制作出更好的计划,便于减少工作开发量,更快的学习和按时发布。

之前在进行工作分析、计划制定的时候,总是怀着一步到位的想法,给一个最终的完美的解决方案,试图快速开工、一气完成,但结果却得不到好的反馈想了很多,没有站在用户角度,不清楚用户的诉求,无法针对相应的故事,给出针对性的、阶段性的计划,方便我们进行任务的评估,具体的落地实现,而且,向别人解释的时候,也有理有据的去说服别人。

另一方面,在描述用户故事的时候,尽量不要过多涉及到技术细节,因为设计人员更关注的是用户使用、功能实现,企图给用户呈现一个完整的功能图。之前在进行系统设计的时候,犯的一个比较严重的错误,在未讲清故事的情况下,直接给了一个大而全的设计图,讲了一个史诗级的故事庞大的故事,能给我们一个初步的认知,但未遵从敏捷开发的原理,给出了一个瀑布式工作量评估,乍一看,貌似给出了一个很好的设计思路以及工作量评估,但其实隐藏了很多隐患:

1、用户故事不明确:一个好的设计应该是源自一个好的用户故事,但是我在还没有讲清用户故事的前提下,就给出一个庞大的系统设计,一般而言,这样的一个设计看起来很好看,但是却很难说服别人;

2、用户故事粒度不够小:故事应该是从大到小去分解的,按照每一个小的粒度故事去实现,才是正确的方法;

3、未遵从敏捷开发的准则:给出一个大而全的设计,企图以瀑布式的开发完成我们的脚本开发,这在当前的一个开发准则下是极为不合适的,一旦发现目标不合适,或是出现偏差,那么瀑布式的开发将带来更为大的人力物力损失,而敏捷迭代这种循序渐进的方式就可以

4、未给出一个最小的解决方案:设想的东西,永远比实际开发的东西要多,因此,我们需要从最小型、可行走的解决方案入手。

庞大的史诗级故事很容易造成预算的超出、延期等措手不及的事故,不容易兼容细小软

件需求变化。

后来偶然发现一本Jeff Patton《用户故事地图》,里面有非常好的讲故事、描述问题的方式,是团队进行设计、规划、沟通交流非常好的方法,也觉察到方法论的重要性。但是书中的的一些观点可能不是很清晰,但是确实受益匪浅,也建议大家去看一下。这里给出理解的故事地图绘制方法,方便大家快速理解入门。

用户故事地图的本质是为了更好的沟通,不为了写用户故事而写用户故事,要抱着一颗改变世界的心,这是制定一个完善的计划的前提。用户故事借鉴了敏捷开发的原则,需要多人共同交流完成,碰撞思想的火花。作为用户故事的书写者,其充当了一部分产品经理的角色,但要明白,产品设计,绝不能独自坐在一起,而是要和工程师、用户等深入交流后,进行深入的分析设计。

那么如何完成一个好的用户故事地图呢?可以使用卡片的驱动方式进行。这里方式有很多种,不过采用纸质卡片有一定的优点:随时写随时贴;随时撤销、修改;随时更改顺序;大家很方便一览全局,可长时间反复思考观看。重要的一点,其他人可很快融入,并通过卡片补充提出建设性的想法。

绘制一个好的用户故事地图,可以按照下述方式进行:

1、团队内达成初步共识:

为什么要在部门内部达成一致的共识呢?达成共识后,不仅仅是为了认清我们的目标,并且这也是我们去沟通、交流、促进团队协作的资本否则有时候连我们自己都无法说服。

达成一致的、初步的共识,可以从下面三个方面讨论:

a、正在解决什么问题?明确当前的痛点。

b、为谁解决?明确用户的类型、群体。

c公司/用户等如何从开发的产品中受益?明确公司/产品在解决这些痛点之后的收益。

回答完这几个问题,基本就能明确我们想要达成目标。

2给用户画像:

寻找故事相关者,这里的故事相关者,可以是用户、设计者、开发者等。每个用户的使用方式、行为、场景都不一样,产品的开发,需要尽可能的了解客户的需求,这样做出的产品一个产品。对于提出的每一个用户需求,使用卡片记录下来,用户信息需求包括如下

a、客户类型

b、使用动机得到的好处

c、客户使用的方式、频率

通过跟用户、开发人员等进行深入交流,列出各类用户的需求并以卡片的形式记录下来。可以使用whowhatwhy进行询问,确保能沟通到用户的真实诉求如果有特别强烈的需求,那么就特殊标记出来,确保我们后续的讨论中,不偏离我们用户的初衷。这里也可以采用QCC的方式,深入探讨用户的需求、痛点,任何小的方式都可以先写下来,确保不遗漏任何用户的需求。

3、完成基本的故事框架:  

故事框架设计,可以遵循如下原则:

A、需要一个引导者,能完整的描述产品的目标、用户的场景等,并引导与会者进行故事的探讨,否则可能会陷入秩序混乱,或者一言不发地情况;

B、故事探讨的人数不要太多,3-5人就可以。过少的人提出的意见不足,而过多的人参与讨论,不仅造成人力时间浪费,而且可能会导致各执一词,造成长时间的无意义的讨论。

C、先完成故事主脉络。这里就要参考第二步的用户画像,只有明确用户的需求,才能知道我们需要完成的故事是什么样子的,应该遵循从大到小的故事描述。

基本上,完成故事的脉络之后,我们就可以初步窥见故事的全景图,这对我们把控全局有很好的把握,至少不会偏离故事的主次。

用户故事的地图框架如下:

 

  4、拆分故事

故事的主脉络有利于我们窥见全局,但是不具备落地实施的指导性,因此需要需要将故事拆分至可独立执行、可测试的粒度。在拆分每个故事的时候,可发挥与会者的主观能动性,将每一个想法都写到独立的标签上,记录下来,并评价拆分故事的可行性:如达成这个小故事,用户可以完成什么功能。完成后,对小的用户故事进行分类,确保其归类到正确的故事主脉络里面,而对话讨论是拆分故事的最好方式。每一个小故事应遵循:

A、工作量保持在单人花费3天以内;

B、每个小故事都是一个独立的模块,可以执行、可以测试、有确定责任人的

故事的主脉络是讨论的入口,而小故事则具有具体落地指导意义。

5、排定故事优先级选取最小可行性方案

在拆分完故事之后,可能会陷入一个小故事的卡片海洋之中,而现在我们的目标就是寻找一个最小的可行性方案。因为客户的需求,永远是无穷无尽的,如果从一开始就企图满足用户所有的需求,那么就会陷入一个无尽的恶性循环里面,要么是不知如何开始,要么只是完成一堆毫无用处的功能组合产品而已。而且,庞大而复杂的功能设计开发不仅浪费巨大的财力人力,而且得不到预期的效果。因此,产品实现的目标,从来都不是满足所有人的需求或功能,而是开发尽可能少的功能如果能以20%的功能,满足80%人的需求,那么这个产品就成功了一大步

这个时候就需要进行优先级的排序,从上到下,依次确定卡片的执行优先级,并按照敏捷的方式给出最小可行性方案并交由用户进行验证,因为,想要开发的功能,总是超出你要投入的资源。

这个时候就显现出卡片的优势了,可以很快的进行上下、左右移动。而优先级的排序准则有很多,通过共同探讨,并遵从用户收益最大,以及工程复杂度最小的方式。移动完成后,就可以从上到下,按优先级确定大致的迭代的方式,最终完成的地图会是这样:

 

说明一下:这个故事地图中的主脉络有两层:最上一行有4个卡片,是最大的故事脉络,第二层蓝色的卡片是根据需要进一步拆分的故事主脉络,这两行的故事主脉络划分,很容易向其他人介绍我们的全景图。而第一个蓝色的卡片“Search Email”,又可以拆分成下面的5个小故事,这些小的故事的都是很容易落地实现的。对于不同的内容,可以使用不同的颜色的卡片进行实现。

这个故事地图,其实也响应了敏捷的宣言:可以工作的软件胜过面面俱到的文档。通过Realease迭代发布的形式,逐步执行故事。

  6、度量、反馈、修正故事

开发过程中,故事的实现方式、意图肯定会存在一定的偏差,需要不断纠错改正,这也是敏捷的理念之一因此,故事地图完成之后,可以一直保留下来,在实现一个阶段之后,回过头来,根据用户的反馈,增加风险故事,并修改完善用户地图。

综述:

最终,一个好的用于沟通的用户故事地图实现方式,可以是如下这种流程:

 

  最后,我们能看到一面墙,墙上挂满了idea:用户的需求、故事的划分、开发的流程等等,全景图会很清晰,后续的方案,可以随时加入。当然,用户故事的本质是为了更好的沟通交流,最后的计划制定还是需要遵循一些相应的设计准则。

最后,借书中结尾的一段话,《无间道》中陈永仁的那句话:明明三年,三年后又三年,三年后又三年,差不多十年了,老大。。。这显然就是一个不合理的工作评估。


http://chatgpt.dhexx.cn/article/pknwIseI.shtml

相关文章

敏捷开发日常跟进系列之三:故事板,看板

这是敏捷开发日常跟进系列的第三篇。 (栏目目录) 故事板和看板其实不是一个东西,前者是最初的敏捷开发里边的东西,受到了后者的启发产生的;而后者是制造业的东西,具体内容请参考末尾的百度百科。但是在敏捷开发里边提到这两样东西,可以认为大致相同。 故事板 简单说,故…

敏捷管理的利器:故事墙

文章来源:公众号-智能化IT系统。 引言 故事墙是敏捷管理的一个高效手段。只要妥善运用,其能够带来的好处远远超出管理理论中提及的。 试想如下一些问题: 假如一个团队,有一个环节(例如系统测试)&#x…

【Web前端】html+css+javascript

1 HTML 1.1. HTML基本概念 HTML:hyper text markup language 超文本标记语言&#xff0c;就是超出纯文本范畴的语言&#xff0c;其中既可以定义文本也可以定义图片&#xff0c;超链接等等非文本性质的内容。 HTML语言是由标签<>构成&#xff0c;一般是成对出现<>…

HTML+CSS基础知识

一、HTML基础 1.html的基础结构&#xff1a; 2.html中的语法&#xff1a; - 在尖角符号后面的第一个英文单词就是当前标记的名称 - 标记也可以称为标签或者元素 - 双标签结束的反斜杠不能省略 但是单标签的反斜杠是可以省略的 - 在标签名称后面空格都是当前标签的属性(描述…

用HTML,css,boostrap写一个综合大型购物网站

用HTML&#xff0c;css,boostrap写一个综合大型购物网站 首先来看看页面的效果&#xff1a; 有需要的可以参考 首先是首页index: <!DOCTYPE html> <html><head><!-- 先把bootstrap里面的css、jQuery和bootstrap.js三个文件按顺序加载进来 --><me…

HTML+CSS项目案例

文章目录 1、表格练习2、文本样式练习3、图片标签练习4、盒子模型练习一5、盒子模型练习二6、盒子模型练习三7、浮动练习8、边框练习一9、边框练习二10、图文混排11、列表练习 1、表格练习 案例演示&#xff1a;&#xff08;table、tr、td、th等&#xff09; 实现代码&#x…

用css简单实现三级导航栏

关键属性 display&#xff1a;none 隐藏元素 display&#xff1a;bolck 显示元素 实例 CSS样式 <style>* {margin: 0;padding: 0;}li {list-style: none;}a {text-decoration: none;}.nav1 {width: 400px;height: 50px;/* border: 1px solid red; */margin: 200px aut…

使用 CSS3 实现转盘抽奖效果

微信和大型商场常常会有转盘抽奖的活动,比如上海移动和教授的抽取积分活动等。我们可以通过CSS3的transform属性来实现转盘的旋转。同时,transition属性实现过渡动画,它具有四个子属性,依次为 1. transition-property(过渡属性,默认为all) 2. transition-du…

css module

css module 一、css module1.思路2.实现原理3.如何应用样式 一、css module 1.思路 通过命名规范来限制类名太过死板&#xff0c;而css in js虽然足够灵活&#xff0c;但是书写不便。 css module 开辟一种全新的思路来解决类名冲突的问题 css module 遵循以下思路解决类名冲突…

css 预处理器

由于多个项目中用到了sass和less&#xff0c;所以就学习了一下相关知识&#xff0c;记录下来方便随时查看。 前言 css是用来编写网站样式&#xff0c;但是&#xff0c;其写法比较一成不变。 如果想要使用 css 实现 js 一样的变量、常量等&#xff0c;就会比较臃肿&#xff0…

【CSS】css快速更改某个字体图标,使用content插入字符

遇到一个小问题&#xff1a;使用的是组件库&#xff0c;但是这个组件没有提供更改图标的接口&#xff0c;需要更改这个特定的图标&#xff0c;但是最好不更改dom 解决办法 由于系统已经使用了这个组件库&#xff0c;那么就有了他的图标内容&#xff0c;可以先到组件库官网找到…

W3C推荐的新布局模式 【CSS Flex布局】详解

本文目录 概述属性弹性容器的属性&#xff08;父级&#xff09;displayflex-directionflex-wrapflex-flowjustify-contentalign-itemsalign-contentgap, row-gap, column-gap 弹性项目的属性&#xff08;子项&#xff09;orderflex-growflex-shrinkflex-basisflexalign-self 示…

CSS变量(CSS Variables)

概述 如果突然有一天,当你页面的主题色发生变化时,有许多元素的颜色要一起变化,这是你会考虑怎么做呢?使用Less/Sass/Stylus来定义一个颜色变量?还是专门去定义多了个类名来控制元素? 使用第一种方法,有他的弊端,浏览器无法识别CSS预处理器的语法,所以我们都会将Less…

详细介绍css3中的变量使用

CSS3新功能之变量&#xff1a;variables css3为我们提供了一个强大的功能自定义属性&#xff0c;也就是变量&#xff0c;他能让我们更改色系、皮肤、自适配变得简单。我们只需要更改一些我们事先定义好的变量就可以轻松实现各种效果。特别是我们在开发大型项目的时候有多处使用…

详解CSS(一)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、的博客 &#x1f6fa;系列专栏&#xff1a;CSS专栏 &#x1f6b2;给大家推荐一个网站&#x1f609;很实用&#x1f61a;我…

读书笔记《MySQL技术内幕:InnoDB存储引擎》第5章 索引与算法

索引是应用程序设计和开发的一个重要方面。若索引太多&#xff0c;应用程序的性能可能会受到影响。而索引太少&#xff0c;对查询性能又会产生影响。要找到一个合适的平衡点&#xff0c;这对应用程序的性能至关重要。 一些开发人员总是在事后才想起添加索引——我一直认为&…

32.项目总结--技术点部分

项目整体架构 Docker 虚拟化容器计数,Docker基于镜像,可以秒级启动各种容器,每一种容器都是一个完整的运行环境,容器之间相互隔离; 安装docker 安装前卸载原有的docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…

【HCIA-Datacom V1.0培训教材】广域网技术

局域网LAN&#xff08;Local Area Network&#xff09; 广域网WAN&#xff08;Wide Area Network&#xff09; 数字数据网DDN&#xff08;Digital Data Network&#xff09; 帧中继FR(Frame Relay) 同步数字结构SDH&#xff08;Synchronous Digital Hierachy&#xff09; …

一文了解Docker容器技术的操作

一文了解Docker容器技术的操作 前言 相信点进这篇文章的Coder&#xff0c;不管是在各大技术论坛上、技术交流群&#xff0c;亦或招聘网上&#xff0c;应该都有见到过Doker容器技术的面孔&#xff0c;随着社会节奏的加快以及迫于生活的压力&#xff0c;在计算机技术日新月异的今…

自然语言处理简介(1)---- 服务梳理与传统汉语分词

文章大纲 1.Nlp技术体系简介1.1 基础技术1.2 Nlp 核心技术1.3 NlP&#xff08;高端技术&#xff09; 2.知名NLP 服务系统简介2.1汉语分词系统ICTCLAS2.2 哈工大语言云&#xff08;Language Technology Platform&#xff0c;LTP&#xff09;2.3 Amazon Comprehend2.4 阿里云NLP2…