软件项目组织架构安排

        这个主题涉及到三个方面,项目计划管理、组织管理和技术管理范畴。

        项目计划管理是项目管理中的一个大篇章,包括时间计划、成本计划、费用计划等在内的各类计划管理,不是本文章所谈的范围,只是本文主题涉及到了其中一点点内容重合,那就是时间和WBS的制定。

          从软件企业整体的组织架构来说,不外乎包括项目型、职能型、矩阵型几类。当然其中有偏项目型的组织结构,偏职能型组织结构。其实这也是各行业企业组织结构的基本情况,只是这几类还可以继续细分,如职能型可以按技术专业内容分,也可以按业务领域分,这是属于软件企业组织管理的范畴,细歌的文章《软件企业组织》有介绍相关内容。之所以说技术管理和项目管理即有所属关系又有交叉关系  是因为项目经理可以归属于技术总监职责之下,也可以归属于职能部门经理职责之下,更贴切点应归属于项目总监职责之下。但项目总监在很多公司没有单独设立的,当然项目总监这个角色 对于项目型企业和偏项目型企业是非常有必要的。

        项目管理整体来说是技术管理是一个分枝,但又不完全包括在技术管理范围,应该说大部分是所属关系,少部分交叉关系,这里视情况而定。从项目完整周期来看,只有某阶段是技术管理范围,而从软件项目研发管理来看,就是完整的技术管理范围。
 

软件项目组织架构安排

管理关系图

        项目组织管理包括项目人员计划 OBS 、团队组建、团队建设等内容。人员计划和OBS是本文的主题核心内容。而团队组建与团队建设是对人员计划与OBS的执行。在细歌后面的文章会一一聊到。

        项目人员与组织计划
         项目立项之初,编写项目章程时就是开始编写项目组织计划。对于软件和信息系统项目来说,人员和团队是项目成功的决定因素。项目目计划的产出与成果是OBS、RAM 。一般中小项目而言则可以简单的制定人员配备职责表

  •         干系人和各方利害关系

          项目干系人或叫作项目利益关系人,是包括项目当事人及其利益关系受项目影响的个人和组织。项目干系人管理也是项目组织管理内容,具体在细歌的文章《项目干系人与项目团队管理》中重点介绍。 项目团队也可以称为项目实施团队,是项目干系人的一部分。我们项目建设和开发目标就是以最少的成本代价最大化的满足系统用户的需求,为企业和团队创造最大化的价值。项目干系人包括外部干系人和内部干系人以及第三方的相关人员,同样,项目实施成员可以是乙方独立团队,也可以是甲乙双方联合团队,有时也可以是多方联合团队。如某些上规模的项目,业主方、甲方、乙方、还有承包单位各派代表来建设实施,指定某一方为主导即可。所以干系人的需求与期望,团队实施成本,专业水平,成员特点都是要考虑的。如果是乙方独立团队,那么已有的成员技能要求,和人员特点及公司内部的人员情况要考虑。

  •         项目规模与项目自身的特点

        简单点说就是项目越大,团队越大,分工越细,所需人员越多。比如某能源信息化项目,由甲乙双方共同成立项目组,项目成员达20多人,双方各派项目经理,由甲方项目经主导业务,乙方项目经理负责技术实现,同时甲方还要向乙方委派一名领域专家配置业务分析。然后就是不同技术范围的项目有不同的技术岗位,比如项目需求中明确有做Ios应用的内容,那么需要Ios开发人员,如开发技术规定采用Openstack框架,数据库采用分布式DB Redis进行开发实施,那么要配备熟悉大数据开发人员。不管如何,在软件项目管理里很少有说每个技术内容都配备一个专职负责的,项目基本都是一人多岗一岗多能,所以我们都看到程序员们整天加班中…,特别是在小公司,其中都是全能全要做,这近网络上炒的沸沸扬扬的996.ICU来源也是在这里,都上人民日报了,见这里。同时很多项目团队成员都是跨项目的。一般从规模上讲,超过10人实施团队的项目都可以叫得上大规模的项目了。曾参与过60多人团队的项目。还有一点就是内部自营项目和外部承接项目的项目组织也是不一样的。

  • 项目章程、项目计划与项目管理方式。

        有些项目是在项目章程中已指定需要多少人的团队,大概怎么样水平的关键岗位,这时就要按要求组建相关团队。而项目计划中则要考虑组织计划, 成本预算、人力资源计划等。比如公司财务预算指标和公司上面已规定团队人员数指标不能超过多少人。还有在立项报告和项目计划中的工时人天数要求等,这些都是项目团队组织计划的输入因素。

        项目的管理方式包括RUP方式、原型法、XP法、敏捷管理方式等。开发à测试à运维  和现时流行DevOps方式等。而选择什么样的方式就决定什么样的团队组织框架。

  • WBS

        项目计划中最为重要的一项工作就是制定WBS,这是由项目经理完成的,也可以是项目经理和需求分析师或架构师共同完成(关于系统分析师和框架师的关系区别见细歌文章《软件系统分析师与架构师技能大PK(您具备了哪些呢?) 》)。而WBS制定后就表示项目有哪些事情要做,下一步就是由谁来做的问题。解决完之后,OBS也就编写完成了。

  • 现有公司组织管理框架和技术管理框架。

      项目管理是公司管理的一个子集,项目组织所需人员需要按公司整体的经营生产规划进行。如对人员成本的控制,团队规模的控制 ,对项目范围的控制等。项目组织计划制定是要考虑这些约束指标,不能超出这些指标。同时技术管理决定的了项目采用的技术路线,就决定着团队组建所需的技术人员要求。

  •   OBS&RAM

       项目组织计划的输出就是OBS和RAM。 OBS是组织结构分解,RAM是职责分配矩阵。来点俗话就是:这个项目要多少人,要什么样的人,哪些人分别做哪些事。OBS宜采用岗位说明,不应固定到人名。

软件项目组织架构安排

典型的项目开发实施组织结构

        软件项目组的岗位组成包括:项目经理、业务(需求分析员)、架构师、领域专家、开发人员、测试人员、工程人员、监理、配置管理员、QC&QA、美工、UI 等。其中开发人员是最主要的组成部分,根据技术路线和要求定岗,可以分前端开发、后端开发、数据开发、大数据开发、算法工程师、通讯开发、三维开发等,又或按语言和框架或开发平台来分。每个岗位的职责这里不做介绍,是一个值得交流的话题,欢迎加Q群746333240 讨论交流。


        项目组人数非常灵活:少时1人即可,1个人搞定一个项目的也不少见,多时可以到上百人。开发和测试是软件项目组的主体和核心组成,是不可以缺少的。根据项目团队人数规模可以分为如下几种。

        微型
        1到4人 ,重点突出开发、测试工作内容。适时寻找美工出部分效果。
        小型
        4到10人:项目经理一人,兼需求分析工作;前端开发1至2人,后端开发1-4人;测试1-2人;美工兼职。
        中型
        10至50人:包括项目经理、业务专员、领域专家、开发人员、测试人员、美工、QC、运营人员。也可以外接平台或技术小组。
        大型
        50人以上规模的团队是大型的项目团队了,当一个项目涉及到多单位联合参与,分工协作时,当预算到一定程度时,比如微软当年的视窗操作系统,比如近轻国家部级单位推动一个平台项目型项目,包括总体单位,总包,一、二级分包单位,项目规模都达上千人参与。  这类型的项目,基本每个角色都有一至多人担任。


        考虑一人多岗一岗多能情况,项目经理可兼任业务分析领域专家,需求人员可以兼测试人员,测试人员可以兼QC,美工可以兼测试,架构可兼核心开发人员。 但测试与开发不能同时兼任,QC与开发不能同时兼任。关于人员配置多少和可兼顾职责是一个值得讨论的话提,欢迎加入QQ群746333240 讨论交流。

         简单点说就是项目越大,团队越大,分工越细,所需人员越多。比如某能源信息化项目,由甲乙双方共同成立项目组,项目成员达20多人,双方各派项目经理,由甲方项目经理主导业务,乙方项目经理负责技术实现,同时甲方还要向乙方委派一名领域专家指导业务分析。然后就是不同技术范围的项目有不同的技术岗位,比如项目需求中明确有做Ios应用的内容,那么需要Ios开发人员,如开发技术规定采用Openstack框架,数据库采用分布式DB Redis进行开发实施,那么要配备熟悉大数据开发人员。不管如何,在软件项目管理里很少有说每个技术内容都配备一个专职负责的,项目基本都是一人多岗一岗多能,评时网络上谈论比较多的的程序员们整天加班中…,过劳问题等,特别是在小公司,其中都是全能全要做,这近网络上炒的沸沸扬扬的996.ICU来源也是在这里,都上人民日报了,见这里 。同时很多项目团队成员都是跨项目的。一般从规模上讲,超过10人实施团队的项目都可以叫得上大中规模的项目了。曾参与过60多人团队的项目。还有一点就是内部自营项目和外部承接项目的项目组织也是不一样的。

 

        还有重要的一点就是项目人员配备在项目不同阶段是不同的,从商务-->前期-->方案-->分析设计-->开发-->测试-->交付-->运维。整个过程每个阶段有每阶段的人员投入。当前比较流程的敏捷管理方式,测试在一就要入,不需要完整的文档,设计与开发同步进行,快速迭代等方法,任务看版,随时沟通。所以在分析设计时不需要投入多少设计力量。

        OBS、WBS确定后,制定RAM,RAM在项目实践中用得比较少,本人从事项目管理工作过程中倾向于直接采用项目人员与岗位配置表。
        当然以上整个项目组织计划和架构的发布都是理论上的。而实际项目过程中本人的原则是能口头沟通解决的不多一行文字,能打字解决的不多一行Coding。特别是在小公司,基本没有正式的计划和组织构架,机动性很高,重点是沟通协调。 而本人更倾向少小团队协作。