周末为了一颗牙第五次去牙科诊所,得到的消息是:还需要观察至少2周才能做牙冠,同时发现了较深的牙结石需要做刮治,刮治疗需要2次。因此至少要再去医院3次。从去年的六月体检发现这颗牙的问题,目前最乐观估计也要四月份才能完成治疗。期间种种,与我们每天都要接触的IT项目何其的相似。下面就来做一下类比,各位看官瞧瞧是不是这个理儿。btw,我是个做测试的,因此可能从测试的角度去看的时候多一些。

  1.缺陷修复成本会随着时间推移越来越大。六月份体检的时候医生提醒我那颗牙有个牙洞,赶紧去补一下。由于工作紧张,又犯懒,直到十月份开始觉得很疼才去第一次看。因为好医院难约,就随便找了个诊所。当时随便补了一下,症状减轻了,以为没事儿了,后来又持续开始疼痛。到了11月份,才约到了一个好医院,第二次看牙。那次重新清理了一下原来补的地方,又补了一下。但是医生告诉我,可能已经慢性牙髓炎了,补好了得观察一下。观察半月,疼痛持续。12月份第三次到了医院,这次只能把神经杀掉了,同时医生建议做一个牙冠。由于期间感觉牙还是有些疼,但工作特别忙,就忍了一个月没去,后来觉得不能再拖了,大年初七第四次去了医院,医生做了检查,发现少给我杀了一个压根(我的那个牙根属于非常难找的类型),结果又做了一次根管治疗,并约了3星期后做牙冠。直到本周第五次去,发现我有较深的结石,需要做刮质,而刮质需要分两次做,做冠需要二次(第一次做冠可以和第二次刮治疗一起做),同时,会诊发现隐裂,牙有一定几率保不住。就这样,小小的一个蛀牙,变成大事儿了,前前后后要花一万多。作为一个测试人,整天都在跟人家宣传预防缺陷比发现缺陷更重要,自己却乌龙了,很是丢人(当然医生也有点耽误我)。但这也从非IT角度证明了“缺陷修复成本会随着时间推移越来越大”。

  2.同行评审很重要,必要的评审一定要进行。第五次去牙科,也许我的主治大夫有点心虚,觉得自己hold不住了,叫来了几个专家做会诊。结果发现了3个问题:1牙龈深处有结石,做牙冠前不好好处理,牙龈会回退;2牙齿中远出有隐裂,这就需要备牙的时候请个技术高明的大夫;3.敲击仍有轻度叩痛,需要再观察至少两个星期,等症状消失后再进行下一步。IT项目中,一些关键评审很重要,不同领域的专家凑在一起很容易发现问题。如需求评审,测试人员会更关注业务完整性和连贯性;开发人员会更关注需求实现难度,和是否可以根据需求开始做设计;运维人员会更关注非功能需求,如可用性,可维护性;项目经理则更关注进度和资源;一次成功的评审能够在适时的时候发现很多问题或者风险,有效的保证项目朝着正确方向发展。至于我这次的看牙,如果会诊(评审)在第三次做,根管治疗不会做2次,牙可能不会产生隐裂(无法确定是否第二次根管治疗弄裂了我的牙),洗牙和刮质可以合并。

  3.外包管理。其实在第四次和第五次看牙期间,医生说我有牙结石,建议我去洗牙。但是好医院有个问题,就是资源紧张,洗牙这种低级活儿要做得排到一个月以后了,他们建议我到外面诊所洗一下。我就找了个外边的诊所做了洗牙。结果到了第五次看牙,识别了有深层牙结石,洗牙没有冲洗干净,需要刮治。刮治其实可以和洗牙一起做的。这又耽误了时间。类比IT,这其实是一个子项目外包。这次外包出现了两个问题:1外包需求不正确,需要洗牙和刮质才能除牙结石,发包方的需求只提了洗牙。2.接包方没有非常好的识别需求:洗牙的表象下面其实是要把牙结石去掉。

4.Definition of Done。第一次补牙没有补好是后续问题严重化的一个主要因素。补完了以后牙持续疼(IT项目中这叫生产缺陷泄露)才有了后面的故事。什么是补好了一颗牙呢?我现在也说不清楚,我没有专业知识,现在我只知道,在补以前要做很好的清理工作,很显然第一次这项工作做得不到位(已经没有证据不能追究了)。在敏捷开发过程中,有一个名词经常被提及就是DOD。一项工作什么是做完了,其实要有一个明确的检验标准。

  5.争取你的权利。第五次识别出牙深度结石仍然建议我去外边诊所做。我拿出了工作时候的谈判态度,列举了他们的问题,并表示出了强硬。因为这样,主任医师感到他们做法是有些问题,亲自给我做了结石刮治(他平时可不做这个)。IT项目中,各个角色的人员也要争取自己的权利(当然三观要正)。每个人争取正当权利其实保证了项目有序进行,项目经理要向老板争取足够的资源来完成他的工作;例如测试人员要争取需求质量、被测物提交时候需要保证一定质量;配置管理员要争取开发人员和文档人员规范的checkin提交物等等等等。

6.项目管理是个技术活。对于这次治牙,其实我自己是项目经理。雇佣医生,以最小的代价,尽快让我的牙齿恢复健康就是这个项目的产出,很显然我没有做好它。回想有问题的地方,有如下几点:没有认识到第1点并迅速采取行动,没有推动第2点在该发生的时候发生。没有检测第3点(没有专业判断能力),对第4点也没有很好的识别(缺乏专业能力,开始又没有找到好团队),第5点也做得不好(太相信团队/医生了)。但是做项目的时候,这些意识我都还是很强的,生活中却做得很不好。人们总说生活中很多技巧可以用到工作中,其实工作中有很多技巧也是能够用到生活中来的。今后以此为戒。

看牙与IT项目的更多相关文章

  1. 因为之前完全没有接触过Spring,所以准备先把spring实战看完再落实项目

    因为之前完全没有接触过Spring,所以准备先把spring实战看完再落实项目

  2. 开源利器分享:BitBar 坐看今天你的项目涨了多少 star

    今天开头我想叨叨几句,我个人最近的感受.在这个信息爆炸,互联网的时代里.我的周遭总是充斥者着各种让人能产生焦虑的信息, 我不知道有没有小伙伴和我一样,看到各种神通广大.游戏人生的大侠,低头看看自己当前 ...

  3. MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构

    在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...

  4. 通过go-ethereum源码看如何管理项目

    今天抽空看了下go-ethereum项目的源码 ( https://github.com/ethereum/go-ethereum ),其中 ethereum 是github下的一个帐号.go-eth ...

  5. 从一个多项目Web工程看Eclipse如何导入Gradle项目

    这里再次说一下为什么我们需要熟悉Gradle构建工具,主要原因就是很多开源项目现在都在改用Gradle作为构建工具.一部分的github上的示例代码也在用Gradle构建,如果还是只能用maven,那 ...

  6. Mongo基础使用,以及在Express项目中使用Mongoose

    MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...

  7. Jenkins中构建Testcomplete项目的方法介绍

    Jenkins的部署在上一篇随笔中已经和大家介绍了,下面我们介绍一下再Jenkins中构建testcomplete项目.我这里使用的是Testcomplete11,下面详细介绍一下构建步骤. 1.Je ...

  8. Java进击C#——项目开发环境

    本章简言 上一章我们了解一下开发环境,知道了什么去新建一个项目工程.却并没有去项目工程进行介绍.可是之后我们会常常跟项目工程打交道.所以这章笔者就对项程工程的常用的一些功能进行讲解.当然说全面那是不可 ...

  9. [SL] Silverlight + WCF Demo项目

    I:项目描述:利用 Silverlight+WCF 技术,模拟资源管理器(如图1)功能,通过地址栏输入本地文件夹路径,然后将解析出来的该目录下所有文件(夹)存储到数据库中,然后再加载到界面上显示出来: ...

随机推荐

  1. [Derby]数据库操作说明

    1. 创建新数据库 connect 'jdbc:derby:mydb;create=true'; ij> connect 'jdbc:derby:mydb;create=true'; ij> ...

  2. SQLAlchemy 做migration的时候 ValueError: too many values to unpack

    我在做数据库迁移的时候,使用sqlalchemy,出现一个问题 Traceback (most recent call last): File "/Volumes/Spano/Dropbox ...

  3. win10中文简体繁体切换快捷键

    win10中文简体繁体切换快捷键Ctrl+Shift+F

  4. 问题解决——在结构体中使用set保存结构体数据

    =====================声明========================== 本文原创,转载请明确的注明出处和作者,并保持文章的完整性(包括本声明部分). 本文链接:http:/ ...

  5. [分享]一个String工具类,也许你的项目中会用得到

    每次做项目都会遇到字符串的处理,每次都会去写一个StringUtil,完成一些功能. 但其实每次要的功能都差不多: 1.判断类(包括NULL和空串.是否是空白字符串等) 2.默认值 3.去空白(tri ...

  6. 虚拟机centos6.5 --设置主机名

    vi /etc/sysconfig/network #修改HOSTNAME后面的值,机器名 vi /etc/hosts #设置ip和机器名的对应关系 192.168.12.232 master 192 ...

  7. 本地Git仓库与Github远程仓库同步

    在本地创建了一个Git仓库后,还想在Github创建一个Git仓库,并使其远程同步.1.在电脑的用户主目录下有无.ssh目录,若有看是否有id_rsa和id_rsa.pub文件.若无,则创建SSH K ...

  8. Bellman-Ford算法解决单源最短路问题

    #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define max 100 #define I ...

  9. 怎样Zbrush 4R7中添加和删除SubTool

    添加或删除SubTool在ZBrush®软件中是非常简单易操作的,通常在用SubTool面板已经给我们提供了相应的命令来对其进行操作,它能够将一个或多个格式为ZTL的文件同时添加进SubTool里. ...

  10. 字典树(Tire)模板

    #include<stdio.h> #include<string.h> #include<stdlib.h> struct node { node *ne[]; ...