5whys分析法在美团工程师中的实践

前言

网站的质量和稳定性对于用户和公司来说至关重要,但是在网站的快速发展过程中,由于各种原因导致事故不可避免的发生,这些大大小小的事故对公司难免会造成一些负面的影响,为了避免同类事故的再次发生,美团的工程师们从事故中不断学习,对每次事故进行深入分析和总结,形成了一种 Case Study 文化,并结合一套科学的分析方法-5whys分析法,深入分析事故背后的根本原因和流程漏洞,使得事故发生的频率大大降低。

在本文中,首先对5whys分析法的进行简单介绍,然后再结合美团工程师Case Study 的案例去分享这套分析法的在美团的实践。

5whys分析法

5whys分析法,又名why-why分析法,它是根本原因分析(Root Cause Analysis) 的一种具体方法,适用于去分析一些简单和难度适中的问题。简单的说,就是针对问题持续的问5个为什么(通常需要至少5个“为什么”,但5个why不是说一定就是5个,可能是1个,也可能是10都没有抓到根原),通过这样一种分析思路,能很快找到问题深层次的根本原因以及工作流程上的漏洞,并据此再制定预防措施,防止问题重新出现或再次发生,大大降低解决问题的成本。

代码review流程

在美团,5whys分析法作为每个工程师需要掌握的一种工作方法,已经广泛应用到 Case Study 的原因分析中去。

利用5why分析法来进行Case Study 原因分析的几个步骤

Step 1:对事故进行详细描述

__“If I had an hour to save the world,I would spend 59 minutes defining the problem and one minute finding solutions.” – Albert Einstein __

对于事故进行定义和描述比较重要,这一步不可省略。在描述事故时,我们基于5W2H(What,Who,Where,When,Why,How,How much)分析法来对事故进行描述,说清楚事故发生的时间,地点,发现人,怎样解决的,解决的时间等等。

  • What:描述下发生了什么问题。
  • Who:描述下责任人是谁,谁发现的问题,谁解决的问题。
  • Where:描述下在哪里发现的事故。
  • When:描述下事故的时间因素,什么时候发现的事故,什么时间解决的事故。
  • Why:描述下为什么是个事故,强调事故的影响。
  • How:描述下事故是怎样被解决的。
  • How much:描述下事故的可量化的影响范围和造成的损失,影响了多少用户,造成了多少损失等等。

Step 2:提问:为什么这问题会发生?

识别并确认导致当前问题发生的直接原因。如果原因是可见的,验证它。如果原因是不可见的,考虑潜在原因并核实最可能的原因。

Step 3:检验上一步中发现的原因是否是根本原因?

检查上一步中的回答的原因是否是导致事故的根本原因,如果不是,则重复Step2和Step3,直至找到事故发生的根本原因为止,最终通过这样一个过程建立一个通向根本原因的原因/效果关系链。这个过程一般需要持续5次为什么(可能少于或多于5个),这也是5whys分析法名字的由来。

Step 4:找到问题发生的根本原因,制定执行计划并修复

找到问题发生的根本原因后,采取明确的措施和手段去处理问题,预防和避免类似问题的再次发生。对于采取的纠正措施和手段,需要问问“采取后能否避免问题的再次发生”,如果不能,再找到其他的解决之道。

案例分析

2014年某月某日,某内部App ios版应用相关负责人小美接到大量用户投诉,ios的App启动时出现闪退现象,导致大量用户不能进入应用,虽说接到反馈后及时修复,但还是造成了一些不良的影响,针对此次事故,领导要求对事故进行总结,要求深入分析事故的原因。

小美基于5W2H分析法先对事故进行描述:

事故起止时间:2014年某月某日 10时30分-2014年某月某日 10时40分

责任人:小美

事故详情:小美对此次事故进行了详细描述,包含整个事故经过的时间、事件,在什么时间节点什么人做了什么事,谁发现的问题,谁解决的问题,怎样解决的问题。

影响范围:此次事故造成的影响和损失。

然后小美再结合5whys分析法中的原因分析实践深刻总结造成此次事故的所有原因:

1)为什么会发生此次事故?

事故的直接原因是由于某个服务端API的返回值新增加了一个字段导致此次事故的发生。

2)为什么服务端API的返回值变更会影响ios版app的崩溃而android版正常?

主要还是由于ios版代码兼容性问题,服务端api的变更导致了类似空指针异常的发生。

3)为什么事故发生前未能发现程序代码的兼容性问题而导致质量低的代码到线上?

一方面是由于小美是新人;另一方面组内缺少对代码进行质量控制的手段。

4)为什么组内没有对代码进行质量控制的手段呢?

一方面由于组内人手不足;另一方面缺少一个比较好的代码review流程去推动质量控制。

5)为什么不尽早推动这套代码review流程去预防类似事故的发生?

组内人员对代码质量的重视程度不够,存在侥幸心理。

结合5whys分析法的实践,从以下3个层面分析了此次事故的原因:

1、为什么会发生?

2、为什么没有提早发现?

3、为什么没有从系统或流程上预防事故?

表面上看因为服务端API的变动造成了此次事故,次级原因是由于IOS程序的兼容性导致,但其发生的根本原因还是在于开发人员对于代码质量存在侥幸心理并且上线流程上有漏洞,未能建立一套合理的代码reivew和审核机制,只有制度或流程上的改进才能尽量避免类似问题的再次发生。

找到根本原因后,小美所在团队针对此次事故做了一个Case Study 总结,强调代码质量的重要性,并将代码Review的流程提上日程,利用公司Git平台提供的fork和pull request机制建立起一套合理的代码review流程,并要求组内人员遵守这套规则,使得代码质量大大提升,降低了事故的风险。

代码review流程

总结

Case Study 作为美团工程师的必修课之一,如果不去结合5whys分析法去实践,只顾解决表面原因而不管根本原因,可能事故发生后采取临时措施改进后就忘了,问题免不了要复发;但通过5whys分析法这样一种分析过程,工程师们学会分析问题由表入里,直指问题要害,大大降低了解决问题的成本,从而间接提高了工作效率。

对于工程师的成长,技术能力至关重要,但是职业技能和通用素质的提高对于工程师的长期成长来说也是很重要的。在美团的工作中,工程师们不光在技术能力得到提高,并且还能掌握很多科学的工作方法,5whys分析法仅仅是其中之一,后续再分享其他方法给大家。

参考

  • 根本原因分析
  • 为什么一为什么分析法
  • 精益创业
  • Stash 1.3: Enterprise Git Gets Social with Pull Requests

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 382. 链表随机节点(概率)

1. 题目 给定一个单链表,随机选择链表的一个节点,并返回相应的节点值。保证每个节点被选的概率一样。 进阶: 如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现? 来源:力扣&am…

图谱实战 | 斯坦福黄柯鑫:图机器学习在生物图上的应用

转载公众号 | DataFunSummit分享嘉宾:黄柯鑫 斯坦福大学 博士生编辑整理:元玉蒲 西北大学出品平台:DataFunTalk导读:大家好,我叫黄柯鑫。我现在是斯坦福大学的计算机科学博士第一年级,研究方向是机器学习在…

排得更好VS估得更准VS搜的更全「推荐、广告、搜索」算法间到底有什么区别?...

文 | 王喆源 | 王喆的机器学习笔记作为互联网的核心应用“搜广推”,三个方向基本都是互联网公司的标配。各头部公司的搜广推系统也都各自发展成了集成了多种模型、算法、策略的庞然大物,想一口气讲清楚三者的区别并不容易。不过万事总有一个头绪&#xf…

Solr Facet技术的应用与研究

问题背景 在《搜索引擎关键字智能提示的一种实现》一文中介绍过,美团的CRM系统负责管理销售人员的门店(POI)和项目(DEAL)信息,提供统一的检索功能,其索引层采用的是SolrCloud。在用户搜索时,如果能直观地给出每个品类的POI数目&am…

LeetCode 129. 求根到叶子节点数字之和(DFS)

1. 题目 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的…

推荐精排之锋:FM的一小步,泛化的一大步

文 | 水哥源 | 知乎1.如果说LR是复读机,那么FM可以算作是电子词典2.泛化就是我没见过你,我也能懂你,但是泛化有时候和个性化有点矛盾,属于此消彼长的关系3.实践中的泛化往往来源于拆解,没见过组成的产品,但…

图谱实战 | 阿里周晓欢:如何将实体抽取从生成问题变成匹配问题?

转载公众号 | DataFunSummit分享嘉宾:周晓欢 阿里巴巴 算法专家编辑整理:刘香妍 中南财经政法大学出品平台:DataFunSummit导读:实体抽取或者说命名实体识别 ( NER ) 在信息抽取中扮演着重要角色,常见的实体抽取多是对文…

剖析 Promise 之基础篇

随着浏览器端异步操作复杂程度的日益增加,以及以 Evented I/O 为核心思想的 NodeJS 的持续火爆,Promise、Async 等异步操作封装由于解决了异步编程上面临的诸多挑战,得到了越来越广泛的应用。本文旨在剖析 Promise 的内部机制,从实…

LeetCode 318. 最大单词长度乘积(位运算)

1. 题目 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例 1: 输入: ["abcw","baz&…

百度研究院商业智能实验室招聘研究实习生!

致力于连接最靠谱的算法岗与最强的求职者招聘贴投放请联系微信xixiaoyao-1岗位职责:同实验室的数据科学家和工程师一起参与研发前沿的机器学习技术,主要内容为对前沿技术进行调研,复现前沿科研成果在顶级会议和期刊上发表论文支持及落地百度飞…

论文浅尝 | KGNLI: 知识图谱增强的自然语言推理模型

笔记整理 | 韩振峰,天津大学硕士链接:https://aclanthology.org/2020.coling-main.571.pdf动机自然语言推理 (NLI) 是自然语言处理中的一项重要任务,它旨在识别两个句子之间的逻辑关系。现有的大多数方法都是基于训练语料库来获得语义知识从而…

block在美团iOS的实践

说到block,相信大部分iOS开发者都会想到retain cycle或是__block修饰的变量。 但是本文将忽略这些老生常谈的讨论,而是将重点放在美团iOS在实践中对block的应用,希望能对同行有所助益。 本文假设读者对block有一定的了解。 从闭包说起 在Lisp…

写Rap,编菜谱,你画我猜……这些 AI demo 我可以玩一天!

文 | ZenMoore编 | 小轶上次写的那篇 《Prompt 综述15篇最新论文梳理]》 有亿点点肝。这次给大家整点轻松好玩的(顺便给这篇推文打个广告,快去看!)。不知道读者朋友们有没有遇到这样的情况:有新的论文发表了&#xff0…

LeetCode 1254. 统计封闭岛屿的数目(图的BFS DFS)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS1. 题目 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 )。 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能…

技术动态 | 图对比学习的最新进展

转载公众号 | DataFunSummit 分享嘉宾:朱彦樵 中国科学院自动化研究所编辑整理:吴祺尧 加州大学圣地亚哥分校出品平台:DataFunSummit导读:本文跟大家分享下图自监督学习中最近比较热门的研究方向:图对比学习&#xff0…

如何把Android手机变成一个WIFI下载热点? — 报文转发及DNS报文拦截

随着WiFi的普及,移动运营商的热点也越来越多了,如中国移动的CMCC、中国电信的ChinaNet、中国联通的ChinaUnicom等,一般来说,连上此类的热点,打开浏览器上网时都会自动跳转到一个验证页面,最近有个项目也有类…

OpenKG 祝大家新春快乐

OpenKG 祝各位读者新春快乐,虎虎生威!OpenKGOpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。点击阅读原文,进入 OpenKG 网站。…

推荐中使用FNN/PNN/ONN/NFM优化特征交叉

文 | 水哥源 | 知乎sayingDNN时代来临的时候,LR没打过,也很难加入。FM打不过,但他可以加入FM的精髓,最上在于latent embedding,有了它才能把交互拆解到基底上;居中在于element-wise乘,能让两个特…

LeetCode 310. 最小高度树(图 聪明的BFS,从外向内包围)

文章目录1. 题目2. 解题2.1 暴力BFS2.2 聪明的BFS1. 题目 对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到…

Emma使用与分析

什么是Emma EMMA 是一个开源、面向 Java 程序测试覆盖率收集和报告工具。 它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。 EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码…