1. 文章列表/

如何搭建一个有效的软件研发组织

·9 分钟阅读时长

1. 引言

在管理学领域,管理者的职责可归纳为四大核心功能:计划、组织、领导和控制。特别是组织职能,它涵盖了确保适当的人力和资源得以配备以实施计划并实现组织目标的过程。这一过程不仅包括设计组织结构、分配资源、明确职责分配和工作流程,还关乎于整个组织高效运作的基础构建。

当前,我们正处在一个行业快速发展、新兴企业如雨后春笋般涌现的时代,这一趋势在软件研发领域尤其突出,比如持续增长的互联网行业、兴起的新能源汽车领域以及崭露头角的人工智能技术等。在这样的背景下,大型企业为了适应行业快速变化,不断调整其组织结构,而众多初创企业和新成立的部门也为管理者提供了更多参与组织结构设计的机会。如今的管理者,包括基层管理者,在组织结构的设计和构建中扮演了更加重要的角色。因此,构建一个有效的软件研发组织结构成为许多技术管理者面临的挑战,并且是他们需要深入思考和关注的重要领域,因为合理的研发团队架构直接反映了管理能力的高低。

本文旨在分享作者关于构建有效软件研发组织结构的见解。所谓有效的研发组织,其"有效性"体现在两个方面:效果和效率。换言之,一个有效的研发组织应能够高效率地产出结果,同时具备以下特点:

  • 组织目标与公司目标一致,能够根据组织所承担的责任,最大限度地激发组织成员的主动性和潜力,以促进目标的实现。
  • 组织结构和分工清晰,通过团队分工,流程制定确保组织内各团队成员明确自己的责任范围,以及知道如何与其他成员协作。
  • 组织高效运营,合理分配资源,建立沟通渠道,跟踪团队运营情况,形成积极正向的运营循环。

通过深入探讨这些要素,本文意图为读者提供关于如何构建和优化软件研发组织结构的实践指导。

2. 确定组织目标

组织是企业的一部分,组织活动是达成企业目标的手段,能够帮助企业完成目标是组织的最重要的使命,因此组织结构设计不能脱离企业的目标,不考虑企业目标的组织结构设计一定是失败的,这种组织结构天然的无法生存。这就对参与组织结构设计的管理者提出了要求,管理者不能忽略企业目标的影响进行闭门造车般的结构设计,恰恰相反,拆解企业目标,制定组织目标是进行组织结构设计的基石,是第一步要做的事情。

确定组织目标其实就是根据企业的愿景和目标,确认组织在企业中承担的职责和负责的关键领域(软件产品)。

  • 软件研发组织通常在企业中承载了软件架构设计、软件模块设计、软件代码实现、软件测试等等全部职责或者部分。
  • 管理者还应当结合组织负责的关键领域,也就是软件产品来制定组织目标,软件研发产品又有直接交付给客户使用的产品,又有供企业内部(其他组织或者本组织)使用的内部产品,注意,这里说的软件产品是一个广义的概念,企业中有相当一部分软件研发组织只负责整个产品中的一部分功能或者开发框架类的软件,我们将这些都归类为是一种软件产品。

3. 设计组织结构

当管理者通过拆解企业目标,实现对组织目标的清晰定义,并确定组织的定位以后,就可以开始着手进行组织结构设计了,在进行组织结构设计的时候,管理者通常需要综合考虑以下几个方面

  • 企业价值观和组织文化,如鼓励高度统一和执行效率,还是鼓励交流和创新
  • 组织所负责的软件产品具体是什么,使用的技术栈是什么,如前后端开发技术、还是嵌入式开发技术等等
  • 组织所需要使用的研发流程是什么,企业是否有定义好的统一流程,还是需要组织来定义自己的研发流程

3.1 组织所倡导的文化

企业和组织文化对组织结构设计产生深远的影响,因为它们决定了组织内部的沟通方式、决策流程、以及员工的行为准则。组织文化和结构之间的相互作用可以决定组织的效率、灵活性、以及对外部变化的适应能力。

从事传统行业、市场变化较慢的企业,如生产制造业相关企业,通常比较注重强调稳定性、标准化和执行效率,在这种文化下,要求组织能提供明确的指令链和控制机制,强调遵守规则和程序,层级结构是一种比较场景的组织结构。

我们所探讨的软件研发占比比较大,甚至是核心竞争力的企业,如前文所说的互联网、新能源汽车企业等,通常比较注重创新性、灵活性,强调团队合作和跨职能协同,在这种文化下,组织鼓励创新、资源共享和开放沟通,越来越多的企业管理层级扁平的无边界组织结构来管理软件研发团队。值得说明的是在无边界组织中还存在着有实线汇报关系的实体职能组织,只不过组织内的成员在开展工作的时候,更多的是以跨职能组织组成的各种虚拟组织来进行工作,有的企业叫工作组、有点企业叫战队,不管名字如何,它们的共同特点是团队内的成员来自多个不同的实体组织。

通常虚拟组织相当于一个小型的自给自足的团队,负责某一具体的功能、某一个子系统、或者某一个子产品的研发作为其主要工作内容,具有高度的自主权。

虚拟组织的自主权体现在可以选择最适合自己团队的工作开展方式,不过我比较推荐采用敏捷开发的形式来开展工作,因为敏捷方法容易提高团队的目标感和凝聚力,特别适合小型的跨职能团队的组织的运作。敏捷方法有诸如Scrum,Kanban等等多种,可以根据该虚拟组织负责的产品和团队成员的喜好来选择,通常来说,Scrum团队更加适合按一定时间节奏持续给用户交付产品的场景,如软件研发进行版本功能的迭代交付,而Kanban相对Scrum更为轻量化,且没有迭代的概念,更加适合持续性日常的事务处理,比如用户支持等等。

3.2 组织所使用的技术栈

很多管理者经常会忽视技术和组织结构之间的关系,认识不到组织结构和软件系统结构之间的互相影响,从而导致设计的组织结构无法很好的支持组织负责的产品,从而导致开发出来的软件质量和性能不能满足要求。

我们先看一个在软件研发领域非常有名的定律叫康威定律(Conway’s Law),它揭示了组织结构对系统设计的影响的原理。这一定律由计算机科学家梅尔文·E·康威(Melvin E. Conway)在1967年提出,康威定律认为,为了实现某个软件系统,设计出来的架构最终会呈现出与开发该系统的组织的沟通结构相类似的模式。这意味着,如果一个组织是由多个互不沟通的小团队组成,那么最终开发出来的软件系统也很可能是由若干个仅在特定接口处能够交互的独立模块组成。简单来说,它表达的思想是:组织沟通方式决定了其设计系统的结构。

如果你有四个小组在开发一个编译器,你将得到一个四遍扫描的编译器。

康威定律揭示了几个关键点

  1. 软件架构与组织架构相似:软件的结构通常会反映创建它的组织的结构。如果组织分割为许多小团队,每个团队负责不同的系统模块,那么最终的系统架构也可能是模块化的。
  2. 沟通障碍导致架构障碍:组织内部沟通的障碍(如团队间的隔阂或缺乏交流)可能导致软件架构中出现相应的隔离区域,这些区域在技术上可能难以集成。
  3. 改变架构可能需要改变组织结构:如果希望改变软件的架构,可能需要首先考虑调整组织的结构或沟通模式,以支持新的架构目标。

康威定律之所以叫定律是因为它是不可违背的,不管你是否承认它的存在,不管你顺应还是反抗,最终定律中的描述均会反应在结果上,所以软件研发组织的管理者在进行组织结构设计的时候必须时刻提醒自己康威定律的作用是不可忽视的,不管你是想通过开发满足特定架构目标的软件产品,还是想重构现有的软件产品,对于前者你需要先选择好需要使用的技术栈和顶层架构,并根据技术栈和顶层架构来设计组织结构,对于后者,你需要认识到如果想要重构现有的软件产品,你需要调整你的组织结构,如果不这么做,你的其他努力可能是徒劳的。

3.3 组织所使用的研发流程

企业所使用的研发流程同样影响着组织结构,因为研发流程反映着上下游关系,以及职能的区别,以典型的瀑布开发流程-V模型来举例,如下图描述的那样,在软件研发活动中通常有以下几个阶段

  • 左侧的下行路径:代表了软件开发的各个阶段(如需求分析、系统设计、详细设计、编码)。
  • 底部的尖点:代表编码阶段,这是开发和测试转换的关键点。
  • 右侧的上行路径:代表了与左侧开发阶段相对应的测试活动(集成测试、系统测试和验收测试)。

很显然,这些阶段的侧重点不同,需要的人员技能也不同,同时输出给下一个阶段的产物也不同,但是他们互为上下游关系。

V Model

组织结构代表的是组织内成员之间的沟通和合作方式,因此在设计组织结构的时候一定要结合自己企业所采用的研发流程,组织的结构一定要能够支持研发流程,否则工作开展将寸步难行。比如说一个比较典型的软件研发组织的架构可以设计为:

  • 软件架构职能团队:主要进行进行需求分析和架构设计,管理需求的优先级
  • 软件开发职能团队:进行软件模块的详细设计、编码、单元测试
  • 软件集成和测试职能团队:利用持续和快速集成技术,对集成好的软件包进行测试验证和发布

3.4 再看组织结构设计

搭建一个有效的研发组织绝非易事,而且没有统一的方法,如果说非要有一个法则的话,那就是 “适合自己的,就是最好的” 然而它也并不是无章可循的,上边我们展开讲解了组织的文化、组织使用的技术栈、组织使用的研发流程在每一个企业和组织都是存在的,它们对组织结构设计的影响也是巨大的,这些都是作为一个管理者必须要综合考虑的。

4. 组织的运营

搭建好组织结构以后,管理者还需要将组织运营起来,组织是由人组成的,因此组织运营本质上就是将人“管“好,那么如何才能让组织有效的运营起来,我们应当从”人力资源“和”沟通协作“两个方面来考虑,

如果把组织比喻成人体的话,组织结构可以比喻为人体的骨骼系统。正如骨骼为身体提供支撑和形状,组织结构为企业提供了基础框架和层级,定义了职能部门、角色和责任,使组织能够有效地运作。人力资源可以比作人体的各个器官,它们各司其职支持日常运作和组织生长。沟通协作可以类比为人体的神经系统。神经系统负责传递信息,指挥和协调身体的各个器官。在组织中,沟通确保信息的流通,而协作则确保团队成员能够有效合作,共同实现目标。就像神经系统连接身体的各个部分一样,良好的沟通和协作连接组织的各个层面,确保信息和资源的有效流动。

  • 人力资源管理的活动包括:

    • 明确角色与职责:了解团队成员每个人的技能,经验和兴趣,将合适的人分配到合适的角色岗位上,并通过清晰高效的沟通,让每个人了解自己所承担的角色的职责
    • 资源规划:明确团队需要多少人力资源,需要怎么样的技能,并根据当前的业务情况指定资源补足计划,在缺少人力的时候制定招聘计划补足人力,团队成员缺乏成功关键路径需要的技能的时候制定团队成员培养计划,提升团队整体战斗力。
    • 资源管理:通过人力资源分配数据表格分析组织中各团队中资源的投入,根据实际运行情况及时调整
  • 沟通协作促进可以通过

    • 建立开放沟通文化:鼓励团队成员开放地表达自己的意见和想法,无论是正面的还是负面的反馈。管理者应该通过身体力行展示如何有效地沟通,包括倾听、尊重不同观点,并提供建设性反馈
    • 建立沟通渠道:通过设定固定的团队沟通会议,组建线下论坛,组织团队培训,团建互动等等鼓励团队成员之间互相交流