软件项目为什么总是失败.docx
软件工程为什么总是失败一.开发商和客户的关系本来开发商和客户之间是软件产品的提供者和使用者之间的关系,一个卖东西,一个买东西,两者之间的关系是平等的, 公平交易,童叟无欺,这才是两者之间的正常合理的关系,可是 现在呢?现在开发商和用户之间的关系是严重不平等的,开发商为 了得到订单,往往委屈求全,放弃自己应该坚持的原那么,在竞标 时相互压价,甚至采用某些不够光明正大的手段来得到订单, 自己把自己放到了 一个被动的地位.许多开发商都有这样的口 号”以客户为中心",他们不仅是这样说的,而且也是这样做的, 问题是,一种不平等的关系,能够长期坚持下去吗?我从网上看 到说,某个工程竞标,某开发商提供的标书有一大箱子,需要两 个人才能抬到会场上.请问,这种标书有谁会看呢?难道开发商 连这点起码的常识都没有了吗?既然没有人看,那么为什么要 写呢?难道开发商真的以为客户会傻到不知道你在欺骗他吗? 那么写这种标书欺骗的是谁呢?恐怕是自己欺骗自己吧!考察这种不正常的情况出现的原因,既有开发商的原因,又有用户的原因.开发商的原因,一方面是经济大环境的影响,大家都这样 干,随大流而已,另一方面就是企图用这种方式来讨好客户,给 客户留一个好影响,这样才好拿到订单.而客户的原因,那么往往出于对于计算机的无知和恐惧,唯 恐自己吃亏上当担责任,所以天生对开发商不够信任,有敌对 情绪,心理上有挑毛病,找问题的倾向.结果就是这样,麻杆打狼,两头害怕,两者在开始接触的时 候,就小心翼翼,唯恐出现问题,一旦发生冲突,开发商就盲目 退却,而客户就得寸进尺,最后事情弄的一团糟.开发商怕得罪客户,却没有认识到有时和客户冲突是不可 防止的,客户怕开发商来欺骗自己,于是一次一次进行试探,开 发商越让步,客户越认为自己受到了欺骗.开发商的让步往往 换不来客户的信任,而是换来了客户的更加不信任.由于开发 商自己不相信自己,自己欺骗自己,最后也无法得到客户的信 任.毕竟软件开发是由开发商来完成的,那么就应该也必须由 开发商来决定工程的进展和内容,可是现在却往往由于客户的 压力而妥协,放弃自己的原那么,这样来做软件开发,能成功吗? 失败是必然的,成功才是侥幸.结论就是,在软件开发中,应当以开发商为中心,而不是以 客户为中心,客户的意见只是,而不是金科玉律,不 应该害怕和客户发生冲突,而应该分析冲突产生的原因,把冲 突看成问题的征兆,而不是单纯来消除冲突本身.打个比喻,开发商好比医生,而客户好比病人,病人有病来找医生,那么医生开药方时能否由病人来决定呢?病人如果对甘生的医术有怀疑,拒绝和医生合作,自己的病只能加深,而不 能治愈.开发商和客户之间的关系,是一种良好的合作关系,而不 应该是尔虞我诈的生意场上的竞争关系,双方的目标是一致的, 而不是对立的.双方之间的矛盾是共同利益基础上的矛盾,而 不是不可调和的敌我矛盾,必欲去之而后快.否认了这一点,软 件是不可能成功的.我们通常提到的”需求经常变化”,往往是开发商和客户之 间没有摆正相互关系所造成的,需求并没有变化,而是开发商 接受了客户提出的错误需求,而不敢提出异议,等到木已成舟, 才发现双方的理解有问题.二.销售人员和技术人员之间的关系俗话说,屁股决定大脑,一个人担任的角色不同,他考虑问 题自然会更多考虑到自己的切身利益,至于这样做可能会给同 事带来的麻烦,就管不了那么多了 .在开发商内部,销售人员和 技术人员之间的关系也非常奇特.在许多公司,为了提高销售 人员的工作积极性,对销售人员采用提成的方式进行奖励,而 将底薪定得很低,这样一来,销售人员为了拿到工程的订单,往 往会屈从于客户的压力,许下许多难以兑现的诺言,或者由于 对于技术的不了解而随意容许客户的要求.等到合同签订完毕, 进入工程开发阶段时,客户会拿这些诺言来要求开发人员进行 兑现,结果是开发人员非常被动,对销售人员怨气冲天,于是告 诉客户这些要求无法满足,而客户也勃然大怒,你们这些人怎 么一拿到钱就变了脸了呢?问题就是,由于销售人员不考虑技 术人员将来的实现,从而许下了过高的诺言,这样做的结果也 许可以拿到订单,可是由于销售人员和技术人员的口径不一样, 最后客户无所适从,感到自己受到了欺骗,接着将一腔怒火发 到了技术人员头上,两者之间的合作和信任关系逐渐变成了对 抗和欺骗的关系.有一天,有人对我说了个笑话,说计算机公司里三分之一 是干活的,三分之一是混代的,三分之一是骗子.最后的三分之 一就是指销售,请问,当公司的销售被别人当成骗子时,岂不代 表整个公司是骗子?和骗子做生意可能成功吗?工程的失败不 也很正常了吗?销售人员和技术人员应该是一个自行车的两个轮子,他们 的关系必须是相互合作,相互支持的,而不应该是互相拆台,相 互对抗的,一旦他们之间相互对抗,那么就会给整个公司的声 誉带来灾难性的后果.三.工程管理者和开发人员之间的关系工程管理者和开发人员之间的关系,本来应该是相互团结,相互帮助,共同面对问题的关系,可是许多工程管理者把这种 关系扭曲成了管理与被管理的强制性关系,用种种规章制度, 种种管理方法来强迫开发人员接受,把自己放到了开发人员的 对立面,和开发人员离心离德,甚至还美其名日"量化管理,科 学管理”.在这种糟糕的管理下,开发人员没有任何方法,要么 被动接受糟糕的管理,要么辞职以抗议.一旦一个工程发生了 这种情况,它想成功就非常难了.这种问题原来并不明显,现在随着各种MBA,印度经验,软 件工厂等似是而非的理论的泛滥,许多人,尤其是许多根本不 懂软件开发的管理者,更加变本加历,用近乎苛刻的手段来加 强对开发人员的管理,提出种种令人发笑的量化指标来对开发 人员进行度量,还加上理论的依据,对于敢于对抗他们这种做 法的开发人员,一律以开除来解决问题,造成的一个非常荒诞 的现实就是,许多公司里宁愿使用刚刚毕业没有任何经验的学 生,不要有工作经验的工程师,美其名日:易于管理,哈,容易上 当受骗而已,请问,在这种管理者和开发人员之间的关系作用 下,软件工程有可能获得成功吗?我个人并不反对尝试性的使用各种开发方法来进行管理, 也不反对MBA来管理开发人员,我反对的是软件开发中的强权 行为,完全剥夺了开发人员应当具有的对于工程的发言权和建 议权,完全不考虑软件开发作为高强度脑力劳动的特殊性,用 外行来管理内行并不可怕,可怕的是这个外行偏偏认为自己是彳勺,这才是事情的可怕之处.外行就是外行,不能因为处在管 慧对温覆鬻蠹春以了舞鬣鬻我谁 学目管理者和开发人员并没有本质的区别,他们只是所处 不同,担任的责任不同而已,在软件开发的问题上,尤其 在今体,技术细节上,往往管理者不甚精通,如果他不能吸纳、 当智慧而是自己一个人拍脑袋来做决策,那么失败 就在眼刖了.总的来说,在软件开发中,无论采用那种模型,那种工具,都离不开人的参与,离不开人与人之间的关系,如果不能正确 对待人与人之间的关系,把本来正常的,平等的,合作的人与人 之间的关系变成了不正常的,不平等的,对抗的人与人之间的 关系,那么还希望工程能够成功,无异于缘木求鱼,南辕北辙了.如果人与人之间可以相互信任,相互理解,相互支持,相互合作, 那么没有什么事情是办不成的,而如果人与人之间相互欺骗, 相互猜忌,相互诋毁,相互斗争,那么没有什么事情是可以办成 的.