看牙与IT项目
周末为了一颗牙第五次去牙科诊所,得到的消息是:还需要观察至少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项目的更多相关文章
- 因为之前完全没有接触过Spring,所以准备先把spring实战看完再落实项目
因为之前完全没有接触过Spring,所以准备先把spring实战看完再落实项目
- 开源利器分享:BitBar 坐看今天你的项目涨了多少 star
今天开头我想叨叨几句,我个人最近的感受.在这个信息爆炸,互联网的时代里.我的周遭总是充斥者着各种让人能产生焦虑的信息, 我不知道有没有小伙伴和我一样,看到各种神通广大.游戏人生的大侠,低头看看自己当前 ...
- MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...
- 通过go-ethereum源码看如何管理项目
今天抽空看了下go-ethereum项目的源码 ( https://github.com/ethereum/go-ethereum ),其中 ethereum 是github下的一个帐号.go-eth ...
- 从一个多项目Web工程看Eclipse如何导入Gradle项目
这里再次说一下为什么我们需要熟悉Gradle构建工具,主要原因就是很多开源项目现在都在改用Gradle作为构建工具.一部分的github上的示例代码也在用Gradle构建,如果还是只能用maven,那 ...
- Mongo基础使用,以及在Express项目中使用Mongoose
MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...
- Jenkins中构建Testcomplete项目的方法介绍
Jenkins的部署在上一篇随笔中已经和大家介绍了,下面我们介绍一下再Jenkins中构建testcomplete项目.我这里使用的是Testcomplete11,下面详细介绍一下构建步骤. 1.Je ...
- Java进击C#——项目开发环境
本章简言 上一章我们了解一下开发环境,知道了什么去新建一个项目工程.却并没有去项目工程进行介绍.可是之后我们会常常跟项目工程打交道.所以这章笔者就对项程工程的常用的一些功能进行讲解.当然说全面那是不可 ...
- [SL] Silverlight + WCF Demo项目
I:项目描述:利用 Silverlight+WCF 技术,模拟资源管理器(如图1)功能,通过地址栏输入本地文件夹路径,然后将解析出来的该目录下所有文件(夹)存储到数据库中,然后再加载到界面上显示出来: ...
随机推荐
- 三种另外的循环 while{} 和do{}while{}还有switch case
while的写法 var i=0; while(i<5){ document.write("12378<br />"); i++;} while(true)-- ...
- 编译hadoop遇到maven timeout
在编译hadoop的过程中,使用ant jar进行编译时,提示maven版本库连接超时的问题,通过搜索发现,在如下文件的位置中有repo2的版本库地址,这个地址在国内,目前不能正常的访问: 将 ...
- oracle序列
一.序列 序列是oracle用来生产一组等间隔的数值.序列是递增,而且连续的.oracle主键没有自增类型,所以一般使用序列产生的值作为某张表的主键,实现主键自增.序列的编号不是在插入记录的时候自动生 ...
- HTML5客户端数据存储
HTML5 使在不影响网站性能的情况下存储大量数据成为可能.之前,这些都是由 cookie 完成的,cookie不适合大量数据的存储,因为会影响速度. 举个例子: var obj = {x:1}; / ...
- 百度地图的简单使用 ——html js
一.简介 百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富.交互性强的地图应用,包含了构建地图基本功能的各种接口,提供了诸如本地 ...
- 初识zookeeper(一)之zookeeper的安装及配置
1.简要介绍 zookeeper是一个分布式的应用程序协调服务,是Hadoop和Hbase的重要组件,是一个树型的目录服务,支持变更推送.除此还可以用作dubbo服务的注册中心. 2.安装 2.1 下 ...
- jquery发送异步请求
var remark = $("#"+id+"remark").val(); var shopid = $("#"+id+"sho ...
- java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法
在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里 ...
- C中signed与unsigned
unsigned ; cout<<i * -; 问结果是多少. 第一反应:-3.不过结果似乎不是这样的,写了个程序,运行了一下,发现是:4294967293. 1)在32位机上,int型和 ...
- 使用O_APPEND标志打开文件对文件进行lseek后进行读写的问题
fd = open("./newfile", O_RDWR|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR); ) { perror("open&qu ...