新的一年了,又到了做规划和 OKR 的时候了。
作为一个技术团队的管理者,此时除了面对业务的诉求,从技术架构、从团队管理、从未来发展应该做些什么呢?
以下是最近一段时间来,个人的思考。
从经营的角度来看,研发团队成本对于软件企业来说是成本的大头,作为团队的负责人需要在满足业务需求的前提下,提高研发团队的产出和产出的价值,同时尽量降低过程中的成本,也就是在之前文章中所说的研发价值。
这里的研发价值可以具象到研发效能这个概念,在我们做技术规划和 OKR 时,底层思考中的研发效能不仅仅是衡量研发资源使用的效果,更进一步,是指研发团队达成既定目标和结果的能力,换句话说,就是提升当前研发团队的核心竞争力。
研发效能不仅包括了技术层面的各种实践,如代码复用、自动化测试、持续集成(CI)和持续交付(CD),还包括了效能度量、流程优化,团队协作、项目管理、需求理解和用户反馈的及时整合等多个方面。
研发效能的核心目的是优化交付的价值链,通过提高效能来缩短产品从构思到市场的时间,提升产品质量,降低开发成本,以及增强对市场变化的响应能力。这不仅能提高客户满意度和用户体验,还能为企业带来更大的经济效益和更强的市场竞争力。
每个企业,每个团队在做规划时,应该是基于现况,基于客观事实来做规划,明确当下最重要,最需要解决的问题是什么,确认目标,一个个去解决。比如当前大家意识层面有所欠缺,那就想办法拉齐认知「共读一本书」;又或者当前研发流程混乱或者效率不高,那就梳理研发流程,把研发的过程一个个掰碎了,揉散了看哪里有问题,该去掉去掉,该优化优化;又或者当前无法看到效能情况,没有体系化的指标和系统支撑,那就去构建,去实践……
各家不同,各有章法,这里我们从研发效能的定义出发,扩展出其要解决的问题,再到具体包含的内容来思考整个过程,不会大而全,也不会特别深入,只是一个思路。
在《软件研发效能权威指南》中对于研发效能的定义是指更高效、更高质量,更可靠、可持续的交付更优的业务价值。
将其拆解开来,可以分为三个方面:一是高效和交付更优化的业务价值,关注的是价值交付,二是可持续,关注的是能力构建,三是高质量和可靠,关注的是成本控制。延展开来可以分为效能认知、组织结构、效能度量、研发流程、工程体系、架构能力、技术能力、质量管理和稳定性管理九大模块。整体如下图:
关键词:老板工程、规模化
研发效能是一个从上往下的老板工程,就算是一线的员工想要做并且努力做了,达到的效果也有限。
其一定是实现了规模化后才有着明显的效果,从度量的效果上看,在规模化之后才能更好的发现和解决问题,个体差异在这里会被规模化效应所取代。
研发效能要解决的是三个方面的问题:价值交付、能力构建、成本控制。
以上只是概念性的简要的内容,基本上就是开头那张图了,可以把这些逻辑在团队内达成一致,知道全局是怎样的,现在正在哪里。
再深化一些,可以就每个模块做一个指向性的成熟度模型,明确当前在哪里,以及将来要去哪里。强调一点,就算我们做了成熟度模型,我们也并不是追求成熟度模型指标上的成长,这只是一个过程,我们更看重的是研发效能的提升和价值的交付。
关键词:信息流动、决策、协同
组织结构决定了信息流动、资源分配和决策过程的效率。组织结构是研发效能的基座和架子,一个合适的组织架构可以更好的提升研发的效能。
以研发效能平台落地为例,如果提出需求的人在一个部门,实现需求的人在一个部门,两个部门的目标可能就会有一些不一致的地方,沟通上跨部门沟通的成本也会比较高一些,那这个项目的研发效率就会比较低。
在一个组织内,信息流动的顺畅程度直接影响到研发的响应速度和能力。理想的组织结构应该是信息高度透明和流动性强的结构,这样可以最大限度地减少知识的壁垒和信息的延迟。创建开放的沟通渠道和建立跨部门的协作团队是关键,这样能够确保从需求提出到需求实现各个环节都能迅速连接,实现信息的快速传递。
决策的速度和质量在很大程度上取决于组织结构。在一个层级过多的组织中,决策往往需要经过漫长的审批流程。扁平化管理模式有助于缩短决策链条,提高决策效率。在扁平化的组织结构中,决策权下放到更接近实际工作的团队和个人,这样不仅可以加速决策过程,还能提高决策的准确性,因为决策者能够直接获取到一手资料和反馈。任正非有提过:让听得见炮声的人做决策,这个论点在研发效能的提升上也同样有效。
关键词:可视化、全局思维、机制
说到研发效能,大家都会想到搞一套指标,搞一堆系统,然后各种报告,觉得没有啥用。如果只搞这些,确实没啥用,甚至有些本末倒置。
度量是为了什么?是为了可以看见,是为了消除系统性瓶颈。
因为除度量外的操作都已经融入实际的研发管理工作,或多或少,而度量是一个将这些研发管理工作的成效可视化的过程,让人们更直接的感受到优化后的效果。
效能度量只是研发效能中的一小部分,只是辅助效能提升的一种基础性的模块,我们过去对于其投入较少,缺少体系化的度量,当下要补足这个模块。并且这个模块是我们研发效能提升的眼睛,通过度量实现效能的可视化和研发效能提升过程中的反馈机制。它提供了衡量成果和改进的依据,帮助团队识别问题、跟踪进度,并调整优化策略。
在效能度量过程中,我们会以一种相对科学的方式收集和清洗数据,建立一套和当前团队贴合的指标体系,涵盖项目进度、产品质量、团队效率等各个方面,建立机制定期审视这些指标,并根据数据进行决策和改进。
度量的过程,从传统的大量质量指标,到体系化的效能指标,再到结构化的效能报告,有逻辑,更直观。
在这个过程中,看见系统性的指标只是第一步,根据指标来进行决策和改进才是度量的关键逻辑。也就是说度量只是我们研发效能的开始,是结果的一种呈现,我们所追求不仅仅是这个结果,而是这个结果带来的效能提升和研发团队的价值提升。
在度量时始终需要有全局性思维,不要为了指标而指标,将其变为一个数字游戏,也不要陷入到局部的细节指标中而忽略了为什么要做度量。
注意,度量是有成本的,在实施的时候,不要追求度量的大而全,不要一开始就搞一个完整的度量体系,这是一个长期的渐进式的工作,从业务、产品、开发、QA 各方都需要介入的过程,并且最终需要落地到系统上来。
关键词:有序、标准、端到端的流程
研发流程是为了确保研发活动有序进行的关键。良好的流程设计能够最大程度地减少不必要的工作,清晰地定义每个阶段的输入和输出,以及相应的质量标准。
如果把软件开发比作一个生产产品的流水线,那么研发流程就类似于产品的生产工艺——它是定义产品从原料到成品的所有转换步骤的详细规划。
工艺的好坏决定了产品的好坏。
在整个软件开发的「生产工艺」中,每一步都不是孤立的,而是与前后过程紧密相连,通过反馈和持续改进来提升最终产品质量。敏捷方法论和持续交付的实践强调了在整个研发流程中不断地评估和调整工艺步骤,以适应变化的需求和市场条件。
从技术团队规划的角度,还是要拆解整个研发流程,或者说拆解整个工艺,引入敏捷开发方法和精益思想,持续迭代流程,以消除浪费,并通过自动化工具或系统减轻重复性工作负担。
我们知道研发的好坏,以及研发的价值往往是由源头决定的,产品需求,甚至业务需求。因此,在我们做研发流程优化的时候,尽量把业务方、产品侧都纳入进来,做到从业务中来,到业务中去,实现端到端的控制和优化。
关键词:复杂度、关系和结构
架构能力关注的是软件架构中的关系和结构,关注的是整个架构的复杂度。而不仅仅是搞个啥架构。
在软件企业发展过程中,架构会随着业务的不断发展而呈现劣化、复杂化等趋势。
我们在架构复杂度提升,规模不断增加、人员不断变化的前提下如何通过对架构的优化实现效能的提升是这里要做的命题。
架构能力的提升包括三个方面:架构规划、架构审查和架构治理。
架构规划是架构能力的首要环节,其必须综合考虑系统的功能需求、性能目标、安全性要求、可维护性及扩展性等多个维度。这种规划类似于建筑领域的城市规划,不仅要考虑当前的建设需求,还要预见未来的扩张和变革。在软件架构的世界里,这意味着设计时要有前瞻性,能够在不牺牲现有系统稳定性的基础上,适应快速变化的业务需求和技术革新。
一个有效的方法是采用模块化设计,即将系统分解为多个相对独立、功能明确的模块。这样不仅有助于降低整体复杂度,还能够使团队能够并行工作,提高开发效率。但是,需要明确一点是不要过度,模块化的结构需要和当前业务状态、团队规模匹配,防止无意义的扩大,从而增加整个系统的复杂度。
架构审查有点类似于医生的定期体检,它可以帮助团队识别潜在的问题,并在问题成为危机之前进行干预。这个过程中,我们可以利用各种架构评估方法,如 ATAM 评估方法(架构贸易分析方法)、CMAM 评估方法(组件建模评估方法或架构评估框架,以确保架构符合业务的目标和制约。
架构审查也可以根据自身企业的情况,构建自身的标准,如类似于成熟度模型之类的来评估当前的架构状态。
在评估审查中,应收集关键利益相关者的反馈,并结合各项指标和用户数据来做出决策。
接下来就是架构治理,架构治理可能涉及到技术栈的变更、新技术的采纳、旧系统的淘汰等。这些调整应该是渐进的,并且与业务战略紧密对齐,确保每一步都朝着增强软件可交付性和业务价值的方向迈进。
这里特别要强调一下关于架构评估过程中对于技术债务的偿还,在快速发展的企业中,这种债务特别明显,因为随着业务的发展,技术债务往往逐渐累积,这对架构的可持续性构成了威胁。技术债务可能源自早期的决策,当时的快速实现为了满足眼前的需求而牺牲了长期的可维护性。
处理技术债务并不总是意味着需要进行大规模的重构,有时候持续的小步改进更为有效。通过持续集成和持续部署(CI/CD)的实践,可以在日常的开发流程中逐步减轻债务负担。此外,编码标准和代码审查可以预防新的技术债务的产生,这对于保持架构整洁和可管理至关重要。
关键词:复用、标准、前瞻性
技术能力和架构能力相比更关注技术能力本身的上限或边界,是指用技术来提升产品竞争力的能力,如跨端复用能力、技术框架、业务框架、业务组件或能力,其本质是通过构建能力的复用实现能力的提升。
技术能力构建的关键逻辑在于复用性与标准化、以及技术的前瞻性。
复用性意味着开发者可以在多个项目中使用同样的代码或组件,而无需重新发明轮子。通过创建通用的库、框架或服务,组织可以减少冗余劳动,加快开发流程,并降低出错的概率。
而标准化则为这种复用打下基础。它确保了不同团队开发的组件能够无缝集成,无论是内部接口,还是面向外部的 API。标准化还涉及到编码规范、文档标准以及工具链的一致性,这些都是确保技术团队能够高效协作的要素。为了实现这些标准,组织往往需要建立起一套严格的质量保证流程,包括代码审查、自动化测试和持续集成。
复用性和标准化看到的是当下,通过现有业务和技术能力,提升复用率。而技术前瞻性则是面向未来,通过对技术发展的趋势预测,提前布局。
技术前瞻性的构建需要团队的管理者刻意去构建,常用策略包括允许工程师在工作时间探索新技术;建立内部分享会,鼓励知识的交流;甚至与外部研究机构或高校合作,共同进行技术研究项目等等。
同时,奖励那些能够带来创新思路和解决方案的个人和团队。这种机制可以是奖金,也可以是职业发展上的机会。同时,组织应该提供必要的资源支持,如投资先进的工具和技术、提供专业培训等,以确保团队成员能够不断提升自己的技术能力,并把这些能力转化为企业的持续竞争优势。
关键词:永远的质量、全员参与
质量管理包括过程质量和结果质量(线上质量),最终目的都是结果质量。
质量管理的目的是想通过质量控制减少因为质量问题带来的成本,如果一个产品问题到了用户反馈的程度,那将会卷入技术支持,QA、研发等同学,甚至会有客户成功的同学,将会有一个长长的流程把这些同学串起来以解决问题。如果这个产品问题在最前置开发的时候或者产品需求的时候,将会大大减少成本,提升整个的效率。
其中,过程质量关注的是从产品设计到最终交付整个生产流程的各个环节。控制过程质量的目的是为了确保每一步骤都按照既定标准执行,从而预防质量问题的发生。在软件开发中,这可能会涉及代码审查、持续集成、自动化测试等实践。这些实践能够及早发现问题,防止它们在开发周期后期扩大。
为了提升过程质量,我们都会建立一套完善的质量管理体系,这包括制定明确的质量目标、过程标准以及评估机制。例如,采用敏捷开发模式可以通过短周期迭代确保产品的持续改进和质量控制。通过将开发过程分解为更小的部分,团队可以更快地识别并解决问题,从而降低风险和成本。
结果质量或线上质量主要指产品发到线上环境,直接服务于用户时的表现。这是质量管理最终的评判标准,直接关系到用户体验和产品的市场表现。因此,结果质量的衡量不仅仅是产品交付后的一个阶段,而是一个持续的过程。这要求我们在产品发布后继续监控其性能,收集用户反馈,并根据这些数据不断优化产品。
为了确保结果质量,我们需要采取多种方法来监测产品性能,比如使用应用性能管理(APM)工具监控软件运行状况,或者设置用户反馈渠道收集用户意见。同时,定期进行用户满意度调查也是评估和保障结果质量的有效手段。
质量永远是技术规划或 OKR 的一部分,持续的去优化去实践。
并且质量管理并不只是 QA 部门的责任,而是需要全公司上下共同努力的结果。这要求每个员工都要有质量意识,从每个人的日常工作中都要考虑质量管理。
特别是管理者,是质量管理的关键,管理者需要持续的参与和支持质量管理,通过资源投入,策略制定甚至亲自参与到质量活动中来,以展现我们对质量的承诺。
关键词:多维度、高可用、控制
稳定性管理是成本控制的另一个关键点,每一次稳定性的问题都会对用户产生影响,甚至可能对公司的品牌和财务状况造成长期的负面影响。
关于稳定性管理我们可以从多个维度来解构它的实施路径,一般会包括运维合规、高可用架构治理、变更管控、容量管理、风险管理、故障管理等 6 个方面。
在实际做规划时,并不需要在年度规划中把所有的项写上,而且也没有这么多的资源来做这个事情。
在选取时规划时主要考虑当前业务所在的生命周期和团队规模。
不同业务生命周期阶段对研发的要求有所差异。在业务启动阶段,研发团队应集中于快速且高质量地满足业务需求的交付。随着业务进入发展阶段,重点转向通过效能指标促进产品功能的标准化和业务能力的沉淀,为规模化复制做好准备。当业务成熟,研发应专注于提升稳定性和效率,降低成本,并通过技术创新寻求新机会。而在业务消亡阶段,关键在于资产的沉淀复用,以保留组织的长期投入价值。
团队规模对研发效能策略同样有显著影响。小型团队,通常规模较小、专注领域单一,应聚焦于提升研发过程效率,而非任务交付量。中型团队面临着更复杂的业务和紧密的合作需求,应将研发效能建设集中在流程和标准化上,以简化协作并确保产出质量。大型团队则需要重视不同小团队之间的协调和合力,注重在宏观层面的业务影响,并聚焦于结果评估和效果衡量。
我们当前需要基于公司战略和方向,根据团队的实际情况,明确资源和目标的匹配度,选取一些当下特别痛的点来突破。以全面的思考为整体技术规划的方向指引,以单点突破的方式逐步推进,从而达到整体研发效能提升的目的。
以上,只是一个思路。