[周年感悟]看软件项目中的四种角色
工作一年了,这一年没像大学那样拼命的发帖,拼命的写博客。然而毕竟是过了一年了,便以此文纪念我逝去的2011年吧!
2011年3月份到公司实习,实习到5月,然后回学校做毕业设计,7月份正式入职。若是从实习算起,也应该是满一年了。这一年里经历了四个项目,我都是以开发者身份进行着工作的。
然而,前三个项目中,我一直有种“身在此山中”的模糊感觉。第四个新项目来了,领导给安排了一个Subleader让我做。我也觉得是时候让自己提升一个境界了,然而,项目开始了将近一个月,我这个SubLeader做的并不好,至少我自己是这么认为的,或许是惯性,在项目的启动过程中,我并没有意识到我的职责是什么,还是一头闷进去解析代码,组里刚招的新人让我带,因为是新项目,比较特殊,我也没花多大精力去制定所谓的教育计划。
还记得那是周五的晚上,我拿着羽毛球拍出去打球,Leader还在那加班弄表格模板。当我要走的那一刻,我突然意识到我这Subleader做的不够格,做为Subleader如果工作做的好,Leader怎么会一个人加班呢?为此,特地向大项目经理和课长请教了一下,大项目经理发了封邮件,说的都很实在,贴近现在的工作实况。课长则特地找了个会议室“培训”我,我也因此对软件项目中的几种角色有了一定程度的了解,本文就把我吸收到的在这里分享一下,以此纪念一下我的2011!
对于一个软件项目来说,按照所处层次的不同,可以分为四类角色:Leader、Subleader、中坚、开发人员。下面分别介绍这四种角色。
Leader:
也就是我们所熟知的项目经理,项目经理按照职能的不同,可以分为过程经理、业务经理、技术经理和品质经理。
过程经理 软件项目是智力型工程,项目规模大部分不大,即使很大,也会拆解成小项目,以降低风险。于是在常规的软件项目中,最常见的Leader主要指过程经理,负责控制整个项目的过程。何谓过程呢?比如,对于软件项目A,从1月份开始,7月份结束。那么过程经理的工作就是划分软件工程里面的定义的几个过程,并且能够保证比如:1月份完成FD,2月份完成SD,3月份完成DD。。。。最后必须在7月完成整个项目。然而计划的制定非常困难,如果没有丰富的经验,是无法准确的预测各个工程阶段的周期的。差的过程可能会导致前期悠闲,后期天天加班,或者前期天天加班,后期没事干。总之,过程经理的制定计划的能力关系到软件项目的“战略”。
业务经理 我的经验还不够丰富,我所见的项目,业务经理的影子被过程经理揽下来了。所以,我只能凭着猜测来理解业务经理的职能了。按照我的理解:1. 业务经理最好是有行业内经验的人。比如对于银行交易、证券交易系统软件项目,那么业务经理最好由银行,证券行业的从业人员来担任,或者从事过类似开发的人担任。2. 业务经理除了对行业有很熟悉的了解之外,还要会对业务进行建模,一个好的模型会使得开发人员对业务的理解更加透彻,开发出现的问题就越少。3. 业务经理有预知业务变更的能力,某种意义上来讲,业务经理可以在最大程度上解决“需求变更”这一难题,不过这需要业务经理对业务十分熟悉。总之,业务经理的需求分析及建模能力关系到软件项目的“部署”。
技术经理 小规模的软件项目来说,技术经理做的工作与普通开发人员做的工作很类似,技术经理平时也会跟着一起构建开发环境、解析源码等。但是,技术经理并不只是这样,技术经理是能够在无形或有形中推动加快整个项目技术进度的人。技术经理一般走在开发人员的前头,可以为开发人员提供技术援助。当项目进入常规开发时,往往没有了所谓的技术难题,简单的复制改模式下,技术经理一般会开始优化开发,比如编译优化、性能优化、框架优化等。总之,技术经理的技术实力关系到软件项目的“军事力量”。
品质经理 我觉得,严格来讲,品质经理不是我们常说的测试组的经理,毕竟品质贯穿着整个软件项目开发,而测试只能从结果来反映产品质量。所以,我认为,品质经理应该是从软件项目开始就死盯着项目开发的那个角色,无论是设计质量、代码质量、文档质量、业务质量,都需要品质经理的严格把控。然而,那样毕竟会造成很大的麻烦,所以,一般来说,目前的软件项目的品质经理都由测试组的经理充当。不过,我所在的第三个项目组,不是像这样有专门的品质经理控制项目品质的,其管理控制产品品质的手段让我也觉得奇怪,是依照瀑布模型,从SD到各种测试都是有开发担当完成的,当然,还有一些测试不是由开发人员完成的。总之,品质经理犀利的监控技术及测试技术关系到软件项目的“成败”。
Subleader:
或许我应该对Subleader做一篇更长的介绍文章,毕竟我目前是作为Subleader的角色存在,但同时我也是身在其中,所谓“当局者迷,旁观者清”,我的理解可能会有些偏差,看客莫要见笑。我所理解的Subleader主要有以下四点职能:
1. 更加合理分配任务。这里要跟leader做一下对比,leader要对整个项目组的所有人员进行管理,然而当人数比较多的时候,leader是无法一一为每个开发人员分配任务的,所以可能导致某些人工作任务重,有些人反而很轻。这时候就需要一个对某几个开发人员比较熟悉的人来分配任务,这样每次汇报任务的时候,Leader只需要找Subleader就可以获悉所有开发人员的工作状况,而不需要去找每个开发人员去确认工作内容及进度。
2. 临时Leader,平稳过渡。当Leader不在项目组的时候,Subleader就应该接手Leader的工作,并且能很顺利的接手。这就需要Subleader平时对项目进度及状况有所关注,对项目整体有一个全局的把握。Subleader应该每天对项目中的任务安排有一个私人的记录本,对项目开发过程中遇到的课题也要进行一份个人的整理,并时刻关注这每个课题的解决进度及解决方法。
3. 查漏补缺,趋近完美。“金无足赤,人无完人”,无论是做计划、任务分配,还是课题跟踪。Leader总会有所遗漏或者理解不够充分的。所以这时,Subleader最好能想到Leader遗漏的地方,并向leader提出,共同商讨解决方案。这需要Subleader有一双犀利的眼睛,同时也考验Subleader的沟通技巧。人都是爱面子的,这是人性,不是谁的错,当你找到Leader的错误的时候,如果没有好的沟通技巧,那么提出的问题或许只能当作一场没有结果的架给吵过去了。
4. Next Me。为了项目组着想,对于Subleader,要开始注意培养Next Me。这样,即使你离开项目组,项目组也不会有太大的风险。对于普通开发人员的离去,项目的风险很小,但是对于中坚力量,一旦离去,项目的风险将会很高。同时,也要记得,Next Me会成为你的得力助手,左膀右臂。
总之,Subleader的工作可以概括为九个字:带新人,看进度,提建议。
中坚:
中坚力量是软件开发的核心力量,一般具有一定的技术能力。他们有经验,有实力,能够承担模块的开发。一般来说,是具有1年工作经验的员工。在工作层次上,中坚与Subleader的界限是很模糊的,我所总结的,作为中坚人员应该有以下三个职能。
1. 带新人。这点毋庸置疑,要学会带人,把自己学到的教出去。同时在这个过程中,要学会做计划。“因材施教”是很难做到的,而对新人教育计划的制定能够在很大程度上锻炼的规划能力以及识人用人能力。
2. 技术攻坚。对于中坚来说,普通的开发任务已经不能满足需求,中坚应该对系统框架发起挑战,对系统改善发起进攻。当然,这些都是基础,为后来的发展积累经验。
3. 及时反馈。中坚对模块的开发规模已经有了一定的把控能力,这时候,如果发现分配的时间不合理,或者分配的人员不合理,应该及时向Leader提出。
开发人员:
普通开发人员,用我的领导的话就是“被动人”,是完全依照计划做工作的角色,当然原因是多样的,对于新人,不知该如何工作,只能按照上面的计划进行工作。当然也有一群人意识不行,不知道给自己找事干,于是一直处于被动状态。处于这个状态时一定要努力让自己尽快摆脱这个状态,不要以完成任务为目标,这样才能朝着更高更远的方向发展。