5个为什么(five-whys)

文章非常好,我认为我们必须实施这一思想。

原文:http://venturehacks.com/articles/five-whys

翻译:http://www.tuicool.com/articles/ryaqqyV

正文:

第一部分:创业公司免疫系统

概要 :无论何时当发现问题时,应连续追问五个为什么寻找到问题的根源。然后在分析的各个层面进行修正。发现问题时应用五个为什么,你将(1)发现技术问题下的人员问题,(2)为你的创业公司建立一套免疫系统。

大野耐一是丰田生产方式的发明人之一。他的书《丰田生产方式》是一份很吸引人的读物,虽然它并不实用。读完这本书,你甚至可能都没法意识到丰田是做汽车业务的。但是我清楚地从这本书学习到了一个十分具体的方法:问五个为什么。我认为这是一个关键的精益创业方法。

当问题出现时,我们倾向于将其视作危机并追究责任。更好的办法是将其视作一次学习的机会。但并不是泛义的整体自我提升。而是通过五个为什么寻找到问题的根源然后进行修正。

发现问题时追问五个为什么。 具体是这样进行的。比如,你发现你的网站崩溃了。显然,你第一反应是恢复它。但是危机一旦过去,应开展事后调查询问为什么:

  1. 为什么网站崩溃了?因为所有前端服务器上的 CPU 使用率都达到了 100%。
  2. 为什么 CPU 使用率达到 100%?因为一段新代码包含一个无限循环。
  3. 为什么会出现这样的代码?因为某员工出错了。
  4. 为什么他会出现这样的错误?因为他没有为这个功能写单位测试代码。
  5. 为什么他没有写单位测试代码?因为他是一名新员工,且没有在测试驱动开发方面接受正确培训。

在这五个地方进行修正。

目前为止,这与主管运营团队面对网站崩溃会作的分析相差不大。接下来:你要承诺按一定比例投资用于对分析的各个层面进行修正。因此,在上面的例子中,我们需要作五处的修正:

  1. 恢复网站。
  2. 移除错误代码。
  3. 帮助出错的某员工了解为什么他的代码没有起到预期作用。
  4. 培训该员工学习测试驱动开发相关知识。
  5. 将测试驱动开发纳入新工程师入门指导内容。

进行修正可建立创业公司免疫系统。

我开始相信应该采用这种方法应对所有问题,而不仅是网站崩溃。每次,我们将出现的问题当作寻找系统缺陷的机会,进而小幅地调整改善。

通过持续不断的调整,我们最终建成了一系列预防问题发生的坚固防御。这种方法是打破「时间/质量/成本,只能选两个」悖论的关键,因为这些小额投资将使团队随时间运转更快。

创业公司

在上例中,一开始的技术问题实际上变成了人员和流程的问题。这十分典型。我们工程师有只关注产品部分问题的倾向,而五个为什么则常会避免这种倾向。

这也是在我以前的工作中可以使新工程师入职第一天就十分高产的原因。我们有一套极佳的入职过程,包括导师制及需要注意的重要事项清单。大多数工程师在入职第一天就将代码用于开发了。

根据错误成本大小进行修正

我们一开始没有这样的好计划,也没有马上将所有时间用在这上面。相反,五个为什么一直揭示出由于新员工培训不正确而引起的问题,为此我们进行了小幅调整。所以在我们意识到之前,就已经完全不存在这类问题了。

因此,记住上述规则中的按比例进行投资十分重要。也很容易知道:出现问题时需要彻底的重写。我们较倾向于关注技术方面的问题且容易反应过度。

如果问题严重,比如网站崩溃,要耗费大量资金或需要大量人力时间进行调试,那么同时应该配备同样多的人力时间或资金寻找解决方案。

修正预算总额应与引起五个为什么的错误成本成正比。因此,如果网站崩溃了,它是五名员工花了一整天时间建成的,那么也许花五个人工日用于修复才是合理的。但如果这个错误花费了三名客户每人 25 美分,那么也许修复它只应用几个小时。

但总有最大限量,也有最小限量。对于所有小问题,只需要向前改进一点。不需要过度投资。如果这个问题再次出现,五个为什么会给你小额预算让你再向前改进一点。你可沉着应对,因为只要问题再出现就可采用五个为什么解决。

第二部分:如何开始

总结: 采用五个为什么可以首先将其应用于一个具体团队的一个具体问题。选择一个负责人与问题相关人员一起进行事后调查。然后将分析结果通过邮件发给公司所有成员。将五个为什么反复应用于 IMVU 为公司创建了一套免疫系统,使我们的开发者出错减少速度更快。

在第一部分,我讲述了如何采用五个为什么找到问题的根源,进行修正,并为你的创业公司建立一套免疫系统。所以…

你是如何开始五个为什么的?

我建议你从一个具体团队和一个具体类别的问题开始。我第一次选择了扩展性问题及运营团队。但你可以从任何地方开始—我曾在很多不同的团队用过。

刚开始采用五个为什么只需要一个负责人。一旦团队里有人发现一个问题,他将进行事后调查。

但不要让负责人独自一人完成;将问题相关人员(包括诊断或调试的人)聚集在一起十分重要。让负责人主导讨论,并赋予他或她权力给每个人分配解决方案中各自承担的任务。

将五个为什么调查结果发送给公司每个人

一旦任务分配完毕,让出错的新员工将分析结果邮件发送给公司所有人。最后一步十分困难,但我认为十分有用。五个为什么应该读起来简明易懂。如果不是,那么你就有可能搞错了真正的问题。

将结果信息广泛共享的优点在于它可以让每个人都认识到团队所面对的问题,同时也了解到这些问题是如何解决的。如果分析无懈可击,每个人就很容易理解团队为什么要花时间用于问题预防而不是用于开发新功能。

另外,如果这样导致了公司大风暴—也是一件好事。现在你知道存在问题:要么是分析不合理,需要重做,要么就是公司不理解你所做事情的重要性。明确是哪一种情况,然后解决问题。

长期采用五个为什么会遇到什么?

以下是我的经验。

人们习惯了五个为什么的步骤,增加投入变得十分正常。大多数时候,你投入的都是需要大量会议才能决定的事情。

你将看到公司里的人为帮助你把工作做得更好都向你提出有趣的建议。现在,所有人都一起学习—了解你的产品、程序及团队。每封五个为什么邮件都是一份教学文件。

采用五个为什么几年后 IMVU 的免疫系统。

让我向你展示 IMVU 的运营团队和工程团队在实施五个为什么几年后的样子。我们为部署对工具和程序作了很多改进,现在网站出现崩溃机率很小。我们有五层坚固的防御。

  1. 每位工程师都有他/她自己的沙盒用以尽可能地模仿应用程序(一旦出现错误,我们其后不可避免地会在五个为什么中发现)。
  2. 我们整个团队有一套全面的单位测试、验收测试、功能测试、性能测试及可行的测试驱动开发。工程师设立了一系列的测试标签,所以你可以在你的沙盒里进行一系列你认为与现在项目或功能相关的测试。
  3. 通过持续的整合聚集,检入后 100% 的测试可运行。如测试失败,它将阻止修正版被使用。
  4. 如某人想要进行部署,我们有一套称为集群免疫系统的完全自动化系统。这将采用渐进的改变方式,一次一台机器。这个系统还将持续监控这些机器的运行状况以及整个集群,以判断这些改变是否带来问题。如果正在发生的不受认可,它将拒绝改变快速恢复原状并锁定部署,直到有人调查出了什么差错。
  5. 我们有一整套的监控警报系统,一旦出现问题,正在运行的页面调度程序将被触发。由于五个为什么不断发现一些很难设置静态阈值的关键指标,我们甚至有一个动态预测算法。如果指标超出正常值,基于过去的数据及火灾警报,就可利用这个算法作出相应预测。(你可以阅读我们一位工程师的一篇关于这个方法的文章。)

坚固的免疫系统减少出错加快速度

所以如果你能够潜到我们任何一位工程师的桌上,登录他们的机器,在某高流量页面录入一个无限循环代码,那么大概 10 到 20 分钟后,他们会收到一封电子邮件,内容大概是这样:

「亲爱的某某,十分感谢您试图录入修正 1234。遗憾的是,这个主意很糟糕,你的改动已被还原。我们会将此事通报整个团队,并期待您弄明白哪里出了错。祝好运,你的软件。」

好吧,并不是完全一样。但是大意如此。

拥有这样一系列的防御对实施五个为什么有益。如果应用程序遇到错误的改动,我们就将有一套内置式的问题:为什么自动测试没有发现它?为什么集群免疫系统没有拒绝它?为什么操作没有上网页?如此等等。

我们每次都对各层防御进行细微的改善。最后,它将使我们每天可以完成许多次的部署,而且无显著停机或故障回归。

第三部分:传统创业公司

总结 :任何时候开始采用五个为什么都不晚,即使你被不计其数的遗留代码困扰。一旦发现问题就开始问为什么—你自然而然就会开始解决那造成你 80% 问题的 20% 的潜在问题。最初是丰田公司发现五个为什么—如果它适用于汽车行业,它也适用于你。

在第一部分,我讲述了如何采用五个为什么找到问题的根源,进行修正,并为你的创业公司建立一套免疫系统。第二部分,我解释了如何开始五个为什么以及 IMVU 怎样经过经年累月的应用五个为什么而建立了一套创业公司免疫系统。在最后一部分,我将介绍如何将五个为什么应用于传统创业公司。

开始问为什么永远都不晚。

当我向创业家和大公司解释五个为什么时,我有时得到这样的回应:「好吧,当然,如果你拥有很好的工具、程序及测试驱动开发,这样开始当然很容易!但是我的团队被不计其数的遗留代码困扰着,而且…」

所以我郑重声明:IMVU 是在不拥有这其中任何一项的情况下开始五个为什么的。我们甚至没有在全团队实施测试驱动开发。我们从未听说过五个为什么,团队里还有无数个「敏捷怀疑论者」。我们开始持续整合时,还有成千上万行代码不在测试范围之内。

而五个为什么的优点在于它本身包含帕累托原理。因为最常见的问题始终重复出现,你的防御自然而然地集中在最需要帮助的那 20% 的产品上。而也正是这 20% 的产品花费你最多时间。所以五个为什么的偿还速度十分快,且它能立即使状况明显好转。你只需要开始。

如果它适用于汽车行业,那它也适用于任何地方。

因此,谢谢您,大野耐一。我想你会喜欢看到:在你开始丰田之旅时尚不存在的行业里,我们能够从系统与程序中消除所有不必要的浪费。

我尤其感谢您向我们证明,这种方法可适用于世界上最难做且发展缓慢的行业:汽车行业。您使得我们不能够用最可悲的借口推托:「当然,这不适用于我的业务,是吗?」如果它适用于汽车行业,它也适用于你。

你还等什么?

来自为知笔记(Wiz)

时间: 2024-10-18 01:04:05

5个为什么(five-whys)的相关文章

我当程序员的5个whys

1.我喜欢逻辑性的问题,喜欢解决问题,当然问题无处不在,但IT方面的问题更考验自身的逻辑处理能力. 2.我喜欢别人用我"创造"的东西,很有成就感,毕竟IT行业创造的门槛比较低,一部电脑就可以. 3.程序员可以为我带来"足够"的生活资金,当然前提是我足够优秀,才不会担心着个问题. 4.我很喜欢编写出优秀的代码,搭建优秀的架构,这是我不断去改进的一个方向. 5.我很喜欢待在一个或带领一个融洽.团结.活跃.有朝气.不犀利的团队.至少大家都忙得不可开交.忙得快乐,都 在做自

编程入门指南

前言 如今编程成为了一个越来越重要的「技能」:作为设计师,懂一些编程可能会帮你更好地理解自己的工作内容:作为创业者,技术创始人的身份则会让你的很多工作显得更容易.而作为刚想入门的新手,面对眼前海量的信息,或许根本不知道从哪里开始:入门轻松度过初级材料的学习后,发现学习越来越困难,陡峭的学习曲线又让你望而却步:你知道如何在页面上打印输出一些文本行,但是你不知道何时该进行一个真正的有用的项目:你不清楚自己还有哪些不知道的东西,你甚至搞不清下一步该学什么. 这篇文章的内容对此不仅会有一些方向性的建议,

windows类书的学习心得(转载)

原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千,很多陌生的出版社,很多陌生的作者,很多陌生的译者,书名也是越来越夸张,什么××天精通××,精通××编程, ××宝典等等,书的印刷质量真的很好,纸张的质量也是今非昔比啊,但书的内容好象却是越来越让人失望,也许是我老了,我的思想我的观念已脱离现实社会,也许是外面的世界变化得太快,我编程数月,出去一走,

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 for links, explanations, books, and references. This mini article links to the references I think might help you in this journey. DISCLAIMER: You don’

顶级工程师谈机遇、谈跳槽、谈选择

今天在豆瓣上看到一本电子书,这本书不厚,也就100页不到,但是标题挺唬人的:年薪20万到80万的进击,副标题为高端程序员如何跳槽.一般我在看到这种标题的书,无论是电子书还是纸质书,我的选择忽视之.在我不算多的阅读“生涯”中(在可回忆的范围,不算上学校学习的教材.辅导书习题集之类,我所阅读的书不超过两百本),我的方法论是书不在于读多少,而在于读好书,读完之后理解多少,理解之后对自己的无论物资层面还是精神层面带来的提高是什么,乃至于领悟之后能给别人传递什么样的正能量.说实在的,我也在选书的过程中被坑

seven habits of highly effective people 高效能人士的七个习惯

习惯的模型 : dependent 依赖  -- independent 独立自主 --interdependent  互相依赖 1: be  proactive 主动积极 what you can do 2:begin with the end in mind  以终为始 3 :put first things first 要事为一 不能管理时间,便什么都不能管理- 德鲁克.  80/20法则 4: think win 双赢思维 买卖不成仁义在 5:知彼解已  to understand th

Python 提取Twitter用户的Tweet

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-31 @author: guaguastd @name: harvest_user_tweet.py ''' if __name__ == '__main__': # import json import json # import search from search import search_for_tweet # import harvest_use

Google C++ 代码规范

Google C++ Style Guide Table of Contents Header Files Self-contained Headers The #define Guard Forward Declarations Inline Functions Names and Order of Includes Scoping Namespaces Unnamed Namespaces and Static Variables Nonmember, Static Member, and

编程学习指南

我个人十分喜欢的编程学习指南,也将作为自己的编程学习和技能提升的重要参考. 本文作者是@萧井陌,基于个人收藏的缘故,在格式上略有改动. 前言 如今编程成为了一个越来越重要的技能:作为设计师,懂一些编程可能会帮你更好地理解自己工作内容:作为创业者,技术创始人的身份则会让你的很多工作显得更容易.而作为刚想入门的新手,面对眼前海量的信息,或许根本不知道从哪里开始:入门轻松度过初级材料的学习后,发现学习越来越困难,陡峭的学习曲线又让你望而却步:你知道如何在页面上打印输出一些文本行,但是你不知道何时该进行

分辨真假数据科学家的20个问题及回答

分辨真假数据科学家的20个问题及回答 2016-11-14 大数据文摘 [导语]本文分为两个部分,第一部分是quora上很火的一篇问答--[20个分辨真假数据科学家的问题]中赞赏数最高的回答,第二部分则是KDnuggets阅读量非常高的一篇文章[KDnuggets编辑们针对这20个问题给出的回答].前者由大数据文摘团队选稿翻译校对后,呈现在各位读者面前.后者授权转载自计算广告(Comp_Ad)译者白雪.龙星镖局,原载于KDnuggets.本次将分散于不同地址的相关资源整合推送,希望更有利于有兴趣