项目管理中的心态对抗这个话题是针对项目经理而提出的,本文的定位在于给项目经理一个心理分析的启示,这个启示应该有助于您做好项目管理工作,协调好上层与技术人员的关系,同时让所有的开发人员具有更大的工作积极性。
1. 引言
项目管理在当前已经是一个被所有人都了解并熟知的概念,不过,当大家提到项目管理的时候总是会说计划、管理、人员、资源、任务……从来没有人提到过“心理”这个词。相信很多人都看过温伯格的《程序开发心理学》,也许很多人都认为程序开发心理学到这里也就足够了。其实,温伯格的《程序开发心理学》只写了程序开发中的一部分,那就是程序开发中的程序员心理学。而实际上,程序开发心理学或者推而广之的软件项目开发心理学里面应该至少还包括投资者心理学和客户心理学这两个部分。
有人会问:客户的确和软件项目关系很密切,但是投资者和软件项目似乎关系不大,所以认为应该不需要考虑投资者的心理。这里的投资者的定义与传统意义的投资者定义有所差异,这里的定义是根据环境不同而定义的,一种是在公司内,那么你的高层管理层就是这个项目的投资者,他们虽然是从客户那里拿到钱来做这个项目,但实际上,他们也在衡量拿到的钱和做这个项目的开销之间的比例关系问题,如果不合适,他们也会中止你的项目的。另一种,是你找真正的投资者,或者称之为风投,天使投资人来投资你的软件产品的时候,这时候的投资者的心理也同样会对你的产品开发过程产生影响。所以,投资者心理学也是必须研究的一个问题。
好了,到这里,我们谈到了关于心理学的问题,心态对抗的话题好像还没有引入。下面我们来一步一步分析。
既然有了投资者心理学、客户心理学和程序员心理学三个部分,而对于项目管理者或者说项目经理也有他本人的项目管理心态,或者称之为项目管理者心理学。这四个心理学合起来,就是完整的程序开发心理学!
四种人的四种心理之间因为软件项目的存在而相互碰撞,这样就必然产生了心态对抗的问题。这种心态对抗如果处理不好,结果就可能会让进展很顺利的项目面临危境,而如果处理好了那也许能让濒临绝境的项目起死回生。因此心态对抗或者说心态分析也就成了这个方面的重点研究内容了。
鉴于本文的篇幅和时间,我们不可能将这四种心理做非常完整的分析,我们只能有针对性地进行一些相关分析,其它内容将来可以考虑在后续的文字中进行一些探讨。由于本文是针对项目经理的,那么项目团队的管理就是其首要任务,所以这里我们主要做项目管理者心理学和程序员心理学之间的对抗分析。
2. 角色定位
在基本的项目团队中,主要存在两种角色:项目管理者和程序员。
2.1. 项目管理者
项目管理者一般称为项目经理。而对于项目经理,常规定义和技术人员的人同时有所差异的。可以说,对于程序员这类技术人员来说,他们一般认为项目经理应该是个技术角色,而不是单纯的管理角色。而在常规定义中,项目经理都是管理角色,而不是技术角色。这种角色定义的差别使得程序员与项目经理之间的冲突变得非常剧烈。
在中国的传统观念中都是,学而优则仕!什么是学而优呢?在软件行业中,那就是你的技术水平比别人高。而学而优则仕的传统观念又使得技术人员的先天的技术崇上意识被强化了数倍,于是非技术人员来做项目经理的难度就大大增加了。另外,加上有很多在中小公司的项目经理本人的项目经验很少,也不懂得如何协调关系,因此就更加难以服众。我们经常可以看到类似这样的问题:
三个人负责一个小项目,你是组长,你应该做什么?另外两个人总是意见不合,你该怎么办?
有人说:作为项目经理,手下的人不拿你当回事,怎么办?技术比他们强,但是我不想表现出来。
问个非常现实的问题,如果一个团队中的程序员素质都很低,如何管理?
比如像这样的四个人:
A 每天满脑子都是谈恋爱,下班就去拍拖了,虽然白天工作还是很认真负责的,但是一点也不思进取,得过且过的心态。
B 对待工作很积极,也有唐僧的精神,不达目的绝不罢休,就是有健忘症,很容易忘事,即使反复强调了几十遍的事情也会忘记,而且从不按需求来做事,只凭自己的心情,不管客户的要求。
C 心理年龄很小,做人做事都像小孩,说话做事都不计后果。老是闹得同事哭笑不得,有时候很想扁他,但看他还是小孩,就不跟他一般见识了。对待工作还是很认真负责的,虽然有怨言,但是还是100%的按照需求来做事。最严重的缺点就是极端不思进取,有平平淡淡才是真的人生观,上面采用多种激励方式都是肉包子打狗。
D 什么事都不想做,认为每天只要人到公司,就可以直接拿工资了,别人叫他做事,他不停的抱怨,说同事都有毛病。但是他很听关系较亲密的同事的话,只要跟他把道理讲通了,他还是会全力以赴的工作的。(我曾经给他通读《人月神话》)
这样的团队,导致我们公司每个项目都会拖延至少3倍的时间,老板很生气!
上面这些都是项目经理看待程序员的时候可能得到的一些常见看法。关于为什么产生这样的看法,和如何解决这些问题,我们在后面进行详细分析。
项目经理的一个主要职责就是计划管理并按照计划协调项目进展,但是在软件项目中程序员往往既是设计者,又是实施者,因此在对项目进度的把握中,如果项目经理自身没有比程序员更强的技术根底和经验,那么他不可能比程序员对这个项目的计划进度把握得更准确。而即使有这样的技术根底和经验,往往在自己不做开发的时候这种估算会有些偏向于理想化,也就是估算的时间偏短或者拿自己的开发时间来计划普通低水平程序员的开发时间,而在这种开发时间内这个普通低水平程序员是做不出来的,于是就使得项目的估算工作量偏小,结果也带来了程序员和项目经理之间的不和谐。
2.2. 程序员
软件项目中程序员是主体,软件项目的各个阶段都是程序员来进行的工作。而国内的程序员是以硕士、本科或者大专毕业生为主,基本上都是受过高等教育。这些学生都会有较强的个人自主性,大部分都是因为兴趣才走上了这条职业道路,所以,这些人的自尊心和自信心都是需要尊重的。
由于写程序本身是个具有创造性的工作,这和科学研究有着很强的相似度,所以才有了如此多的人投入到了软件行业中。其中不乏具有很高智商却没有机会在科研道路上进行攀登的人,这些人也逐渐成为了这个群体的顶尖力量。
程序员由于自身具有较高的素质,他们对自己的看法也有较强的执著性,因此要轻易改变这些人的想法和观点是相当困难的。
程序员对自己的职业诉求因为上面的基础,而更期望能够在有一定保障的条件下进行新的技术探索和新产品的开发,尤其是做一些其他人没有做过的项目或者没有解决的问题。
当然,程序员这个职业的从业人员也是有一定的层次划分的,因此这里面也有一些人是贪图享受的,只希望借着程序员的名声获得一些看上去似乎相对较高的收入,而进入以后才发现,完全不是自己想象的样子,于是就开始自甘平庸或者很快转行。
2.3. 周边角色分析
周边角色,主要是指客户和投资者。
对于客户来说,关心的主要是来找他调研需求的人是否能让他看顺眼,另外就是产品开发出来是否好用,是否既能提高效率又能节省人力。
对于公司来说,除了关心收支问题以外,还会考虑团队的稳定性,比如,有人提出这样的问题:请问怎么能够使公司的技术实力不随技术人员的变动而变动?
这个人的具体说法是:一个公司开发人员只有6个人,如果走3个人,又新招3个人进来,公司的技术实力就会发生很大的变化。如果6个人全换了,公司的技术实力就由新来的这6个人决定,我想问怎么避免这种情况,怎么能够使公司的技术实力不随技术人员的变动而变动?或者尽可能的减小影响?
同样的这个问题,山东一家公司的总经理也问过我,他甚至对我说,他好不容易把人培养出来了,结果个个都敢和他叫板,让他每天都睡不好觉,天天都在担心人走了怎么办?他说,虽然他那里的技术人员都有“备份”,但是这些“预备役”人员大部分年龄偏大,现在都是在做管理事务。
3. 心态对抗解析
为了说明这种心态对抗是如何产生的,前面我们对每一种角色在项目开发中所产生的心态进行了适量的描述,下面我们看一下这些心态的分析和对抗解析。
3.1. 项目管理者与程序员
项目管理者经常遇到的问题如下:
1、 项目周期紧,必须尽快完成,如何促使程序员能够积极高效地完成开发任务。
2、 工资低,程序员积极性较差,不配合。
3、 自己有一定的技术经验,但是对目前的技术不想插手表现,一个是担心自己的工作完成不了,另一个是感觉没有必要自己再写代码或者认为不想表现自己的技术水平了(前文中有对应例子)。
4、 程序员懒惰,不做事情(前文中有对应例子)。
5、 程序员经常丢三落四,不按照要求进行开发(前文中有对应例子)。
……
概括起来主要有下面几个问题:
1、 程序员待遇低(上面的2)。
2、 对任务的分析与程序员之间有分歧(上面的3)。
3、 程序员不配合自己或者积极性较差(上面的2、3、4、5)。
项目管理者由于职责要求,必须保证项目按期保质保量的完成。而在实际情况下,几乎90%以上的项目都会延期(参看《死亡之旅》),其原因不仅限于上面几种,但本节主要是分析项目管理者与程序员之间的关系,所以外部关系和原因暂不考虑。
对于第一个问题,这是涉及到公司整体管理的一个问题。当然,众所周知的是国内程序员工资收入水平是相对较低的,这个问题的解决往往是项目管理者没有权力做到的。对于项目管理者而言,你可以做到的是根据团队中程序员的表现向高层管理者反映相关情况,并获得高层管理者的理解,至少在项目周期内可以得到一定数量比例的月度奖金分配权利。这一点是很多公司在项目进行中都会采取的手段,既是老板很自私,他也会考虑到项目的进展和结项问题而在这方面做出适当的让步并给予项目经理相应的权力。而对于国内绝大多数的中小公司,只要项目管理者真得为团队内的程序员进行了争取,所有的程序员都会看到并会感激你,至少在你可控的项目进程中程序员会相对主动地配合你的工作,而不是完全地不配合或者完全的消极怠工。
对于程序员而言,由于公司不是很大,基本上真实发生的事情大家都会听到并有所耳闻,他们如果看到项目管理者是这样在为自己争取、保证利益,任何不仅仅是程序员都会因此对你有一种报恩的态度,而主动地完成一些自己份额内的事情。
对于第二个问题,这种分歧有可能会扩大化,也有可能消弥于无形,关键看项目管理者如何协调如何控制。要知道程序员尤其是优秀的程序员往往都会比较固执,他们会比较坚持自己看到的或者认同的观点,而不容易改变自己的认识去随意地附和他人的观点。项目管理者应该考虑到这一点,然后进行适当的让步,让氛围轻松下来,甚至可以考虑让程序员在一定的范围内进行自己所认同的实践。这样既体现了对程序员本人意见的尊重,同时也表现出了项目管理者的大度。而且,如果这个程序员的看法是正确的,项目管理者的认识因为自己没有进行实际开发工作而有一些偏差的时候,也就可以在一定程度上避免项目走入歧途。相反,如果项目管理者坚持己见(因为不少项目管理者本人也是或者也曾是相对优秀的程序员),那么这种对抗就会因为无法认证而持续下去,既浪费了时间(讨论的时间大大延长),也耽误了正常的项目进度。
对于第三个问题,程序员的不配合或者积极性差的时候,项目管理者更需要详细地了解程序员本人或者包括他最近的行为以及家庭的情况,看看问题的关节点是在公司内部还是在公司外部。如果问题的关节点在公司外部,那不妨作为项目管理者或者程序员的领导,请这个程序员出去吃顿便饭、聊聊天,进行一下贴心的分析,让他感受到你对他的关心。而如果这个问题在公司内部,即使是看上去有些不合理的要求,也可以将问题进行记录并向高层管理者反馈并争取能够做到解决或者局部的解决。相反,即使你反应了,虽然没有解决,程序员看到你的确在真心实意地帮助他解决问题,帮他考虑事情,他对你的感激也不会少于问题全部解决。至少在你的项目周期内,他不会轻易地考虑辞职或者不负责任的工作。
对于项目管理者而言,无论你曾经或者现在的技术水平多么高,只要你现在的位置不是在做这个模块的开发,那你就需要考虑一下协调工作和分析心态的事情。程序员不会主动来分析你的心态替你考虑,但是他会想你这个领导是不是真的在帮他考虑。如果是,他一定会感激你并配合你;如果不是,他也会反抗你。另外有一句话就是:站着说话不腰疼!这句话是说,不做事情的人都是站着说话的,干活的人都是弯着腰的。当然你如果不弯腰,你是不知道腰疼的,你的计划和考虑会和已经干了很长时间并感到疲乏的人有所差异!这时候,项目管理者的做法就会体现出他本人的管理水平!
这里基本上结束了项目管理者与程序员的心态对抗解析,关于反面的教材大家可以从实际生活和工作中看到很多,这里就不进行无谓的罗列了!
3.2. 项目管理者与周边角色
说完了项目管理者与程序员的关系,下面就需要说一下项目管理者如何与周边角色进行协调和管理工作了。
首先我们来分析项目管理者和公司高层管理人员间的心态解析。
项目管理者获得了程序员的要求以后,必须向高层管理人员反映,并期望获得高层管理人员的认同,以便于获得相应的技术和资源的支持,这样才能真正有效地解决程序员的问题,尽快解决软件项目开发中遇到的问题。
对于高层管理人员来说,节约开支,留住需要的技术人员,尽快完成项目,保证合同资金能够及时收回,这都是很重要的事情。而节约开支与留住需要的技术人员之间是有冲突的,但是如果留不住需要的技术人员,那么项目就不可能尽快完成,而合同资金也就无法及时收回。
而高层管理人员一般不直接接触技术人员,所以,他不是很清楚哪些技术人员必须留下。因此,项目管理者应该向高层管理人员阐述清楚自己为什么要这样做,为什么需要这些额外的奖金要求或者为什么需要给这些技术人员提高工资。
如果项目管理者阐述不清楚这方面的理由,高层管理人员一定会拒绝项目管理者的要求,并且对项目管理者后续的要求也会产生怀疑,势必造成程序员心态的不稳定性,同时给正在进行的项目带来内部的风险。
从这里我们可以看到,项目经理应该是一个具有很强逻辑思维和推理能力,同时具有可以清晰地把自己的观点表述清楚的口头表达能力的人员(关于技术能力不适这一节需要描述的内容,因此不在这里说明)。很强的逻辑思维和推理能力,这一点是几乎所有优秀的程序员都具有的基本素质之一。但是,绝大多数技术人员因为很少与外界接触,尤其是优秀的技术人员因为长时间面对机器而不是面对人,所以,口头表达能力都不是很强,甚至很多人的口头表达能力非常差。可以说,让一个优秀的技术人员写一段异常高难的代码,比让他去说服一个小学生都容易,甚至很多程序员根本就不愿意开口和别人说话。所以,中国传统的学而优则仕的观点在软件项目管理者的选拔中是需要特别小心的。IBM的非技术项目经理的定义,是我比较推崇的一种项目管理模式,这属于我定义中的弱势项目经理的角色,主要是承担协调任务,而不是强调管理。因为在中国,所有的人都喜欢这个“管”字,因为管下面是“官”字。如果一个公司的高层管理者能够选拔出能言善辩的优秀技术人员那是最好,这就是笔者项目管理定义中的强势项目经理。如果做不到这一点,那么,不妨把你们的项目管理角色分开,一个专门做项目协调工作的项目经理,另外是一个负责技术和实现把握的技术经理。这样,既能避免程序员本身的弱点,同时也能发挥程序员本身的优点。这个项目协调人员担任的项目经理可以是一个市场人员,也可以是一个管理人员,甚至可以考虑用能言善辩的美女(程序员大部分都是男性角色)来担任。
说到这里,我们基本上不需要再继续后续的关于高层管理人员的分析了,因为那将超出本文的范围,下面我们来说一下项目管理者与客户之间的心态对抗解析。
前面提到,弱势项目经理的主要任务就是协调工作,除了项目内部和公司内部的协调工作外,还需要在一定的时候协调与客户间的关系,甚至要辅助参与商务谈判的工作内容。
项目经理在安排到客户方进行调研工作的技术人员之前,一定要到客户现场进行前期调查或者称之为“观察”,仔细看看客户方的人员情况和工作环境。比如说客户方大都是年龄较大的人,那么你需要安排一个“懂事”的程序员过去进行需求调研。而如果客户方大都是年轻人,就需要考虑安排会“玩儿”的程序员过去进行需求调研。当然,安排的这些程序员都必须懂得日常礼仪,懂得如何谦虚地和客户讨论问题,同时有相当的技术水平,不拒绝琐碎的工作,而不是过去指手画脚地指责客户的行为或者错误的判断。
举个例子,笔者接触过的工作单位的一个研究员(海归)亲自到深圳某国家机关单位调研并进行设备的初步安装调试,期间,他居然直接指责对方的总工程师如何如何不懂。还曾对那位总工程师说:“你,把那个螺丝刀给我递过来”(说这句话的时候,他身边就站有两个他从北京带到深圳的技术人员)。对方虽然碍于面子按照他的话做了事情,但因为他的这种行为让对方极为反感,在他返回北京后,对方就要求立刻撤掉所有设备,如果不是相关市场人员的工作和高层管理层的介入,这个项目险些就此终止。
3.3. 程序员与周边角色
程序员因为其工作的特殊性和生活环境,他们很少与外界打交道,在公司里面也主要和项目管理者以及相关的技术人员在一起。关于高层管理者如何留下公司需要的程序员的问题因为超出了本文的内容,也就不在这里继续讨论了,可能会在相关的后续篇章中进行分析。
程序员与客户打交道的过程属于需求调研工作的内容,或者说带有部分市场工作性质的工作活动,限于篇幅也就不在本文继续讨论了。
4. 总结
本文从四种角色进行了软件项目开发过程中的心态对抗分析,同时着重对项目管理者和程序员进行了深入的心理分析。一个团队是否可以顺利地完成项目,在不考虑任何公司外部条件变化的基础上,一方面要看团队是否有相应的技术实力,另一方面就是项目管理者如何在项目进行过程中留下技术人员并激发技术人员的工作积极性,否则,这个项目必然延期甚至死亡。
第一业务员网
·
业务员文摘频道