某公司(对,是某公司,这就意味着很多人看到这篇文章可以理直气壮的说,这不是在说我,我们不是某公司,至于到底是谁,可能智者心里最清楚)的几个程序员(记住,这里的程序员是地球上某个地方的人眼中的那些敲代码的)接到了一个项目,要在
3
个月内完成一个一般项目组要半年才能完成的系统。他们除了项目经理口中所描述的客户需求和一份密密麻麻的用户需求规格说明书之外,几乎得不到用户其它的反馈。
项目在一次启动会议上就这样开始了。
接下来就是不计其数(其实再不计其数也超不过
90
次)的加班,他们都很相信自己的实力,也相信时间能够解决一切――因为一天
8
小时工作之余还有其他
16
个小时。临近
3
个月末,程序员们几乎到了崩溃的边缘,但是大家心里都有个信念,那就是坚持过
3
个月就可以解放了,于是肃寂的深夜里他们又精神起来。
3
个月的期限到了,大家终于拿出了一个勉强可以用的系统,虽然仍然漏洞百出,
bug
不断,但他们也收获颇丰,无数个临时解决方案、口头协议、与代码脱节的文档、没有注释和缩进的实现、连自己都说不清楚能不能用的代码
…
这一切,他们都有一个共同的理由:时间不多,我们已经顾不得那么多浪费时间的事情了。
但是,正当大家认为可以松一口气并计划周末行程的时候,
QA
组却报告了甚至比用户需求还多的问题列表,其中大部分问题都可能会导致系统失败。
而正当大家沮丧且不知所措的时候,项目经理的反应似乎出人意料,在一个漫长的内部评审会上,他平静的做出了项目延期一个月交付的决定。
于是,接下来的一个月大家游走在自己亲手制作的代码迷宫里,过着修改一处
bug
会带来
3
处新问题的日子,
3
个月后可以放松的希望早已消失的无影无踪
…
就这样,大家最终还是用了一个多月的时间把一个补丁摞补丁的系统交付给了客户。
到这里,我们的勇士们似乎虽不完美但也自豪的完成了任务,但事实并不这么让人随心。客户看到系统之后,发现了(这是一定的,系统的问题能欺骗自己但欺骗不了用户)另一批问题,然后是修改、交付、修改交付
…
啊哈,我们的故事又得以重复的继续了
…
这段故事结束已经是将近
7
个月之后的事情了,最终的项目验收会上,程序员们才真正明白客户方其实是计划在
6
个月完成这个项目,而客户为了保证顺利上线,他告诉项目经理需要
4
个半月来完成项目,而项目经理则为自己留出了另
1
个半月的缓冲期,可怜的程序员们只得到了一半的时间来完成这项任务。
到这里,我们好像没看到一个傻子,故事是被一群聪明人驱动着,但事实却似乎并没有偏袒他们,问题出在哪里呢?
怪圈
1
:
客户认为开发方交付的系统一定是有问题的,所以他必须给自己留出缓冲期来修正这些问题,而缓冲期占用的时间会导致开发方无法交付出高质量的系统。这一怪圈也体现在项目经理身上。
怪圈
2
:
所有人都是在为了节省时间努力,但最后却比计划用的时间还多――即便是之前已经考虑到了缓冲期。
怪圈
3
:
贫瘠的沟通和过深的沟通层次导致了双方的不信任,从而使每个人都进入防御状态,而防御状态又进一步阻碍了沟通。
这些大家“耳熟能详”的现象,几乎已经成了业界的杀人灭口必备道具。人们都在很努力寻找各种方法试图摆脱它们,却始终没有走出过这些圈子。
那么针对这几个怪圈我们应该怎么解决呢?
1、
多次交付。
缓冲期是降低风险的有效手段,风险又来自于信任度,交付次数太少会使客户无法及时掌握项目情况,影响客户信任度,而信任度不足会导致客户(包括你的上司)为自己设置缓冲期,从而压缩实际开发时间。因此,用多次交付代替一次交付,可以将风险和误差分摊到每次交付中而不是最终的一次――即便是多次的误差之和要多于一次交付的,就像人们可以忍受每天班车晚点
2
分钟,也不可忍受它一个月基本不晚点但会有某一天晚点
30
分钟。
2、
有效时间才称为时间。
怪圈
2
是我们大家常常会走入的误区,认为时间可以以稳定的比率换取价值,但这似乎只是一厢情
愿,不同的任务、不同的开发人员、不同的过程模型,时间与价值的比率是不同的,有的甚至是负值(俗称帮倒忙),再多的时间浪费在比率不高的任务上,只会让
整体速度降低,最终得到时间不够的假象。一般负比率的时间投入有,重复性工作(重复代码、重复过程、翻译代码的文档等等)、误导性工作(错误的注释、脱节
的文档)、资源透支(频繁加班、临时性解决方案、不切实际的进度安排)、过度工作(过度设计、超出需求前提的实现、完美主义)
…
3、
现场客户。
现场客户可以增大客户对项目的了解程度,及时的对需求做出变动,保持项目相关者最及时和畅通的沟通,这样不但可以降低“开发方交付的系统一定有问题”这一想法的出现几率,开发人员也可以得到最直接的反馈和最合适的工期约定。
或许这个故事所暴露的问题不仅仅是这些,但再多的问题也需要正确的方法和大家共同的努力去逐个击破,所以在此抛砖引玉,希望自己的点点想法能为大家带来一些帮助――哪怕是反面教材,也希望给各位看客带来写什么。
哦,对了,故事的结尾应该交待一下最终
BOSS
的情况,虽然不像童话故事那样浪漫,但客户方领导的办公桌上确实放着一份写有“
…
本项目计划在
8
个月的时间内上线运行
…
”的文件。
分享到:
相关推荐
这是目前的原型项目,用于开发基于 JavaScript 的组件 UI 库,基于由 Lonely Planet 的项目(我与一群比我聪明得多的开发人员一起工作了一段时间)开发的原则。 就目前而言,它提供了一个可以在模板中调用的组件...
通过智能汽车的进一步研究与发展,将使汽车变得"聪明"起来,从根本上改变现行汽车 的信息采集处理、信息交换、行车导航与定位、车辆控制、汽车安全保证等技术方案与 体系结构。驾驶智能汽车在很大程度上可减轻驾驶...
在这个子项目中,我们正在开发自己的麦克风阵列。 您可以/将在我们的存储库中找到这些软件部分: 用于SIMIC的Verilog驱动程序(已解决) 用于ARM-Core和FPGA的通信模块(已解决) Python驱动程序以Numpy数组的形式...
通过智能汽车的进一步研究与发展,将使汽车变得"聪明"起来,从根本上改变现行汽车的信息采集处理、信息交换、行车导航与定位、车辆控制、汽车安全保证等技术方案与体系结构。驾驶智能汽车在很大程度上可减轻驾驶员的...
人类 是地球上最聪明的生物。因此,他们不断发展,并期待一切事物的最佳前景。其 中一种就是人工智能。 它存在于我们生活的方方面面。 人工智能最有用的用途可 以说是在商业领域。它使工作变得更容易。超级计算机、...
历史上的 Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件...
历史上的 Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件...
Endoh令人难以置信的聪明ASCII流体动力学模拟 -使用ESP8266 + ATMEGA32U4上传,保存和运行按键注入有效载荷 -ESP8266解除验证 -适用于MCU的基于Lua的交互式固件,如esp8266 -Raspberry pi上的PWM-正确完成(硬件稳定...
SL-3010 双龙智能机器人具有多个红外传感器、光电传感器、接触传感器、声音传感器、直流稳压滤波电路、直流减速电机、驱动轮、导向轮及驱动电路、电池架、遥控接口(遥控收发器为选购件) 、音响器、LED 发光二极指示...
请问你凭什么在这个市场占有一席之地、好的项目只是你的聪明才智,开发技术也只需要一次成本。 上线审核、后期维护、分析统计、推广营销难道这些也是一次付费终身享用?太天真了吧! 你错了、你一点也不天真因为你...
VB6.0运行环境:硬件,要求486以上的处理器、16MB以上内存,50MB 以上的硬盘,cd-rom驱动器,鼠标。软件:要求windows 95以上版本。 1.3程序设计思想 游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐...
在我们社会中,拥有最大购买力的人中约有67%的人更喜欢电子购物。 在过去的五年中,印度经历了一场数字革命,它在不同程度上改变了消费者的购物体验。 不断变化的消费者偏好,可支配收入的增加,智能手机的使用...