ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

研发体系建设:围绕交付链路与效能度量打造高效研发团队

研发体系建设:围绕交付链路与效能度量打造高效研发团队 1. 研发体系建设的第一步先承认这是个业务问题不是管理问题1.1 为什么制度流程越建越多研发效率反而越来越低我见过太多团队在研发体系建设这件事上栽跟头。老板觉得项目总延期、线上问题反复于是要求把研发体系建起来研发负责人立刻组织团队输出了一套制度文档有研发流程规范、代码评审规范、发布审批制度、绩效考核细则总共几十页。半年后再看交付效率没有任何提升团队怨气反而变大了。问题出在哪出在大多数人把研发体系建设等同于定规章制度。我先抛一个反直觉的判断研发体系建设本质上是解决业务交付问题不是管理问题。它要回答的从来不是怎么管住研发而是怎样才能让一个需求从想法到上线走得更快、更稳、更可预测。一旦你把体系建设理解为定规章制度你就天然站到了研发团队的对立面后续所有动作都会触发防御性反制。我复盘过好几个失败案例发现过度制度化有一条很典型的发生路径项目出问题管理者先归因于人不行、执行不到位于是补一条制度制度落地后需要有人监督于是增加汇报和审批环节汇报数据不好看管理者倾向于把制度和考核绑定用更多的指标加压。团队为了应对开始明面遵守、暗面绕过比如为了满足代码覆盖率指标写一堆无断言的单测为了通过变更审批把大变更拆成多个小变更绕道。到最后制度文档越来越厚研发效率越来越低体系变成了一堆纸。这条路走偏的根源是对体系的误解。体系不是若干文档的合集而是一整套让团队协作得以顺畅运行的机制。它包含流程、规范、工具、度量和反馈闭环但前提是这些设计必须服务真实的业务场景。1.2 从管控视角切换成契约视角既然问题出在视角上那正确的视角应该是什么我自己的经验是八个字把制度当契约不当枷锁。举一个很简单的例子。需求文档规范你把它理解成公司规定每个人必须填写需求文档——这就是管控视角大家只会应付你把它理解成业务方和开发团队之间的一份契约用来明确双方对需求的理解一致——这就是契约视角大家会认真对待因为不认真后续吃亏的是自己。我做研发体系咨询时有一个习惯动作问团队你们在协作过程中遇到最痛的点是什么。答案通常五花八门有说需求天天变的有说测试环境太乱的有说上线全靠运气的。然后我再问一句如果只能解决一个你先解决哪个绝大多数团队选的是需求经常变或者线上出问题没人说得清怎么发生。这说明研发团队其实不抗拒协作约束他们抗拒的是与自己痛点无关的约束。研发体系建设的第一性原理就是找到团队协作中最真实的断点用最小成本把它补上。补上的东西天然会被团队接受因为它在帮大家省事。我常把研发体系比作交通系统。红绿灯不是用来管住司机的而是为了让每个方向的车都走得更顺畅。如果某个路口车流量很小你却非装一个红绿灯那只会增加所有人的等待时间。很多团队的问题就是路口还没有拥堵红绿灯装了一大堆。所以在动手设计什么流程规范之前先花一两个星期做一件事把团队从需求提出到功能上线的全过程走查一遍记录每个环节的等待时间、返工次数、信息断点。这份记录会告诉你体系最该先长在哪。千万不要一上来就参考大厂的研发体系模版照搬——那是别人交通拥堵时设计的红绿灯方案适合别人的路口未必适合你。2. 以交付链路为主轴倒推体系的核心模块2.1 先画一张从需求到上线的完整链路图拿到了团队的真实痛点之后接下来要做的不是急着设计流程而是把交付链路画出来。为什么强调链路而不是职能因为很多团队的体系是按部门建的——开发部建开发规范测试部建测试规范运维部建发布规范——结果每段都看起来很完善连起来却是断的。研发体系的服务对象是价值交付这条完整的链它不会因为开发部做完了就自动流到测试部。中间的任何信息断层、交接模糊、环境问题都会让整个交付停顿或者返工。画链路图的方法很简单拉上技术负责人、测试负责人、运维负责人各一名在白板上从需求提出开始一路画到功能上线后由用户使用。每一步画成一个节点节点之间画上箭头在箭头上标注这个步骤的输入和输出是什么、由谁负责、平均等待时间是多少、经常出问题的地方在哪里。我记得有一家做企业服务的团队三十多个人画完链路后自己都愣了一个需求平均要走14个节点其中一半以上是等待和交接。最夸张的是开发完成到测试介入这个节点平均要等两天。问为什么开发说代码还在自己分支上没合并测试说不知道功能开发完了没有。就这么一个信息不同步的问题就让整个团队交付周期被拉长了40%。后来只加了一个开发完成后在协作群里发一条通知自动化部署一套测试环境的动作这部分等待直接降到了半天以内。这个例子很能说明问题。画链路图的价值是让团队第一次看到自己的交付全貌而不是只看到自己手头那一段。很多体系设计之所以失败是因为设计者站在某一个职能视角看问题拿出来的方案让下游迁就上游或者让上游承担大量他看不见的返工成本。2.2 八个关键卡点上需要配置的体系能力把链路图画出来之后你会发现看似复杂的研发体系真正需要重点建设的能力点其实是可以枚举的。我按自己的经验总结出八个高频卡点每个卡点对应一类体系能力你可以对照自己团队的情况来看卡点位置典型问题表现对应体系模块需求澄清开发做到一半发现需求有歧义需求模板、准入标准、澄清会技术设计多人改同一块代码互相踩脚轻量设计文档、接口契约开发自测功能提交测试后低级错误一堆自测清单、本地检查脚本代码评审评审流于形式没人真看逻辑评审门禁、小步提交、轮值评审环境管理测试环境互相污染问题难复现环境规范、服务编排发布变更上线靠手工回滚靠运气CI/CD流水线、发布检查单线上监控出问题后人肉排查靠猜日志、监控告警、链路追踪复盘改进同类问题反复出现复盘机制、改进项跟踪别看这个表只有八行它能覆盖绝大多数中小团队80%以上的交付痛点。而且你会发现真正有效的体系模块都不是什么高大上的东西反而是那些团队已经知道该做、但一直没人认真做的基本功。我特别想强调一下技术设计这个卡点。很多团队砍掉设计文档理由是小步快跑、不愿意写文档。但实际项目里因为接口没对齐导致前后端返工、因为多人同时改一个模块导致合并冲突的现场比比皆是。这里有个误解轻量不等于没有。一个三五行的接口约定、一个简单的模块影响范围说明根本不需要写成正式的架构设计文档只需要在动手前花十分钟对齐。体系要做的是把十分钟对齐变成习惯而不是把写四十页文档变成流程。2.3 体系设计不是一次到位而是沿着链路补洞强调一个容易犯的错误建体系的人总想一步到位试图一次性把八个卡点全解决。以我的经验这样做几乎必然失败。原因很简单体系的落地需要团队改变行为习惯而行为习惯的改变是缓慢的。你一次性引入八个新制度相当于让团队同时改变八种工作方式任何一个环节出了问题团队都会把责任归到新体系头上。所以我给团队的建议是沿着链路图按痛感从高到低排序一次只补一两个洞补完稳定一到两周再补下一个。这里有个判断标准如果体系的某个模块上线一个月后团队已经不再意识到它的存在说明它真正落地了如果它每次出现都被大家明显感知并吐槽那它就没有落地。比如CI流水线真正跑顺之后大家不会意识到流水线帮了什么忙只会觉得提交代码后自动出结果是一件理所当然的事。这才是体系该有的样子——它融入协作的底层而不是悬浮在所有人之上的额外负担。3. 三个层次的体系搭建流程、规范、工具链路图已经把卡点标出来了接下来要讨论的是用什么形态去完善这些卡点。我习惯把研发体系的落地形态拆成三个层次流程层、规范层、工具层。这三者不是互相替代的关系而是层层递进的关系流程是骨架规范是血肉工具是神经。没有工具承载的规范和流程全凭人肉执行迟早会变形没有规范和流程支撑的工具只是买了一堆软件放在那里吃灰。3.1 流程层三分法设计轻量流程流程层的常见问题是两个极端一是没有流程全靠口头协调大家陷在消息群里反复确认二是流程过重一个需求从提报到开发要经过四五道审批每个审批都要等一天。我设计流程时用的是一个三分法把流程分成三类来区别对待第一类是必要审批只保留真正能产生价值判断的环节。比如需求是否进入开发这个审批因为涉及开发资源的投入值得产品和技术负责人看一看但需求文档格式是否符合模板这种审批就完全没有必要就应该让系统自动检查或者直接去掉。第二类是状态流转指的是需求、任务、缺陷在各状态之间的移动。这类流程不应该卡任何人但它必须留痕。状态流转的核心价值是让所有人能实时知道这件事现在到哪一步了避免出现代码写完了没人知道这类信息断点。第三类是反馈闭环指的是出问题之后必须回到对应环节去修正。比如测试发现缺陷必须回流到开发线上事故复盘后改进项必须有人认领需求上线后数据不符合预期必须触发新一轮的需求澄清。这类流程最容易被人忽略但它才是体系持续进化的动力。一个需求从提出到上线理想状态下流程节点不要超过五个提交需求、评审通过、开发中、测试中、已上线。每个节点都应该有明确的主人有明确的输出物其他多余的都是摩擦成本。如果你的流程超过七个节点强烈建议砍掉一两个不要舍不得。3.2 规范层哪些规范必须写哪些规范不该写规范层是最容易被做滥的。我见过一份Java开发规范内容涵盖从命名规范到类设计原则打印出来四十多页。这是典型的为写规范而写规范。写的人满足了自己输出感看的人翻两页就放弃了最后既没有形成约束反而让人觉得我们团队有规范——其实等于没有。我的建议是规范只写两类救命规范和约定规范。救命规范是那些不写就会出大事的规则。比如禁止把数据库密码提交到代码仓库生产环境变更必须经过审批对外提供的接口必须有鉴权。这类规范每条背后都有血泪教训规则简单清晰没有例外可谈。团队里不管谁来了都得遵守因为它防的是灾难性后果。约定规范是那些你们团队内部说好怎么做的规则。比如代码分支命名方式、提交信息的格式、接口返回体的统一结构、前端组件库的使用约定。这类规范不一定有绝对的对错但必须统一因为不统一会导致协作成本上升。比如提交信息格式有人用中文有人用英文有人不写查起历史来一头雾水约定之后所有人用同一个格式没人在这个事上再消耗脑力。那哪些规范不该写我把它们叫装饰性规范。举个例子方法名必须用动词开头每个函数不能超过80行禁止使用魔法数字。这些规范本身没有错但它们属于代码质量范畴应该通过代码评审和静态检查工具去约束而不是用文档规定。把它们写进规范文档既增加了阅读负担又很难严格执行。真遇到了这类问题你更需要的是一条好的工具链而不是一条规则。3.3 工具层选型三原则工具层是整个体系里最能释放人力的部分但也是烧钱效率最高的部分。我见过一些团队买了一大堆协作工具Jira、Confluence、禅道、TAPD、飞书项目全都配齐了结果每个工具上都有信息每个工具都填不全最后大家只在微信群里沟通工具变成了摆设。工具选型我只强调三个原则。第一条流程留痕原则。这个工具必须能让关键决策和状态变化有记录否则信息还是散落在口头和聊天记录里无法追溯。比如你在评审会上口头说这个需求不做登录了一个月后测试说没有登录功能开发说当时开会不是说了不做吗这就扯不清了。如果评审结论记录在需求下谁对谁错一目了然。第二条约束内置原则。工具不能只是一个记录本它要能把规范变成系统强制。比如代码必须通过CI检查才能合并这事不能靠开发自觉而是要在代码托管平台上把这条配成硬性规则不满足就真的合并不了。这条原则是把体系从靠人执行变成靠系统执行的关键。第三条低维护成本原则。任何需要专人长期维护的配置、任何需要花费大量时间录入的系统最终都会被团队用脚投票抛弃。选工具的时候要优先考虑配置简单、维护成本低、与现有工作流天然契合的那个。宁可核心功能少一点也不选覆盖面广但配置复杂的全家桶。工具一旦让人感到用工具比不用工具更累它就死了。套用这三条原则去筛选你会发现真正需要的工具没几个代码托管平台GitLab/GitHub一个、项目管理工具一个、持续集成工具一个、监控告警工具一个。四个工具足够撑起一个几十人团队的研发体系。工具再多边际收益就快速递减了。4. 研发度量建立一套不被讨厌的效能度量体系4.1 研发度量为什么总是变味研发体系走到一定阶段管理者一定会问一个灵魂问题怎么衡量体系有没有见效于是研发效能度量体系被提上日程。聊这个之前我先泼一盆冷水市面上80%的研发度量体系是失败的它们不仅没有帮助团队改进反而制造了新的数据表演。我见过一个团队管理层要求考核代码提交量每人每周必须提交多少行代码。结果两个多月后代码里全是复制粘贴的注释和毫无意义的空行。另一个团队考核缺陷率测试团队开始压低缺陷提交数量导致生产环境出了一堆低级问题。这类事情反复上演本质上是碰上了古德哈特定律的变形版——当一个度量变成目标它就不再是一个好度量。研发团队有太多聪明人可以找到指标漏洞任何试图通过指标压出效率的管理手段最终都会收获一场精心策划的数据游戏。那是不是就不该有度量和指标了当然不是。问题是度量到底是为谁服务的。很多团队的度量体系是为管理层服务的让管理层看报表、做决策、追责任。我建议反过来度量体系的第一服务对象是研发团队自己管理层看到的报表只是副产品。团队用度量来发现自己交付过程中的瓶颈管理层用度量来了解团队需要什么资源支持——这才是度量的正确姿势。4.2 第一版度量指标我建议只用这六个现在业界讨论研发效能度量引用最多的是DORA四指标部署频率、变更前置时间、变更失败率、恢复服务时间。这四个指标针对交付这一个环节是够用的但站在整个研发体系的角度我想额外补充两个很多人会忽略、但实际价值很大的指标需求前置时间和需求吞吐率。下面是我在给团队搭度量体系时第一版推荐的指标组合指标定义用途取数来源部署频率每天/每周成功部署的次数对应交付能力的松紧程度CI/CD系统变更前置时间代码提交到功能上线的时长反映交付链路的整体效率CI/CD系统代码托管变更失败率发布后被回滚或者线上出问题的比例反映发布质量监控系统发布系统恢复服务时间从线上异常到服务恢复的时长反映故障应对能力值班记录监控系统需求前置时间需求提出到开始开发的时长反映需求澄清和排期的效率项目管理工具需求吞吐率单位周期内完成并上线的需求数量反映团队的交付节奏项目管理工具这六个指标有个共同点它们都是结果指标而不是过程指标。我不建议一开始就引入代码覆盖率、代码评审通过率这类过程指标。原因很简单结果指标反映的是团队协作的最终产出很难靠个人表演来作弊而过程指标很容易被钻空子比如为了覆盖率写无效测试为了评审通过率找搭子互评。在实际操作中这六个指标的取数周期建议是部署频率和变更失败率按周统计变更前置时间和恢复服务时间按双周看趋势需求前置时间和需求吞吐率按月看。不要天天盯着数字看更不要拿数字做日会材料——日会应该是讨论问题和进展的地方不是念报表的地方。4.3 度量的正确打开方式诊断先于考核度量体系上线前一定要先和管理层达成共识前三个月这些数据只用于团队自我诊断不与绩效挂钩。这个共识极其重要如果做不到宁可不做度量。原因不复杂。数据只有在团队愿意暴露真实情况时才有价值。如果数据连着绩效团队的第一反应就是让数据变好看而不会去想让交付变健康。你会看到部署频率从每天五次降到每周两次因为大家怕频繁部署触发变更失败率指标。最终整个团队为了指标健康把交付节奏拖回到一个更慢但看起来稳定的状态——这对业务没有任何好处。正确的用法是每个迭代结束后研发团队花十五分钟看一次看板上的趋势数据只回答三个问题——哪个环节的等待时间最长最近一次变更失败是因为什么下次迭代要不要调整某个协作方式这三个问题就是度量体系的全部意义帮团队找到下一个改进点而不是帮管理者找到下一个追责对象。我自己带团队时有一个小惯例每个双周五下午花半小时做一次交付回顾会上先把六个指标的趋势图打开不用解说让每个人自己看一分钟。然后让每个人出一个词形容这个趋势在自己的意料之中还是意料之外。这个方法很简单但它能让团队对数据保持真实的感知而不至于把研发效能量化成一堆冷冰冰的报表。5. 体系落地的真实阻力与应对5.1 研发团队的不配合其实是自我保护的合理反应研发体系建设纸上谈兵都很美好落地过程中一定遇到阻力而且最大的阻力往往来自研发团队自己。很多管理者把这种阻力归结为团队执行力差没有大局观。但我观察越久越确认一件事研发团队对新体系的抗拒绝大多数时候是对不合理体系的合理防御。举个典型的场景。团队接到通知以后每次代码评审必须至少两个人参加并且评审意见必须用规定的模板填写。这个命令式的通知没有解释评审要解决什么问题没有考虑团队十个人、代码评审需要半天时间人的现状。结果就是研发团队能拖就拖、能省就省最后评审流程变成了合并前点个按钮就算完事——体系没有起到任何作用。应对这类阻力我给管理者的建议是三个不要不要在下命令的当天强制执行不要在没有试点和经验反馈的情况下全面铺开不要用别人家团队都这样作为理由逼团队接受。更好的方式是选取一个和团队核心痛点相关的子模块比如最让人头疼的线上问题回溯先用两周时间找到解决方案再和团队一起验证。当团队自己说出这个做法确实能帮我省时间的时候体系的种子才算真的种下去了。5.2 管理层的既要又要需要被主动管理研发体系建设的另一类阻力来自领导层。一线团队的需求是少点流程、多点效率领导层的期待往往是又快又稳又省人力还要求过程可控。这四者之间存在天然矛盾而领导层通常不愿意承认于是会把压力全部压到研发负责人身上让体系变成装下所有矛盾的篮子。作为研发负责人管理领导预期是一项必修课。我的做法很直接给领导层两个选择题而不是一个承诺书。比如问这个季度我们优先解决交付速度还是线上稳定性如果优先解决交付速度那变更失败率可能短期内会有些波动但长期会随着门禁完善而下降——你接受这个阶段性权衡吗这种问题能把隐含的取舍摆到台面上来而不是让体系暗地里替你承担风险。我见过太多研发负责人不敢向管理层提这种取舍问题结果体系设计成了既要高速度、又要零缺陷、还要全流程留痕的全能方案——这种方案最终只会让所有人疲惫不堪然后体系名存实亡。5.3 分阶段落地路线图十二周从一个洞开始有了前面的铺垫落地顺序就非常清晰了。我整理了一个十二周的分阶段路线图适合二十人以上、一百人以下的中型技术团队参考阶段时间核心动作关键产物第一周走查链路完成痛点排序交付链路图、痛点清单第二到四周补齐第一个卡点通常是需求澄清或CI门禁一个可运行的规范工具配置第五到八周补齐第二个卡点建立双周回顾机制流水线稳定运行复盘记录第九到十二周上线第一版度量看板做一次全员回顾度量看板、改进计划这个节奏的核心思想是至少前四周团队只感受到一个新东西而且这个新东西必须直接解决他们的某个痛点。比如你选择从CI门禁开始那么团队平时改代码、提合并的时候会明显感觉到会自动检查了虽然一开始会有人因为不满足检查规则而抱怨但两周后他们发现流水线帮我把低级错误挡在前面时这件事就成了。十二周之后不要急着继续加新模块。我强烈建议留出一个月左右的稳定期让团队把前面建立的东西彻底内化成肌肉记忆然后才考虑引入第二期——比如优化需求前置时间、或者建设更完善的监控告警。研发体系建设是一场马拉松前十二周只是起跑阶段的动作校准跑得太快后面一定会掉速。6. 一个能直接照做的起步清单文章最后我给那些正准备搭研发体系、但又不知道从哪下手的团队一份精简清单。这套东西不宏大但它是无数团队验证过的最小可行组合。如果你现在只有一个人能投入精力我建议就从这五件事开始。第一件为需求入口设定一个完成标准。哪怕只是需求文档必须写明用户故事、验收标准、优先级这三点也足够拦住一大批稀里糊涂就在开发阶段返工的需求。第二件在代码托管平台上强制开启合并请求门禁。至少包括一条CI检查必须通过、至少一名非作者评审人同意。这一条做到了代码评审从自觉行为变成了系统行为质量下限立刻抬升。第三件把CI流水线跑通到提交代码后自动构建、自动跑单测、自动产出可部署产物这一步。能一键部署到测试环境可以放到第二期但提交后自动构建这一步必须尽早做它是后续所有自动化动作的基础。第四件每周抽十五分钟做一次固定的交付回顾。不需要复杂的流程就问三个问题这周有没有卡住超过半天的事卡在哪里下周要不要换个方式记录只需要三行字但它能保证体系持续演进。第五件找一块白板或者一个在线看板把需求状态可视化。让每个人随时能看到需求从一个状态流到下一个状态。这一步的价值不是管理而是减少信息不对称带来的等待和重复确认。这套清单做完你的团队已经拥有了最基础的研发体系雏形。它不完美也不完整但它跑在了正确的方向上——从真实链路出发用最小的成本解决最痛的问题。我见过很多团队一开始雄心勃勃折腾各种先进工具和理念最后反而不如老老实实把这五件事做扎实。研发体系建设这件事慢就是快少就是多。你能坚持把这些基本功做好它自然会生长出适合你自己团队的形态。
返回列表