漫谈中国软件(中)
当然做一个“好软件”绝对不只是项目经理的事,而是整个我辈软件青年的事。换句话来说,这是项目组整个Team的事。而整个项目Team成员包括角色有,商务人员,售前人员,项目经理,需求人员,设计人员,开发人员,测试人员,QA,CM,DBA,系统集成专家,等。如果想做一个“好软件”,仅仅某一两个角色做的好是远远不够的,需要的是整个TEAM的成员都完成的非常好。但凡“烂尾楼”和“出问题”的项目基本上可以断定其中某些重要环节没有做好。举例来说,上篇说的项目后期维护费用超过新建费用,和需求,设计没有做好有很大关系。还有前面说的推倒重来的项目,和需求没有规划好有很大原因。
而想要所有角色都能完成好,谈何容易?光是这些角色在中国就还没有明显的区分出来,比如QA和CM,我见过的软件公司这两个角色基本上都沦落为打杂的。有的QA和CM是一人兼着,有的甚至根本没有。还比如有的公司很不重视测试人员,要求软件开发人员也承担测试人员职责。(前面说的市场上的小外包团队也是开发人员承担测试人员职责的情况)。还有项目经理和售前人员和商务人员的职责混杂等等这些问题。这种情况下,怎么可能做出一个“好软件”?所以目前大部分中国的软件最多还只是停留在做好一个软件的层面,而不是做一个真正意义上的“好软件”。而做一个软件项目,首当其冲就是leader项目经理的事情。那项目经理的职责是什么?
曾经和业内朋友一起讨论过,一个实施阶段软件项目的灵魂人物是谁?我朋友说是系统架构师,因为他能够决定开发人员做的好与坏,从而影响整个软件项目。并且开发兄弟比较容易服系统架构师,因为他很懂技术,跟着他可以学到东西。我以为这不尽然,因为一个软件项目包括的东西很多,而决定一个软件项目的成败因素也很多,所以我认为最终谁来负责这个软件项目成败,那么这个人就是灵魂人物。换句话来说,我认为项目经理才是灵魂人物。试想象下,如果系统架构师不合格,软件项目出问题了,是不是还是项目经理出来解决问题的?(这里提提敏捷软件团队,这个相对特殊点,因为敏捷团队是共同承担的一个团队,所以对于整个团队来说这种灵魂的作用相对来说会弱点,但是依然还是存在的,这个人就是scrumMaster。)
进入实施阶段后,项目经理承担整个软件项目的成败,所以这个角色很关键。做过项目经理的人应该都知道,项目经理要和客户沟通,处理客户关系,要跟进软件项目机会,要能做些售前,写写方案,还要和客户谈工作量,进行商务事宜,甚至还要协助做验收回款等事宜。有的还需要面试招人,要帮助公司干些其他杂七杂八的事。当然最重要的还需要能管的住下面的兄弟,能帮下面兄弟填坑,最终带领兄弟们最终完成好软件项目。项目经理牛X吧,当然!要不怎会是灵魂人物呢?然而我们想象下,项目经理也是个人,他不是神。他怎么可能都面面俱到呢?
但在中国,即使对项目经理要求这么高,很多软件公司的项目经理工作才5年,甚至5年不到。当然不是说没有特例,而是在大面上存在的问题。当然公司要培养人,可以理解,但是培养人要真明白往哪些方面培养,而不是一股脑全丢给他,让他负责。这根本不叫培养,这叫残害!在中国有句古话,“兵熊熊一个,而将熊熊一窝”。我想一个项目经理自身都不成熟,这种情况下又怎么可以做出一个“好软件“?那 “烂尾楼”项目的存在就很好理解了。等出了问题后,公司就着急找一“填坑“的。发布出来的招聘广告上写项目经理要求,一点都不专业,不现实,要求项目经理这也行,那也行,想想可能吗?
我理解真正意义上的项目经理,区分三类型。有客户关系型,有技术研发型,和介于两者之间的综合素质型。不同软件项目所需要的项目经理技能是不一样的,项目经理需要明白自己的优势和死穴在哪?一拿到项目的时候,心理要清楚这项目自己能不能接。接后对自己的挑战在哪里?而不管哪类型的项目经理,在承接软件项目实施后,都得明白怎么做一个“好软件“。不是说你沟通能力强,客户关系好,管理能力强就能做好的。曾见过一个项目A,项目经理沟通能力很不错,伺候的客户也很不错,管理能力也还行,但是下面的团队做的很辛苦,基本天天加班。由于公司重视,这个项目投入了很多高端人材,资源消耗很大。一个软件项目做完后,虽然客户层面满意度很高,但团队很多人离职。
为什么会出现这种情况呢?近期很多学校开了一门课程叫软件工程,这门课到底解决什么问题?项目管理和软件工程的区别到底是什么?搞不清楚这两个概念的,去度娘。
项目经理不懂软件工程,是个非常可怕的事,相当于一个人失去了造血的能力,“不死即残“。用这么一个词来形容,绝不是危言耸听。做过项目经理的人应该很清楚,影响项目成败的因素实在太多了。所有和这个项目有珠丝关系的人或事,最终都有可能导致项目失败。比如兄弟离职,原因是因为家里老婆嫌丈夫加班太多,没时间陪。或者家离公司很远。或公司没加薪资,或客户环境较差,等等七大姑,八大姨的事。这些问题最后导致的结果就是这个兄弟要走了。项目经理怎办?如果这个人不重要或公司有合适的人顶替,那恭喜你好彩,只需要浪费少量的人力交接,可以重新推进。如果没有合适人顶替,需要重新招一个人,那问题就没这么简单了。首先项目经理能不能识别出其中的风险问题,及对其他块环节的影响?举例,做需求的人实力比较弱,或者做需求的人离职,怎么办?一般项目经理,只能识别出需要找一个需求的人来顶替。而需求交接带来项目进度延误,需求人员如何取信客户,需求推进容易出瓶颈(其它开发人员闲置),需求不够透彻,技术设计,开发,测试时间可能会被压缩,各环节面临压力容易出现质量问题,QA需要重新调整项目流程的控制,等等影响被忽略。而这只是其中一个环节问题,还有设计环节(人员不合格),开发环节(人员全新人),客户环节(需求没思路),公司环节(技术培训不到位),等等各环节的问题都交错杂在一起时,如果项目经理不能因时制宜的去分析和解决主要矛盾,那么软件项目将可能出现巨大的问题从而导致失败。而如何作好一个需求,如何做好一个设计,如何作好一个开发,如何保证需求和设计的一致性,如何保证设计和开发的一致性,等等这些问题都是软件工程范畴。所以如果不懂软件工程,基本在中国做项目经理很危险。因为你不清楚未来做软件,什么时候会突发情况,控制不住从而导致软件失败。当然,即使懂了软件工程也不一定就代表着项目就成功。这是个必要条件,至少具备做一个“好软件“的基础,否则充其量只能算做好一个软件。前面说的那个项目A顶多算做好一个软件了,但不能算做了一个”好软件“。这种软件项目,后续的项目发展中还会碰到很多维护问题。甚至可能出现维护成本超过项目新建成本。
在前面我们也谈了,做一个“好软件“需要的是全团队的Team都完成好。但实际上中国软件,由于情况的复杂性和各种各样的因素,基本不可能。那么这些环节遗漏怎么办?基本上没解决办法,项目经理自己不仅要懂怎么做软件,还需要能做具体一环节的内容。举例来说,需求很弱,那么项目经理就要做需求,设计很弱,那么项目经理就要做设计,QA弱,项目经理就要做QA。总之,项目经理就一万精油,哪里不足就往哪里贴。当然项目经理要懂管理,懂的培养人,否则他就会被累死也做不好这些事,想想项目经理去做需求了,其它的事,还能做好?他又不是神!这就很容易解释在市场上有些公司招聘的项目经理需要做需求,有些需要做技术开发,有些需要做客户关系和管理了。说白点,就是对做软件不理解。因为项目经理不是去“填坑”的,真正解决问题的是要让需求,设计,QA的工艺能真正做到位,减轻项目经理的压力。
下一章重点谈谈中国软件人才培养之道,谈谈中国软件的未来,说说我辈软件者应该做的事情。