资讯详情

资讯详情

Kubernetes 社区如何规模化扩展新贡献者:2017 贡献者峰会 Scaling New Contributors 纪要与实践解读

Kubernetes 社区如何规模化扩展新贡献者2017 贡献者峰会 Scaling New Contributors 纪要与实践解读【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community导读本文围绕 2017 年 12 月 Kubernetes Contributor Summit 上由 Vishnu Kannan 主持的 Scaling New Contributors 议题纪要展开系统还原当年社区面临的新 PR 合入趋缓、评审无人响应、贡献者增长停滞三大核心矛盾并结合当前仓库中的社区成员制度、导师计划、issue 治理与贡献指南等沉淀成果梳理这些讨论最终演化成的工程化机制。读完本文你将理解大型开源社区如何从一次圆桌讨论出发逐步构建出先 issue 后 PR的协作约定、help wanted / good first issue 标签体系、贡献者-评审者-审批者晋升阶梯以及导师角色与工作坊等一整套可复制的新贡献者扩展方案。峰会背景一次聚焦新贡献者增长的圆桌讨论2017 年 12 月的 Kubernetes Contributor Summit 汇聚了各 SIG 的维护者其中 Scaling New Contributors 分组讨论由 Vishnu Kannan 主持、Chris Love 记录原纪要保存在 events/2017/12-contributor-summit/scaling-new-contributors.md。与同目录下讨论技术演进的议题不同如 breaking-up-the-monolith.md、cloud-provider.md这场讨论的主题是社区本身如何让源源不断的新人进入、被接纳、并最终留下来。讨论的起点非常直接New pull requests are plateauing in k/k—— kubernetes/kubernetesk/k仓库中来自新贡献者的 PR 数量出现平台期且单个 PR 从提交到合入的耗时越来越长。这不是个别人的体感而是被现场多位与会者共同确认的系统性问题。问题诊断新贡献者与 PR 评审的堵点PR 合入周期过长一个 3 个月的真实案例纪要以一个典型场景开篇一个修复类的小型 PR耗时 3 个月才完成合并。期间Nobody reviewed - was ignored即长期无人评审、直接被忽略。这类沉默等待对新贡献者的杀伤力极大——新人往往把 PR 无人响应理解为我的贡献不被需要从而流失。PR 缺少进入里程碑的流程与机制纪要指出两个结构性缺失PRs are lacking process to get them on milestonesPR 缺乏被纳入发布里程碑的明确流程贡献者不知道自己的工作在向哪个版本推进Lack of organization and understanding PR process新贡献者对 PR 流程本身缺乏组织化的理解。这背后还有一个更深刻的观察We have a explicit state machine, instead of a implicit state machine我们需要一个显式状态机而不是隐式状态机。意思是当时 PR 的推进状态待评审、需修改、待审批、待合入很大程度上依赖维护者的个人记忆与默契而非一套人人都能看到的、可预期的流转规则。隐式流程让新人无从下手也让维护者背负了过多的协调负担。先 issue 后 PR显式协作约定的雏形纪要明确提出了一个重要约定File an issue first, then file a PR先提 issue再提 PR。其逻辑在于issue 是社区协作的入口当 issue 被打上所属 SIG 的标签后对应的 SIG 会处理它贡献者也能借此明确这个工作属于哪个 SIG、应该找谁评审。这一约定后来被完整固化进 contributors/guide/contributing.md 的 PR 最佳实践中——例如在 PR 正文中使用fixes #123关键字关联 issue 以便合并时自动关闭并强调 issue 与 PR 的对应关系是评审者理解变更意图的前提。核心症结评审时间不足讨论最终收敛到一个简单而残酷的事实What is the problem? No time to review PRs。无论是 SIG 负责人、评审者还是审批者都处于想评审但没时间的状态。这引出了两个衍生问题测试失败无人解释Tests did not pass what happened —— 新贡献者的 PR 触发 CI 失败后往往不知道失败是自身代码问题还是基础设施抖动flaky test也找不到人帮忙定位瓶颈定位偏差纪要特别指出 We are currently bottlenecked at approvers not reviews —— 当时的瓶颈不在评审环节而在审批环节审批者池子过小、负载过高。数据驱动Devstats 让问题可度量纪要中反复强调数据的作用Devstats, everyone needs to look at the stats。讨论认为社区不能只凭体感争论评审到底慢在哪而应通过贡献数据回答瓶颈究竟在评审还是审批、在哪个 SIG、在哪个环节。这一主张在仓库中有明确落地CNCF 的 DevStats 仪表盘被纳入 contributors/guide/issue-triage.md 的 triage 工具清单用于查看 issue 解决速度Issue Velocity与 PR 速度PR Velocity包括各 SIG 的 PR 负载、PR 从提交到审批/合入的耗时等。同时DevStats 还被用作成员活跃度度量的权威数据源——community-membership.md 明确规定12 个月内跨所有组织无任何贡献的成员将被视为 inactive 并移出 GitHub 组织该判定即由 CNCF DevStats 项目测量。可以说Scaling New Contributors 讨论中看数据、定瓶颈、清僵尸的思路后来直接长成了社区成员生命周期管理的骨架。解决方案一导师机制与新贡献者工作坊面对SIG 负责人太忙、新人没人带的困境纪要提出在 SIG 内部设立独立的导师mentor角色把带新人从 SIG Lead 的杂务中剥离出来成为一项专门职责。同时提出Bootcamps for new contributors即面向新人的集中式引导活动。这套设想在当前仓库的 mentoring/README.md 中已经发展为完整的导师计划矩阵Office Hours / 一对多答疑mentoring/programs/office-hours.md小组导师制Group Mentoring Cohortsmentoring/programs/group-mentoring.md用于长期贡献者阶梯式成长角色影子计划Shadow Rolesmentoring/programs/shadow-roles.md让新人跟随 Release Team 等角色学习新人工作坊Contributor Workshopmentoring/programs/contributor-workshop/README.md内含 guides、live-workshop 与模板目录正是纪要中Bootcamp/Planned workshop on how to get a PR merged的工程化产物面向学生的 GSoC、面向小众群体的 Outreachy、LFX 1:1 全日制指导等分别见 mentoring/programs/google-summer-of-code.md、mentoring/programs/outreachy.md、mentoring/programs/lfx-mentorship.md值得一提的细节是mentoring/README.md 中致谢了最初的导师成员其中包括 chrislovecnm——正是本场讨论的记录者 Chris Love。从一场峰会讨论到一整套导师计划这条演化路径清晰可循。解决方案二issue 复杂度标签与新人入口纪要提出 Can we label the issues in terms of complexity按复杂度给 issue 打标签并特别指出Sig-cli 已经在贡献者指南中做了类似实践。这一思路最终沉淀为 Kubernetes 全社区的help wanted与good first issue双标签体系专门文档见 contributors/guide/help-wanted.md。help wanted清晰、可上手的任务help wanted标签要求 issue 满足三个标准Clear Task任务已被社区认可无需进一步讨论API/CLI 行为应在 issue 中定稿并给出校验预期Goldilocks priority优先级恰到好处——既不能高到必须核心贡献者亲自做也不能低到不值得核心贡献者花时间评审Up-To-Dateissue 必须保持有效不能是已过期、已完成或已变更优先级的僵尸条目。good first issue为首次贡献者定制good first issue是help wanted的子集专为第一次贡献者设计在满足 help wanted 全部条件之外还需满足无进入门槛No Barrier to Entry、解决方案已在 issue 中写清Solution Explained、必要的背景知识被显式列出并给出阅读清单Provides Context、附上相似实现的示例链接Gives Examples、指明需要修改的代码与测试文件Identifies Relevant Code、且有可复用的现成测试Ready to Test。该文档还给出了一条关键原则新贡献者不应被独自丢在流程里——New contributors should not be left to find an approver, ping for reviews, decipher prow commands, or identify that their build failed due to a flake。社区成员被鼓励在 good first issue 的 PR 评审中提供额外协助、推荐合适的 Slack 频道、邀请参加 SIG 会议并在完成一两个 good first issue 后引导其转向 help wanted 任务。这直接回应了纪要中Tests did not pass what happened的新人痛点。标签的管理命令同样显式化/help、/remove-help、/good-first-issue自动附带 help wanted、/remove-good-first-issue。从 issue 到 SIG 归属的完整链路contributors/guide/issue-triage.md 进一步把找对 SIG变成了可操作的流程新 issue 自动获得needs-triage标签经/triage accepted确认归属/sig network这类命令将 issue 路由到对应 SIG贡献者可用/assign认领 issue。纪要点名的needs-sig 状态先让 issue 被正确的 SIG 认领再开始写 PR正是这条链路的起点。关于优先级文档定义了priority/critical-urgent、priority/important-soon、priority/important-longterm、priority/backlog、priority/awaiting-more-evidence五档标签对于长期无进展的 issue则有 30 天跟进、90 天自动打lifecycle/stale的兜底机制。这些都属于纪要中显式状态机诉求的直接实现。解决方案三评审文化文档化与评审者激励什么样的评审是好评审纪要提出 We need to document what a good review looks like并思考 How many times a reviewer say lgtm 作为评审者表现的度量维度。仓库中 contributors/guide/contributing.md 引用了The Gentle Art of Patch Review的迭代式评审框架将评审拆解为三个递进层次避免一上来就用细节淹没新人Is the idea behind the contribution sound?—— 变更背后的想法是否成立Is the contribution architected correctly?—— 架构是否正确Is the contribution polished?—— 实现是否打磨到位。同时contributors/guide/expectations.md 定义了社区对评审延迟review latency的期望并强调评审者要以协作、尊重的态度对待来自他人的 PR。评审者还掌握着/lgtm这一点赞式认可工具——这正是纪要中评审者说了多少次 lgtm这一可度量信号。当新贡献者获得第一个 LGTM 时社区鼓励在频道和会议中公开致谢形成正反馈。分摊审批者负载从 approver 瓶颈到全员评审纪要的核心判断是瓶颈在 approvers 而非 reviews。为此讨论提出两条路径降低评审门槛、扩大评审者队伍How do we help take the load off of the approvers pool, how do we improve reviews给贡献者分配责任Give contributors some responsibilities让成员在获得权限后承担评审职责而不是永远停留在只提 PR的单向贡献模式。这两条路径最终凝结为下面要讲的晋升阶梯——评审不再是少数审批者的特权而是每个成员成长路径上的必经环节。解决方案四贡献者晋升阶梯与活跃度治理Member → Reviewer → Approver → Subproject Owner纪要提出需要 Guidance on progress to contributor - reviewer - maintainer从贡献者到评审者再到维护者的晋升指引。这一指引在 community-membership.md 中被完整制度化角色核心职责关键要求定义方式Member社区活跃贡献者2 位 reviewer 担保 多次贡献至少 1 个合入 PRKubernetes GitHub 组织成员Reviewer评审他人贡献成员满 3 个月、作为主评审至少 5 个 PR、累计评审/合入至少 20 个实质 PR由子项目 approver 提名OWNERS 文件 reviewers 条目Approver批准贡献合入担任 reviewer 满 3 个月、主评审至少 10 个实质 PR、累计评审/合入至少 30 个 PR由子项目 owner 提名OWNERS 文件 approvers 条目Subproject Owner设定子项目方向与优先级卓越的技术判断力与长期责任心OWNERS 文件 owners 条目值得注意的是Approver 的职责清单中明确包含 Mentor contributors and reviewers指导贡献者与评审者——导师责任被内建进了最高技术角色的岗位描述这正是纪要中让导师成为 SIG 内一个正式角色的最终形态。OWNERS 文件机制本身详见 contributors/guide/owners.md。清理 inactiveOWNERS 与 MAINTAINERS 的常态化治理纪要点名一个敏感但必要的话题We need to cleanup those who are inactive in k/k - OWNERS and MAINTAINERS并建议度量被自动分配 issue 后长期不响应这一指标作为激励与问责的依据。社区对此的回应是 community-membership.md 中的Inactive members章节成员被定义为持续活跃的贡献者任何成员在 12 个月内无跨组织贡献即被移出 GitHub 组织重新激活需重新熟悉项目现状并再次走完成员申请流程。同时文档也保留了人性化兜底DevStats 不统计非代码贡献若被误移除可开 issue 快速恢复。这为清理僵尸维护者提供了既严格又可纠偏的制度保障。如何创造激励如何创造激励incentives是纪要的核心追问之一。仓库中的沉淀给出了多层次答案对评审者晋升 approver 需要大量实质评审评审本身就是成长投资对导师approver 岗位把指导贡献者与评审者写进职责对新贡献者good first issue 承诺有人全程守护第一个 PR对组织成员持续性要求通过 12 个月活跃度红线强制执行。激励不是单一的物质奖励而是把带新人、做评审嵌入到每一个角色的定义中。解决方案五文档、问答渠道与工作坊把文档搬进 kubernetes.io纪要两次强调 Put the documentation into kubernetes.io / We need to move our documents into kubernetes.io并提到要提供 Simple use-case examples on how to get a PR in。其意图是社区治理文档不应散落在各 SIG 仓库的角落而应进入统一、可检索的官方文档站点让新人一次性获得从环境搭建、提 PR 到通过评审的完整路径。与之对应的仓库侧实践是 contributors/guide/ 目录——从 contributing.md贡献总览、github-workflow.mdGitHub 工作流、pull-requests.mdPR 测试与合入流程到 contributor-cheatsheet速查表新人所需的核心文档在仓库内形成了一套完整、互相链接的知识体系。提问渠道与如何获取答案纪要提出 Ask questions on #kubernetes-dev 并强调 We need to document how to get answers。这一诉求的落地是所有贡献者被引导先在 SIG 层面提问再走通用渠道——contributors/guide/contributing.md 明确建议先联系相关 SIG通用问题再走 communication 中定义的标准沟通渠道。PR 长时间无人评审时还有专门的#pr-reviewsSlack 频道兜底求助。提问路径的文档化让该问谁、怎么问、问不到怎么办都有章可循。如何合并一个 PR从工作坊到发布流程对齐纪要提出策划 Planned workshop on how to get a PR merged面向贡献者的合并 PR 工作坊同时反思发布流程How do we fix the release process in terms of what is in a release, because we do not have a target we do not know what we are shooting at——没有明确的发布目标就不知道自己在为什么而冲刺。前者的落地即 mentoring/programs/contributor-workshop/README.md 及其 live-workshop 与模板资源后者的思考则演化为各 SIG 以里程碑milestone管理 issue/PR 的成熟实践例如 sig-cluster-lifecycle 的 grooming.md 中关于里程碑规划Planning a Milestone的章节正是让每个 PR 知道自己在冲向哪个版本的具体实现。总结从圆桌讨论到制度化治理回顾这场 2017 年的讨论其价值在于把新贡献者增长停滞从一个模糊的抱怨拆解成了可执行的问题清单与行动项问题可度量用 DevStats 数据定位瓶颈approver 而非 review、度量评审者表现lgtm 次数、追踪 inactive 成员12 个月红线入口可预期先 issue 后 PR、needs-sig路由、help wanted / good first issue 复杂度标签让新人知道从哪开始、该找谁成长有阶梯Member → Reviewer → Approver → Subproject Owner 的显式晋升路径评审与导师职责被内建进角色定义负担有人担SIG 内的导师角色、contributor workshop、office hours、shadow roles 等 mentor 计划把带新人从个人善举变成组织职能流程显式化PR 状态机、issue 跟进时限30 天/90 天、里程碑对齐让隐式默契变成人人都能看到的规则。当年这场由一名主持人和一名记录者发起的圆桌讨论如今已演化为 Kubernetes 社区一整套可检索、可复制、可度量贡献者增长机制。对于任何正在经历贡献者涌入但评审跟不上的大型开源项目这份纪要与仓库中沉淀的制度文本都是一份极具参考价值的治理蓝本。延伸阅读均位于本仓库内community-membership.md角色与晋升、contributors/guide/help-wanted.md新人标签、contributors/guide/issue-triage.mdissue 治理、mentoring/README.md导师计划总览、contributors/guide/contributing.md贡献流程。【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →