5whys分析法在美团工程师中的实践
转载美团博客:https://tech.meituan.com/5whys-method.html
前言
网站的质量和稳定性对于用户和公司来说至关重要,但是在网站的快速发展过程中,由于各种原因导致事故不可避免的发生,这些大大小小的事故对公司难免会造成一些负面的影响,为了避免同类事故的再次发生,美团的工程师们从事故中不断学习,对每次事故进行深入分析和总结,形成了一种Casestudy文化,并结合一套科学的分析方法-5whys分析法,深入分析事故背后的根本原因和流程漏洞,使得事故发生的频率大大降低。
在本文中,首先对5whys分析法的进行简单介绍,然后再结合美团工程师Casestudy的案例去分享这套分析法的在美团的实践。
5whys分析法
5whys分析法,又名why-why分析法,它是根本原因分析(Root Cause Analysis) 的一种具体方法,适用于去分析一些简单和难度适中的问题。简单的说,就是针对问题持续的问5个为什么(通常需要至少5个“为什么”,但5个why不是说一定就是5个,可能是1个,也可能是10都没有抓到根原),通过这样一种分析思路,能很快找到问题深层次的根本原因以及工作流程上的漏洞,并据此再制定预防措施,防止问题重新出现或再次发生,大大降低解决问题的成本。
在美团,5whys分析法作为每个工程师需要掌握的一种工作方法,已经广泛应用到Casestudy的原因分析中去。
###利用5why分析法来进行Casestudy原因分析的几个步骤
#####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和审核机制,只有制度或流程上的改进才能尽量避免类似问题的再次发生。
找到根本原因后,小美所在团队针对此次事故做了一个Casestudy总结,强调代码质量的重要性,并将代码Review的流程提上日程,利用公司Git平台提供的fork和pull request机制建立起一套合理的代码review流程,并要求组内人员遵守这套规则,使得代码质量大大提升,降低了事故的风险。
#总结
Casestudy作为美团工程师的必修课之一,如果不去结合5whys分析法去实践,只顾解决表面原因而不管根本原因,可能事故发生后采取临时措施改进后就忘了,问题免不了要复发;但通过5whys分析法这样一种分析过程,工程师们学会分析问题由表入里,直指问题要害,大大降低了解决问题的成本,从而间接提高了工作效率。
对于工程师的成长,技术能力至关重要,但是职业技能和通用素质的提高对于工程师的长期成长来说也是很重要的。在美团的工作中,工程师们不光在技术能力得到提高,并且还能掌握很多科学的工作方法,5whys分析法仅仅是其中之一,后续再分享其他方法给大家。
#参考
5whys分析法在美团工程师中的实践的更多相关文章
- Java线程池实现原理及其在美团业务中的实践
本文转载自Java线程池实现原理及其在美团业务中的实践 导语 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供 ...
- Java线程池实现原理及其在美团业务中的实践(转)
转自美团技术团队:https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html 随着计算机行业的飞速发展,摩尔定律逐 ...
- AX中四种库存ABC分析法原理研究
库存ABC分类,简单的说就是抓大放小,是为了让我们抓住重点,用最大精力来管理最重要的物料,而对于不太重要的物料则可以用较少的精力进行管理.它和我们平常说的八二法则有异曲同工之妙. 既然要应用库存ABC ...
- 5W2H方法:七问分析法
5W2H分析方法也叫七问分析法,是二战中美国陆军兵器修理部首创.简单.方便.易于理解.使用,富有启发意义,被广泛应用于企业管理和技术活动,对于决策和执行性的措施也非常有帮助,有助于弥补考虑问题的疏漏. ...
- 闲聊系列之 5-why root cause分析法
本篇参考: https://max.book118.com/html/2017/1126/141669829.shtm https://baike.baidu.com/item/5why%E5%88% ...
- 2017人生总结(MECE分析法)
试着用MECE分析法对人生的整个规划做一下总结.作为技术人员,其实除了编码架构能力之外,分析问题的能力的重要程度也会随着职业发展越来越重要.<美团点评技术博客>说这几天要在黄金时段头版头条 ...
- geotrellis使用(十六)使用缓冲区分析的方式解决投影变换中边缘数据值计算的问题
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 问题探索 采样说明 实现方案 总结 一.前言 ...
- 从Elo Rating System谈到层次分析法
1. Elo Rating System Elo Rating System对于很多人来说比较陌生,根据wikipedia上的解释:Elo评分系统是一种用于计算对抗比赛(例如象棋对弈)中对手双方技能水 ...
- Procrustes Analysis普氏分析法
选取N幅同类目标物体的二维图像,并用上一篇博文的方法标注轮廓点,这样就得到训练样本集: 由于图像中目标物体的形状和位置存在较大偏差,因此所得到的数据并不具有仿射不变性,需要对其进行归一化处理.这里采用 ...
随机推荐
- ctDNA|endosymbiosis
5.10叶绿体基因组编码多种蛋白质和RNA 叶绿体和线粒体的共同点:叶绿体和线粒体的大小,功能(编码区)大体一致,但叶绿体拥有更多基因,所以在编码tRNA时,也有内含子作为被剪切片段. 因为在原核生物 ...
- linux - centos7 开放防火墙端口的新方式
CentOS 升级到7之后,发现无法使用iptables控制Linuxs的端口, google之后发现Centos 7使用firewalld代替了原来的iptables. 下面记录如何使用firewa ...
- ps基础入门快捷方法总结
1. 快速打开文件 双击Photoshop的背景空白处(默认为灰色显示区域)即可打开选择文件的浏览窗口. 2. 随意更换画布颜色 选择油漆桶工具并按住Shift点击画布边缘,即可设置画布底色为当前选择 ...
- LINQ结合正则表达式查询文件系统
string startFolder = @"D:\Program Files (x86)\Microsoft Visual Studio 12.0\"; IEnumerable& ...
- HTML与XHTML区别
1. html超文本标记语言,xhtml可扩展超文本标记语言,xhtml是将html作为xml的应用重新定义的一个标准. 2. xhtm比html的代码规则严格很多,例如'a < b'在xhtm ...
- python特殊字符转义符号表示
- JQuery图片轮播实例
HTML+CSS代码: <!doctype html> <html> <head> <meta charset="utf-8"> & ...
- sphinx关键字套红
sphinx定义搜索结果,搜索的内容着重显示,可以使用下面代码 <?php /** * Created by PhpStorm. * User: pc00001 * Date: 2015/4/1 ...
- 【Python学习之五】高级特性4(切片、迭代、列表生成器、生成器、迭代器)
4.生成器(generator) 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的 ...
- 【Maven】 (请使用 -source 8 或更高版本以启用 lambda 表达式)
在使用mvn install编译maven项目时,报了 “ (请使用 -source 8 或更高版本以启用 lambda 表达式)”错误,是因为设置的maven默认jdk编译版本太低的问题. 可使用两 ...