1、测试资源不足和保证软件质量的矛盾
没有可用的测试团队或测试人员,在很多小型开发团队和小公司都普遍存在测试资源不足的问题,甚至在某些大公司也可能出现。严格的成本控制,导致测试资源相对不够;失败的项目开发计划会导致压缩测试的时间来保证研发的时间;到了测试的时候,就肯定出现你们现在这样的情况。最后的结果呢,是所有人都得不了好:领导会因为客户的投诉而头疼甚至被老板骂;项目经理会对质量负主要责任,对整个项目负主要责任。如果有测试团队,测试会对质量控制负主要责任。没有,项目经理负主要责任。
应对办法有以下几个:让开发人员做测试;让有限的测试人员只测试主要核心功能点;项目经理死扛,自己亲力亲为;降低软件质量;让领导充分意识到这个矛盾的风险。
2、项目日程表异常紧急和按时上线的矛盾
这类项目最大的问题是时间成本。时间成本越紧,失败风险越大。要提高这种项目的成活几率,只有一个办法。砍范围。把所有可有可无的需求砍掉,放到下一期去实现。确保团队能够以合理的生产率产出成果。项目经理要做的最重要的就是,想尽一切办法,把优先级低的功能砍掉。集中资源保证高优先级需求的产出。要随时告诉明白客户,团队最大的产出是多少,团队正在做哪些功能。及时让客户进行确认和调整。让客户明白风险在哪里有多大。这是非常考验项目经理沟通、谈判、组织协调能力的。能把客户啃下来,保证团队正常工作,还有1、2分活的可能。不然,最后就当替罪羊吧。团队、老板、客户,都需要你承担责任。
3、团队的生产率严重低于估计和项目按时上线的矛盾
项目竞标的时候是公司专家组资深架构师按照已有生产率来进行项目估时和报价的,但项目开始以后出现资源不足问题,例如:原来C++团队的资深工程师走光了,只有两个新人可用。原先是按照资深C++开发工程师的生产率来估计的时间,现在给你这样的一个团队,生产率和资深C++开发工程师相差很多倍。项目日程表却异常紧急,这怎么办? 没办法。这种项目的失败风险是极高的。解决办法只有找外援或者项目经理死扛了,否则这类项目失败是必然的。团队人员突然离开是项目的一个极大的风险,特别是核心资深开发人员,公司往往处于成本原因不可能对每个人有一个备份的人员,所以核心资深开发人员突然离开往往使项目处于高危状态。
4、项目经理兼任Team Leader的矛盾
项目经理和Team leader这两个职位貌似是一样的,其实不一样。项目经理的职责包括:项目进度控制,成本控制,需求控制,风险管理,配置管理、任务分配以及与客户相关的沟通和交流等。而Team leader的主要职责包括技术方案确认,开发计划制定和跟踪,技术架构设计,重要技术问题攻关,核心代码编写和技术指导以及开发团队管理。对于小公司来说,为了节约成本很可能把两个角色让一个人来承担,这样的混合角色对个人能力要求非常高,需要两方面的专业知识,两方面都得一手把握,压力很大。现在很多大公司基本都将这两个角色分拆了,项目经理就是管进度,做协调,Team Leader就负责开发相关事宜,另外还有一个角色,叫Product Manager,这个角色主要是市场和开发之前做协调了。按照我的理解,项目经理需要对项目功能和需求(产品)有非常深入的了解,对软件开发过程相当有经验,同时具有很强的沟通能力,因为客户都是牛的一塌糊涂,你要引导客户的需求,那是沟通功夫了得。另外,项目经理是项目总负责人,对领导对跨项目和部门也需要及时的沟通协调以获得最佳的资源,以解决过程中的问题。而Team leader需要控制开发过程中的系统性风险,总体架构把我和关键核心部分开发。软件开发过程有很多的环节,任何一个环节出现大的差错都会导致焦头烂额并最终项目失败。但是在大多数公司,我们都不会称其为失败,一般会说:项目延期,好的延期半年,差的甚至有的延期1年!核心竞争力:开发管理+过硬的技术能力。
5、有限的资源和时间与按时上线的矛盾
项目管理的主要矛盾就是如何在有限的成本(资源)和时间内高质量的完成系统。根据毛*泽(东思想,革命为什么成功,要能分清各个阶段的革命主要矛盾,集中优势兵力来予以打击。在时间管理上就是轻重/缓急。轻重,即是否为核心需求;缓急,即优先级、顺序。 资源有限,那就把核心资源放在核心功能和最大风险的部件上。我记得自己工作那几年,从来不考虑这种问题,领导让做啥就做啥,被动式积极(有任务就全力以赴,没任务就自学、不闻不问),那时候我只是一位执行者。 其实,任何事情都可以分成两阶段:先分配,再执行(日常生活中,我们做任何事情都是先在脑子里分配好了)。而在公司,这两件事往往是分离的:领导做分配,下属做执行。
分配任务的核心原则,就是先分清轻重缓急,作为管理者,一定要将它养成习惯。
最新内容请见作者的GitHub页:http://qaseven.github.io/