某公司(对,是某公司,这就意味着很多人看到这篇文章可以理直气壮的说,这不是在说我,我们不是某公司,至于到底是谁,可能智者心里最清楚)的几个程序员(记住,这里的程序员是地球上某个地方的人眼中的那些敲代码的)接到了一个项目,要在
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
个月的时间内上线运行
…
”的文件。
分享到:
相关推荐
对于想要学习VB编程或游戏开发的人来说,可以通过分析和修改源代码来深入理解上述知识点,并提升自己的编程技能。 在【标签】"VB 游戏 聪明跳棋"中,"聪明跳棋"是一种策略性棋类游戏,它可能涉及棋盘逻辑、游戏AI...
人力资源开发的目标主要有两个方面:提升智力,使人变得更聪明;激发活力,使人更积极。这是因为绩效是由智力和活力的乘积决定的。开发人力资源还有其内在的规律性,如物力资源的开发依赖于人力资源,人力资源的价值...
此外,如果项目包含单元测试,还可以了解到测试驱动开发(TDD)的概念。 总的来说,这个“IOS开发项目源代码”是一个全面的学习工具,可以帮助开发者巩固Objective-C语言基础,理解iOS应用的架构,掌握Apple的开发...
1. **聪明与谦虚**:聪明并非决定编程能力的唯一因素,更重要的是如何有效地运用自己的智力。谦虚的程序员更愿意承认自己的局限性,他们会寻找方法来弥补这些不足,例如通过使用良好编程风格、代码评审和测试来减少...
总的来说,“易语言聪明的编辑框”是一个很好的学习案例,它展示了易语言在开发交互式用户界面方面的强大能力。通过深入研究这个项目,开发者不仅能掌握易语言的基础语法,还能了解到如何通过编程实现更高级的用户...
易语言,作为中国本土开发的一种高级编程语言,以其简单易学的特性深受初学者喜爱。在这个"聪明的密码框"源码中,我们可以学习到易语言如何实现这样的功能,并探讨其中蕴含的一些关键技术。 1. 易语言基础:易语言...
"聪明的吃豆人"项目是一个基于Python编程语言开发的游戏,它可能采用了经典的Pacman游戏概念,通过智能化的算法让游戏体验更为丰富和有趣。在Python中,这个游戏可能利用了pygame库来创建图形用户界面和处理游戏逻辑...
#### 五、智慧城市:城市有“大脑”,治理更“聪明” 智慧城市是利用信息技术改善城市管理和服务的一种新型模式。它通过集成各种智能系统,如物联网、云计算、大数据等技术,实现城市的智能化管理。智慧城市的主要...
"旺财"在这里可能是一个项目或者程序的名称,暗示了这个源码可能是用于开发一个智能或者有特色的软件。 源码,即编程代码的原始形式,是程序员编写的应用程序或系统的基础。它包含了程序的所有指令,可以通过编译或...
标题中的“frank:因为聪明的人值得自动化”可能是指一个名为“frank”的项目或工具,它强调通过自动化来提高工作效率,尤其是对于那些善于解决问题和创新的聪明人。这个项目可能是一个Ruby编程语言的框架或者库,...
易语言是一种以中文为编程语言的编程环境,旨在降低编程难度,让更多人能够参与到程序开发中来。在这个资源包中,"聪明的密码框"应该是作者编写的一个特殊功能组件,可能是用于实现更加安全或智能的密码输入功能。 ...
这个项目实例特别适合那些正在学习易语言,或者需要进行个人技术提升、毕业设计以及小团队项目开发的人。 在易语言中,密码框通常用于输入敏感信息,如用户密码,其特点是输入的内容以星号或圆点显示,保护用户的...
- 测试驱动开发:先编写测试用例,再编写代码以使测试通过。 - 代码审查重点:可读性、一致性、错误预防机制。 - 抽象类与接口:抽象类提供部分实现,接口只定义行为。 以上只是部分内容概述,面试问题涵盖范围...
公司倾向于招聘那些在顶尖学府毕业的优秀学生,坚信“聪明人”的价值。谷歌的招聘标准注重能力而非经验,特别是对数理逻辑和开发能力的要求。公司重视基础教育,喜欢邀请业界名人进行技术分享,以激发员工的创新精神...
对于学习选择,Java适合那些热衷技术、有耐心和聪明才智的人,长期发展空间可能较大。而.NET则能在短期内看到学习效果,更容易上手并找到工作。无论选择哪个平台,关键在于积累工作经验、提升技能和情商,而不是初期...
6. 英特尔的“聪明人吸引聪明人”策略,强调了企业文化对吸引人才的关键作用。 7. 摩托罗拉的“回聘”与“辞职面试”实践,显示了尊重离职员工并从中汲取经验的企业文化。 第七章 人员素质测评: 8. 日本电产公司的...
人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、...
开发软件、解决问题时,失败是常态,但每次失败都是一次学习的机会,积累经验后,我们更可能在未来取得成功。 2. "除了自己,任何人都无法给你力量。" 在IT领域,个人的学习能力和自我驱动力至关重要。尽管团队合作...
这是目前的原型项目,用于开发基于 JavaScript 的组件 UI 库,基于由 Lonely Planet 的项目(我与一群比我聪明得多的开发人员一起工作了一段时间)开发的原则。 就目前而言,它提供了一个可以在模板中调用的组件...