找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 925|回复: 0

探究IT项目失败的原因

[复制链接]
发表于 2015-11-23 15:25 | 显示全部楼层 |阅读模式
上海信息化培训中心有五步指引来确证个软件的失败:
; A6 C6 t/ H' A' Z$ E4 I  \1 h# w9 M$ \5 p, x
  错误一:采用平庸的开发团队
1 K) a2 Y% o" f5 _# w# ~" B. Y! ~, N" r
0 E2 u4 c8 K6 Y1 F  软件设计是有难度的,而且不幸的是,很多自称程序员的人确实不能胜任软件设计。尽管这是项目失败的首要原因,你也不曾从官方的失败报告中得知。在所有的行业,软件业,物流业,或者客服业,人们对同事的无能都太过宽容。你从来都不会听到有人说“我们团队没有足够的智慧来完成这件事”。为什么要这样伤人的心呢?显而易见的,如果这队分得了任务的人员并不擅长这份工作,他们的工作会日复一日,日复一日……等等……但软件却没有做出来。你也不用太担心HR会阻挠你招聘一班废物。在大多数的案例里,我向你保证,HR对此毫无建树。* ~  k5 e+ k8 R5 @. R$ d- e% @
. C0 W7 q* S; I9 `! Z
  错误二:按周来定目标
4 K  w" k. \6 h: G1 @# h) B; n# i  t: y4 p2 V: ^6 k. x
  假设你想改造你的厨房。你请来的师傅已经搞过很多厨房,而且不作详细蓝图就能估算出这项工作的成本。但软件开发者是在制造前所未有的东西。如果前所已有,他卖张拷贝的光盘给你就行了。因此,粗略的估计是不可能的。他们需要在写代码之前做好详尽的计划。无论你是客户还是开发经理,你的责任就是确保开发人员带着详尽计划来开展工作。当你向开发人员询问计划时,他们大多数人可能只会给你一份把进度按周来划分的时间表。这看似非常合理,但其实不然。如果你让软件团队提交一份大粒度的时间表(大是指需要两天以上的工作),那么你可以认定他们没有考虑到所有需要实现的细节,而这些细节将会积累,导致延期。
7 y9 v8 h- C+ {2 @4 }" R5 d# d/ I, D5 Q1 P( X! r$ s4 Z: x
  错误三:为截止时间而谈判
% Y+ l) `4 M4 W' a8 Q3 a  w
' i6 a' r, e" \, D) V4 L5 e2 [  还有什么比按周划分软件项目更糟糕?就是要求团队承诺大大地提早完成工作。根据我的经验,大多数开发者都会乐观地接受你的暗示并参与讨价还价。然后你会得到一份友好的协定时间表,但却无法按时执行。
: ^; k( G, C1 [0 j" [4 d5 q3 }, o! t
- B6 s2 x' Y/ W, I+ Q8 z  试想以下情况:海象妈妈会在怀孕15到16个月后,生出小海象。你可能会叫海象妈妈保证在15个月内做到,而她也说没问题。或者你说,“15个月?疯了吧?我们要在8个月内生出”。当然,这样谈判是无法促进事成的,而且即使得到一份8个月的进度表,我还是告诉你一个小秘密:这是不可能实现的。你可以取得一份11个月的时间表,但你还是要等15个月,因为小海象就是要15个月才能出产,有时甚至16个月。2 n! {" O6 w" d& S7 V
# w9 |7 t) f! S; Z) E  a, e/ P
  错误四:均分任务+ R# _% p  l5 F2 I8 F5 }

+ G% l" K& v3 S! D6 Q: s$ p% {% Q  这里有一个破坏项目的好方法。列出人们需要做的所有工作,然后给重新均分给各人。如果Mary有太多的工作,就分一些给John。这听起来完全合理,使得你不会被质疑。但我向你保证,时间一长肯定会出现问题。那是因为当一个开发者去替代另一个时,我们有理由假设效率降为十分之一。John将会花费无数小时去搞清楚Mary其实已经熟悉的那部分代码。而且John改bug也不及Mary快,因为Mary才了解所有的陷阱在哪里。; t4 ^9 _2 K/ O& g# X; Z8 u
4 X! W7 v7 J0 G4 a
  错误五:工作到深夜8 x8 t" r4 {" s: l5 ]) F$ V
7 X: {1 D2 f2 h4 \+ j# |
  让我们假设有个项目要每周工作40小时,连续六个月才能完成。如果你让所有人每周工作60小时,那么持续四个月就能完全搞定。软件团队可能甚至会接受这个挑战,因为这使他们看上去像英雄(那个海象队有多厉害?他们每个周末都来工作!)这能行的,是吧?再想想吧。有一部完整的文献论述了“加班不会使软件更快产出”。Edward Yourdon,作为软件企业家和该文献的作者,称这种项目为“死亡行军”。
' X9 T* @( A- D- m/ o0 k, D
! [# w$ B" c0 A9 p8 Y% o* f  软件开发者花费大量的脑力劳动。即使是最好的程序员,也很少有能坚持几小时以上的高强度脑力劳动。另外,他们还需要休息一下大脑。这就是为什么你好像总能撞到他们在上网或玩游戏。
! ~- G: K; P- D4 V8 P
& A$ h( N- Q7 y) x$ h) _  强迫他们投入更长时间坐在电脑前,并不会转化为更多的产出——即使会,那都将是劣质的产品。当软件开发者的大脑完全发烧,他们几乎做错多过做对,写出无法使用的代码,或者引入大量的bug。而如果你真的禁止他们上网,玩多人游戏,强迫他们在正常的睡眠时间继续写代码,好吧,他们可能会开始离你而去。死亡行军不是造成项目延期和预算爆炸的唯一条件,但绝对是充分条件。! O+ G- B! [8 I9 n7 @' J  X/ ~( \) s
) Z1 N& |: n3 R' o7 w* P+ s0 a4 _
  如果以上是使你项目失败的方法汇总,那么怎样做到万无一失呢?首先,你要招聘一个巨星级人马。在Fog Creek,对于一个全职岗位,我们倾向于审核大约400个候选人。因为最优秀的开发者拥有十倍于“一般优秀”的创造力。8 Y; D, I; ]: b/ U

% z! Y# k' o: U( B  其次,让开发者给出细粒度的时间预算。是的,让开发者去预估制作一个新应用需要花多长时间,是不容易的。这就是为什么他们要在每个项目之前作出可靠的蓝图。
. p- Q( k1 S4 Q( r% W6 P0 M7 _& n7 `9 o+ H- L
  一旦你有时间表在手,不要尝试提前截止日期。如果项目不能在你能谅解的时间内完成,解决方法不应是去交涉一个“好听的”时间表,而应该是争取更多资源,或者推迟上线,或者拿掉一些功能。/ d) k5 l5 \0 D" i& e5 Z
3 t8 ?/ Z' j1 x
  当项目正在进行时,你会多次被诱导而想重新分配工作。但你要谨慎地重分配。所换的新人需要花不少时间去驾驭原作者的代码。我觉得让人员在不同岗位上轮换有助于消除不可替代性,但我是谨慎地安排这事,并且在时间表里加入额外的三周给新人以学习新代码,和额外的一周给旧人去教新人。
, V( f! Z7 @8 @4 c* [: J7 u3 i* D' p
  最后,鼓励你的员工按合理的工时,一周干40小时。我是说真的。除了偶尔为截止日期而冲刺,我们在Fog Creek都是一天8小时工作制。在技术的世界里,应该将一个大项目看成是一次马拉松,而非一次短跑。
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2026-10-6 14:02

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表