5个为什么(five-whys)
第一部分:创业公司免疫系统
概要 :无论何时当发现问题时,应连续追问五个为什么寻找到问题的根源。然后在分析的各个层面进行修正。发现问题时应用五个为什么,你将(1)发现技术问题下的人员问题,(2)为你的创业公司建立一套免疫系统。
大野耐一是丰田生产方式的发明人之一。他的书《丰田生产方式》是一份很吸引人的读物,虽然它并不实用。读完这本书,你甚至可能都没法意识到丰田是做汽车业务的。但是我清楚地从这本书学习到了一个十分具体的方法:问五个为什么。我认为这是一个关键的精益创业方法。
当问题出现时,我们倾向于将其视作危机并追究责任。更好的办法是将其视作一次学习的机会。但并不是泛义的整体自我提升。而是通过五个为什么寻找到问题的根源然后进行修正。
发现问题时追问五个为什么。 具体是这样进行的。比如,你发现你的网站崩溃了。显然,你第一反应是恢复它。但是危机一旦过去,应开展事后调查询问为什么:
- 为什么网站崩溃了?因为所有前端服务器上的 CPU 使用率都达到了 100%。
- 为什么 CPU 使用率达到 100%?因为一段新代码包含一个无限循环。
- 为什么会出现这样的代码?因为某员工出错了。
- 为什么他会出现这样的错误?因为他没有为这个功能写单位测试代码。
- 为什么他没有写单位测试代码?因为他是一名新员工,且没有在测试驱动开发方面接受正确培训。
在这五个地方进行修正。
目前为止,这与主管运营团队面对网站崩溃会作的分析相差不大。接下来:你要承诺按一定比例投资用于对分析的各个层面进行修正。因此,在上面的例子中,我们需要作五处的修正:
- 恢复网站。
- 移除错误代码。
- 帮助出错的某员工了解为什么他的代码没有起到预期作用。
- 培训该员工学习测试驱动开发相关知识。
- 将测试驱动开发纳入新工程师入门指导内容。
进行修正可建立创业公司免疫系统。
我开始相信应该采用这种方法应对所有问题,而不仅是网站崩溃。每次,我们将出现的问题当作寻找系统缺陷的机会,进而小幅地调整改善。
通过持续不断的调整,我们最终建成了一系列预防问题发生的坚固防御。这种方法是打破「时间/质量/成本,只能选两个」悖论的关键,因为这些小额投资将使团队随时间运转更快。
创业公司
在上例中,一开始的技术问题实际上变成了人员和流程的问题。这十分典型。我们工程师有只关注产品部分问题的倾向,而五个为什么则常会避免这种倾向。
这也是在我以前的工作中可以使新工程师入职第一天就十分高产的原因。我们有一套极佳的入职过程,包括导师制及需要注意的重要事项清单。大多数工程师在入职第一天就将代码用于开发了。
根据错误成本大小进行修正
我们一开始没有这样的好计划,也没有马上将所有时间用在这上面。相反,五个为什么一直揭示出由于新员工培训不正确而引起的问题,为此我们进行了小幅调整。所以在我们意识到之前,就已经完全不存在这类问题了。
因此,记住上述规则中的按比例进行投资十分重要。也很容易知道:出现问题时需要彻底的重写。我们较倾向于关注技术方面的问题且容易反应过度。
如果问题严重,比如网站崩溃,要耗费大量资金或需要大量人力时间进行调试,那么同时应该配备同样多的人力时间或资金寻找解决方案。
修正预算总额应与引起五个为什么的错误成本成正比。因此,如果网站崩溃了,它是五名员工花了一整天时间建成的,那么也许花五个人工日用于修复才是合理的。但如果这个错误花费了三名客户每人 25 美分,那么也许修复它只应用几个小时。
但总有最大限量,也有最小限量。对于所有小问题,只需要向前改进一点。不需要过度投资。如果这个问题再次出现,五个为什么会给你小额预算让你再向前改进一点。你可沉着应对,因为只要问题再出现就可采用五个为什么解决。
第二部分:如何开始
总结: 采用五个为什么可以首先将其应用于一个具体团队的一个具体问题。选择一个负责人与问题相关人员一起进行事后调查。然后将分析结果通过邮件发给公司所有成员。将五个为什么反复应用于 IMVU 为公司创建了一套免疫系统,使我们的开发者出错减少速度更快。
在第一部分,我讲述了如何采用五个为什么找到问题的根源,进行修正,并为你的创业公司建立一套免疫系统。所以…
你是如何开始五个为什么的?
我建议你从一个具体团队和一个具体类别的问题开始。我第一次选择了扩展性问题及运营团队。但你可以从任何地方开始—我曾在很多不同的团队用过。
刚开始采用五个为什么只需要一个负责人。一旦团队里有人发现一个问题,他将进行事后调查。
但不要让负责人独自一人完成;将问题相关人员(包括诊断或调试的人)聚集在一起十分重要。让负责人主导讨论,并赋予他或她权力给每个人分配解决方案中各自承担的任务。
将五个为什么调查结果发送给公司每个人
一旦任务分配完毕,让出错的新员工将分析结果邮件发送给公司所有人。最后一步十分困难,但我认为十分有用。五个为什么应该读起来简明易懂。如果不是,那么你就有可能搞错了真正的问题。
将结果信息广泛共享的优点在于它可以让每个人都认识到团队所面对的问题,同时也了解到这些问题是如何解决的。如果分析无懈可击,每个人就很容易理解团队为什么要花时间用于问题预防而不是用于开发新功能。
另外,如果这样导致了公司大风暴—也是一件好事。现在你知道存在问题:要么是分析不合理,需要重做,要么就是公司不理解你所做事情的重要性。明确是哪一种情况,然后解决问题。
长期采用五个为什么会遇到什么?
以下是我的经验。
人们习惯了五个为什么的步骤,增加投入变得十分正常。大多数时候,你投入的都是需要大量会议才能决定的事情。
你将看到公司里的人为帮助你把工作做得更好都向你提出有趣的建议。现在,所有人都一起学习—了解你的产品、程序及团队。每封五个为什么邮件都是一份教学文件。
采用五个为什么几年后 IMVU 的免疫系统。
让我向你展示 IMVU 的运营团队和工程团队在实施五个为什么几年后的样子。我们为部署对工具和程序作了很多改进,现在网站出现崩溃机率很小。我们有五层坚固的防御。
- 每位工程师都有他/她自己的沙盒用以尽可能地模仿应用程序(一旦出现错误,我们其后不可避免地会在五个为什么中发现)。
- 我们整个团队有一套全面的单位测试、验收测试、功能测试、性能测试及可行的测试驱动开发。工程师设立了一系列的测试标签,所以你可以在你的沙盒里进行一系列你认为与现在项目或功能相关的测试。
- 通过持续的整合聚集,检入后 100% 的测试可运行。如测试失败,它将阻止修正版被使用。
- 如某人想要进行部署,我们有一套称为集群免疫系统的完全自动化系统。这将采用渐进的改变方式,一次一台机器。这个系统还将持续监控这些机器的运行状况以及整个集群,以判断这些改变是否带来问题。如果正在发生的不受认可,它将拒绝改变快速恢复原状并锁定部署,直到有人调查出了什么差错。
- 我们有一整套的监控警报系统,一旦出现问题,正在运行的页面调度程序将被触发。由于五个为什么不断发现一些很难设置静态阈值的关键指标,我们甚至有一个动态预测算法。如果指标超出正常值,基于过去的数据及火灾警报,就可利用这个算法作出相应预测。(你可以阅读我们一位工程师的一篇关于这个方法的文章。)
坚固的免疫系统减少出错加快速度
所以如果你能够潜到我们任何一位工程师的桌上,登录他们的机器,在某高流量页面录入一个无限循环代码,那么大概 10 到 20 分钟后,他们会收到一封电子邮件,内容大概是这样:
「亲爱的某某,十分感谢您试图录入修正 1234。遗憾的是,这个主意很糟糕,你的改动已被还原。我们会将此事通报整个团队,并期待您弄明白哪里出了错。祝好运,你的软件。」
好吧,并不是完全一样。但是大意如此。
拥有这样一系列的防御对实施五个为什么有益。如果应用程序遇到错误的改动,我们就将有一套内置式的问题:为什么自动测试没有发现它?为什么集群免疫系统没有拒绝它?为什么操作没有上网页?如此等等。
我们每次都对各层防御进行细微的改善。最后,它将使我们每天可以完成许多次的部署,而且无显著停机或故障回归。
第三部分:传统创业公司
总结 :任何时候开始采用五个为什么都不晚,即使你被不计其数的遗留代码困扰。一旦发现问题就开始问为什么—你自然而然就会开始解决那造成你 80% 问题的 20% 的潜在问题。最初是丰田公司发现五个为什么—如果它适用于汽车行业,它也适用于你。
在第一部分,我讲述了如何采用五个为什么找到问题的根源,进行修正,并为你的创业公司建立一套免疫系统。第二部分,我解释了如何开始五个为什么以及 IMVU 怎样经过经年累月的应用五个为什么而建立了一套创业公司免疫系统。在最后一部分,我将介绍如何将五个为什么应用于传统创业公司。
开始问为什么永远都不晚。
当我向创业家和大公司解释五个为什么时,我有时得到这样的回应:「好吧,当然,如果你拥有很好的工具、程序及测试驱动开发,这样开始当然很容易!但是我的团队被不计其数的遗留代码困扰着,而且…」
所以我郑重声明:IMVU 是在不拥有这其中任何一项的情况下开始五个为什么的。我们甚至没有在全团队实施测试驱动开发。我们从未听说过五个为什么,团队里还有无数个「敏捷怀疑论者」。我们开始持续整合时,还有成千上万行代码不在测试范围之内。
而五个为什么的优点在于它本身包含帕累托原理。因为最常见的问题始终重复出现,你的防御自然而然地集中在最需要帮助的那 20% 的产品上。而也正是这 20% 的产品花费你最多时间。所以五个为什么的偿还速度十分快,且它能立即使状况明显好转。你只需要开始。
如果它适用于汽车行业,那它也适用于任何地方。
因此,谢谢您,大野耐一。我想你会喜欢看到:在你开始丰田之旅时尚不存在的行业里,我们能够从系统与程序中消除所有不必要的浪费。
我尤其感谢您向我们证明,这种方法可适用于世界上最难做且发展缓慢的行业:汽车行业。您使得我们不能够用最可悲的借口推托:「当然,这不适用于我的业务,是吗?」如果它适用于汽车行业,它也适用于你。
你还等什么?
5个为什么(five-whys)的更多相关文章
- Google C++ Style Guide
Background C++ is one of the main development languages used by many of Google's open-source project ...
- Whole life
Whole life the wonder such you bring the beautyI can see but i keep deep inside on itOh life i feel ...
- A Flock Of Tasty Sources On How To Start Learning High Scalability
This is a guest repost by Leandro Moreira. When we usually are interested about scalability we look ...
- windows类书的学习心得(转载)
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...
- WordPress 主题开发 - (一) 前言 待翻译
原文出自: http://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tutorial-2nd-edition/ THE TH ...
- 什么是工程师文化?各位工程师是为什么活的?作为一个IT或互联网公司为什么要工程师文化?
为什么要工程师文化? 看看最近二十年来社会的发展,计算机和互联网已经渗透到了这个社会的每一个角落,各式各样的计算机技术成为了整个世界发展的强大引擎,各式各样的创新,无论是业务创新还是技术创新,都是依托 ...
- [转]Whirlwind Tour of ARM Assembly
ref:http://www.coranac.com/tonc/text/asm.htm 23.1. Introduction Very broadly speaking, you can divid ...
- JavaWeb 后端 <一> 之 Tomcat服务器 - Http协议 学习笔记
1.Web开发概述 1.1服务器上的资源分类: a.静态资源:指web页面中供人们浏览的数据始终是不变.html css js 图片 多媒体 b.动态资源:指web页面中供人们浏览的数据是由程序产生的 ...
- C# 01 Primitive Types and Expressions
Class Data or Attributes state of the application Methods or Functions have behavior Namespace is a ...
- windows类书的学习心得
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...
随机推荐
- SharePoint 无法删除搜索服务应用程序
在SharePoint的使用中,经常会遇到某些服务创建失败,某些服务删除不成功的情况.这里,我们就遇到了搜索服务创建失败,然后删除也不成功,使用管理中心的UI无法删除,PowerShell命令也无法删 ...
- Not supported by Zabbix Agent & zabbix agent重装
zabbix服务器显示一些监控项不起效,提示错误[Not supported by Zabbix Agent], 最后定位为zabbix客户端版本过低. Not supported by Zabbix ...
- vue+vux+axios+vuex+vue-router的项目的理解
本文主要是讲解项目前期的工作,后期考虑再详细说明. 作为一个技术团队如果你们团队选择了上面的技术栈,这说明你们的技术团体对于vue有很熟练的掌握了.在这里我想说明的是前期架构的重要.这里有一遍博客写的 ...
- 跟着刚哥深入学maven
前言:目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下. 一.为什么使用Maven这样的构建工具[why] ① 一个项目就是一个工程 如果项目非常庞大,就 ...
- 一天搞定CSS:css选择器--07
选择器:是指选择标签的方法 1.选择器类型 2.id选择器 代码演示 <!DOCTYPE html> <html> <head> <meta charset= ...
- Redis 学习之简介及安装
一.redis简介 Redis是一个开源的,先进的key-value存储.它通常被称为数据结构服务器,因为键可以包含字符串.哈希.链表.集合和有序集合. 支持的数据类型:string(字符串).lis ...
- sql 中三大范式详解
1 第一范式(1NF) 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库. 所谓第一范式(1NF)是指数据库表的每一列 ...
- 我的学习之路_第五章_Data,正则
Date 类 (时间类) 所属包:java.util.Date 构造方法: public Date() 返回的是当前时间 也就是1970-1-1到电脑目前的时间值,用毫秒来表示 public Date ...
- 基于redis实现tomcat8及以上版本的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)
前言: 本项目是基于jcoleman的tomcat-redis-session-manager二次开发版本 1.修改了小部分实现逻辑 2.去除对juni.jar包的依赖 3.去除无效代码和老版本tom ...
- elememtui(有关权限的那些事)
前言:关于权限路由的那些事儿…… 业务情景描述:现有一个后台管理系统,共存在三种类型的人员,①超级管理员(称作1):②组别管理员(2):③普通用户(3):每种类型的人看到的操作栏并不一样,可以进行的操 ...