草庐IT

5 Why 分析法,一种用于归纳抽象出解决方案的好方法

程序员泥瓦匠 2023-03-28 原文

最近在看了《微信背后的产品观 - 张小龙手抄版》,其中有段话如下:

用户需求是零散的,解决方案是归纳抽象的过程

那如何归纳抽象呢?是否有一定的实践方法论呢?经过一轮探讨和学习,有这些答案:

  • 5 Whys 分析法
  • U 型思考法
  • 等等

二、5 Whys 分析法

5 Whys 法,最初由丰田佐吉开发,并在丰田汽车公司的制造方法演变过程中被使用。它是解决问题的一个重要组成部分,也作为丰田生产系统入门培训的一部分

5 Whys 法的定义,是一种解决问题的方法,探索特定问题的潜在因果关系

其核心过程就是不断的追问。通常情况下,5 次迭代追问足以揭示根本原因。但在某些情况下,可能需要更多或更少的追问,这取决于问题根本的深度

5 Whys 法,有几个关键点

  • 注意因果关系的逻辑,不能因果倒置
  • 原因依赖于事实和数据,但数据常常不是唯一依据
  • 原因尽可能评估事(比如产品功能、比如某某流程),而不是人

所以如何处理用户需求,按 5 Whys 法具体归纳总结的过程,可以按如图所示进行:

1、针对一个需求(表面问题),提出第一个为什么

2、寻找原因后,会出现多个可能的原因

3、筛选真实的原因

4、迭代并直至找出根因,然后输出需求对应的解决方案

三、U 型思考法

跟 5 Whys 分析法,有异曲同工之妙的 U 型思考法,我记得沈拓老师有个课程讲的就是这个,在这里我也小结分享下

U 型思考法是一个找准问题和看透本质的思维模型。其核心就是从表象问题不断的深挖其本质,再基于本质问题,再找出解决方案。主要分为 4 个步骤:

1、定义核心问题

2、发现本质问题

3、找到本质解决方案

4、执行并解决问题

这个通常是打破了见招拆招的直线式思维方式,尤其在复杂问题中,用 U 型思考法,能有效归纳并抽象出解决方案

所以如何处理用户需求,按 U 型思考法得注意几点:

  • 基于产品事实,提出用户需求
  • 基于用户需求,提出本质解释
  • 基于本质解释,提出可能性解决方案
  • 执行当下最合适的解决方案,最后解决用户需求

四、小结

用户需求虽然零散,但很重要。只有透过本质,去洞察用户感受与诉求,才能助力业务增长

可以通过本文分享的这两种方式进行归纳抽象用户需求,这样才能做出更好的产品,最终用户才会为产品买单

原文链接 https://bysocket.com/5-why/

出处:公号「程序员泥瓦匠」
博客: https://bysocket.com/

内容涵盖 Java 后端技术、Spring Boot、Spring Cloud、微服务架构、运维开发、系统监控等相关的研究与知识分享。

有关5 Why 分析法,一种用于归纳抽象出解决方案的好方法的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  3. Ruby 元类 : why three when defined singleton methods? - 2

    让我们计算MRI范围内的类别:defcount_classesObjectSpace.count_objects[:T_CLASS]endk=count_classes用类方法定义类:classAdefself.foonilendend然后运行:putscount_classes-k#=>3请解释一下,为什么是三个? 最佳答案 查看MRI代码,每次你创建一个Class时,在Ruby中它是Class类型的对象,ruby会自动为这个新类创建“元类”类,这是另一个单例类型的Class对象。C函数调用(class.c)是:rb_define

  4. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  5. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  6. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  7. ruby - "undefined method"用于 rails 模型 - 2

    我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

  8. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

    我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

  9. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  10. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

随机推荐