企业开源指南:评估开源项目的成功

2019-04-28 17:43


最大限度优化组织中运行开源计划或启动开源项目的实践。这些资源由 Linux 基金会与 TODO Group 合作开发,代表了我们的员工、项目和成员的经验。

开源项目的负责人必须展示项目付出的投资回报率。本指南提供了组织评估开源项目、开源计划和开源贡献的一些方法标准。

了解评估对象、界定成功以及如何充分利用这些信息, 以开启您的开源项目目标,展示开源项目的有效性,并获得支持。

本指南的撰稿人

  • Chris Aniszczyk - Aniszczyk 云原生计算基金会首席营运官
  • Christine Abernathy - Facebook 开源开发者 & 倡导者
  • Joe Beda - 联合创始人 & 首席技术官
  • Gil Yehuda -( 雅虎+美国在线)开源高级经理
  • Sarah Novotny - 谷歌 Kubernetes 社区经理

如何定义成功

聪明的机构会明确开源资源开发的投资价值,并设定关于应用和参与的目标。但是每个开源项目对于成功的定义都有些不同。您设定的目标与追踪的指标会因您投资开源的理由而有所不同——无论是为了招募开发人员,还是打算通过开放创新带来新想法和新技术,或是更快地实现上市,亦或是降低开发成本,还是更多其他原因。

根据您独一无二的战略来制定目标十分重要——同时还要寻求高管团队的认同,以确保开源战略与整体业务战略保持一致。也就是说,无论其行业、产品或业务战略有何不同,开源项目负责人都有一些标准化的方法来评估项目的成功。这些方法包括:

  • 开发者在外部开源项目中的参与度与影响力
  • 组织在开源社区中的声誉
  • 招募和留住优秀开发人员的能力
  • 组织自身开源项目的总体质量与开发人员提供贡献的关键业务项目
  • 管理开源许可证合规性的成效如何

为何设定目标

在我们深入了解开源项目追踪的内容以及如何实施追踪之前,让我们先谈一谈您可以通过设定目标与衡量目标收获什么。

首要的是,追踪目标进展有助于确保您投资的开源项目(无论是外部项目还是内部项目)顺利发展——他们正在回应社区,充分地代表了公司,并有助于满足更广泛的项目目标。定期追踪有助于为开源项目设定基准,作为早期预警系统,以便在项目偏离既定方向、违反法律合规要求的时候,或在仅需撤回项目时进行更正。

仔细的(和战略的)衡量还为面向上层管理者的报告提供了极好的素材。定期报告有助于确保项目与自身目标和整体业务战略保持一致,并能够帮助项目经理获得行政领导对项目的内部支持(特别是在您达到甚至超过目标的时候!)

例如,Facebook 的开源项目办公室会定期在内部公布其开源项目的月环比结果,并向管理层发送执行报告。

“报告只是一个提高认知的好方法。尽管 Facebook 对开源(作为一个组织)高度重视,但总是在内部推销自己并展现自己的价值始终是件好事。” 

Christine Abernathy – Facebook开源开发者&倡导者

定期公开项目结果还有助于提高潜在的合作伙伴、用户和开发人员对于您组织开源活动的认识。

在开源社区中获取关于项目结果的评价——好的、坏的和难听的——可增强项目的透明度、问责制和可信性。

查看来自 Facebook 和 Google 的示例开源报告卡。

如何设定目标

您可以为您的开源项目设定远大的目标,但如何达成目标以及按照何种时间线来完成目标,要设定合理的期望。首先,在衡量初期建立绩效基准是有益的。创建收集数据的正确工具,并确保数据源真实,格式(和您的经理)易懂。许多组织为他们的开源项目创建了指标仪表板,以便在同一处追踪所有数据并提供项目快照,从而帮助快速评估进程。(具体参阅关于开源项目管理工具指南。)

CNCF project analytics dashboard

云原生计算基金会项目仪表板

紧接着,让所有的开源项目负责人和利益相关者一起——在 Facebook上,包括项目负责人和维护人员——作为一个整体决定您想在接下来的 3-6 个月内完成的任务(轻松、可实现的增量)。在这一时期末,回顾您如何完成任务,并根据前阶段的完成情况来调整下一阶段的目标和策略。

“我倾向于根据社区的痛点来寻找衡量指标,并尝试改良这些指标以提升社区的质量。” 

Sarah Novotny – 谷歌 Kubernetes 社区经理

除了绩效基准指标之外,您在为项目设定目标时,还需要考虑以下几点:

  • 战略调整
    您的目标是否与核心业务战略、产品目标以及其他内部业务目标保持一致?
  • 控制水平
    您的项目经理是否可以直接控制结果?或是项目经理、工程人员、法律人员或其他职能人员共同控制?设定在您的控制范围内可实现的目标。
  • 项目差异
    不同项目目标应根据它的目的、社区组成、技术堆栈和其他变量而有所差异。例如,Facebook 已经注意到 Javascript 项目趋向更加频繁地建立分支。他们已经认识到(在经过多次循环追踪之后!)这些并非项目质量的最佳衡量指标。
  • 数量与质量
    并非所有目标都应与数字相关联。提高项目质量的过程改进同样重要,甚至更为重要。仅因为您达到了所有的目标数字,并不意味着您的项目质量没有问题。相反,一个没有增长的、不大的项目质量也可能有发展前景。“您可能只拥有六位核心贡献者和十几个活跃的非维护人员,但是讨论全面,而且合并请求会在短时间内被处理,以及在重要功能方面的讨论有清晰明确的始终。这也许是个令人难以置信的健康社区,但它可能不会在 GitHub 上拥有极多的关注数与分支数,因为它可能是一个有商机的项目。”Novotny 表示,“所以我倾向于考虑社区如何与其自身互动,如何发展和指导新的领导者,以及所有的痛点的发展状态。”

共同的目标

当涉及评估开源项目的成功时,将注意力集中在您项目的这些量化指标上是趋势,即贡献者总数、代码行数、项目数量等。我们将在下一部分讨论评估您项目的质量所需要的内容。但还有很多其他的重要方法可以用来评估您项目的是否成功,并非严格地依靠这些数字。

“我认为使用指标作为一种报告趋势的方法是好的。但把指标作为衡量成功的唯一方式将会给您带来麻烦。” 

Joe Beda – 谷歌 Kubernetes 社区创始工程师 & Heptio 联合创始人兼首席技术官

Kubernetes 是 GitHub 上发展速度最快的开源项目之一,在过去三年里吸引了来自 1,181 家公司的 2,760 位开发人员的超过 80,000 次提交。但项目伊始就以技术和技术的使用作为衡量成功的标准,并非依靠“一些开源指标”,Beda 表示。

以下是开源项目办公室身后的一些共同目标,以及项目经理为了追踪项目的整体进程所采取的最佳办法。其中有一些目标本身无法评估,但这些目标与流程改进、效率提升以及质量改善息息相关。其他目标可以通过调查或其他评估方法来衡量,如定期、积极地征求口头或书面的反馈意见。(与您的团队交流!)

目标 1 确保高效且合法合规的开源代码应用

组织参与开源时通常会从这一步开始。他们意识到工程在其基础架构或在其产品和服务中消耗了大量的开源软

件,亦或是在其基础架构与产品服务中消耗了大量的开源软件。项目办公室有助于集中化处理关于开源消费的政策和决策的制定,追踪开源的应用,并确保组织不会违反各项开源许可证中规定应履行的法律义务。项目还可以持续监测他们帮助开发人员解决可能遇到的各种法律问题效果如何。

衡量这个首要目标的一些最常见方法是致力于确保政策和进程按计划的方式运行,同时确保组织活动保持合法合规:

  • 您使用了多少开源代码?
  • 追踪开源消耗的效果如何?
  • 开源代码使用政策清楚明确,且开发人员了解这些政策。
  • 引入代码的流程和工具清楚明确,且开发人员遵行这些流程与工具。
  • 哪些产品和服务使用了第三方代码?
  • 您有多少合规操作?这些问题的解决速度有多快?

(您是否有合规项目?请参阅我们来自《开源合规项目》的法律资源以获取有关此主题的更多信息。)

目标 2 提高开发人员生产力

只要您正在追踪和管理您的开源应用,就会希望开发人员更加便捷地为开源项目做贡献。如果您的工程师需要通过繁琐的程序来提交错误修复或添加新功能至您的业务所依赖的项目,您将浪费宝贵的时间和资源。开发人员将逆流而上节省大量的时间,而非维护一个独立的项目分支。因为这样做的话,随着时间的推移将会累积技术债务。

“我们试图让自己像那些在马拉松赛道上给参赛者递水的人。我们鼓励开发人员在我们的方向上采取一些额外措施,因为我们知道这样做,从长远意义上看,他们将会真正地实现目标。我们确实在试图建立一个项目作为支持服务,而非减速带。“

Gil Yehuda – Oath 开源高级经理(雅虎+美国在线)

与此目标相关的指标,致力于使开发人员对开源项目的贡献回馈得以顺利进行,同时增加您组织向上游作用监测的代码总量。一旦您消除了作用的障碍,使审批流程清晰快捷,您可以期待更多的贡献和效率。

需要追踪的事情包括:

  • 作为战略性团队识别外部项目的提交数量
  • 正在贡献的开发人员数量。以及,他们是谁?他们为哪些项目做贡献?
  • 组织雇用的项目维护人员的数量(聘用的和培养的)
  • 您贡献项目的质量
  • 情绪分析:贵组织在开源社区的声望
  • 开发人员是否了解贡献政策?(您有贡献政策对吗?)
  • 他们是否遵行贡献流程?(即他们必须签署 CLA 等等。)
  • 他们是否寻求帮助,以及您是否能够及时提供帮助?
  • 软件版本发布之间的时间差——是增加还是减少?
  • 向上游做贡献的工程成本和维护分支代码的工程成本间的对比差异?

目标 3 创建与发展开源项目

这是大型并以工程为重点的组织,如 Facebook、谷歌、微软、Twitter 和其他许多组织中的许多开源项目的主要目标。他们正在创建数百个(甚至数千个)开源项目,旨在解决工程技术问题。目标是吸引外部用户和贡献者们带来新的想法,并帮助推动技术更快发展——这是一个来自加利福尼亚大学伯克利分校的 Henry Chesbrough 教授所称为“开放创新”的概念。

“我们试图让自己像那些在马拉松赛道上给参赛者递水的人。我们鼓励开发人员在我们的方向上采取一些额外措施,因为我们知道这样做,从长远意义上看,他们将会真正地实现目标。我们确实在试图建立一个项目作为支持服务,而非减速带。” 

Chris Aniszczyk – Open Container Initiative 执行董事 & 云原生计算基金会首席运营官(前 Twitter 开源项目负责人)

可用于衡量项目质量的许多数据点是追踪此目标的关键(请参阅下一部分的前 5 条内容)。但还有其他一些因素需要考虑:

  • 是否有创建新项目的明确政策,以及开发人员是否了解该政策?
  • 是否有创建新项目清晰且简捷的流程,以及开发人员是否遵行该流程?
  • 外部人员对贵组织的项目做贡献有多便捷?
  • 项目维护人员是受欢迎的且有帮助的
  • 项目得到良好的维护与支持
  • 代码有据可查
  • 其他定量指标,如新贡献者的数量、创建问题的数量、解决问题所需时间等(请参阅下一部分)明确规定了如何做贡献
    • 项目所获得的外部贡献数量和多样性
    • 贵组织的项目受欢迎程度:GitHub关注数、社交媒体粉丝数等
    • 部署中和(或)生产中的用户数量
    • 贵组织发布的项目数量、广度和质量。例如,移动或数据、基础架构相关项目等
    • 您的项目和相关产品的性能得到提升
    • 不同版本发布的时间差

目标 4 招募并留住开发人员

以组织的身份参与并创建开源项目是吸引开发人员的好方法——并且能够在花费更少的资源来进行培训的条件下,使他们快速加入项目。当他们加入组织时,使用您的开源项目或为项目做贡献的开发人员已经熟悉您的流程、工具和技术。(请参阅我们关于开源开发人员招募的指南。)

但是您作为项目负责人,很可能不会在招募开发人员时发挥直接作用,而且您所在团队的开源参与性对于招聘有无即时影响可能并不明确。为了促使项目工作与招聘之间建立更为直接的联系,Facebook 开展了一年两次的调查,该调查询问了新员工三个基本问题:

  1. 他们是否了解公司的开源项目?
  2. 这种了解如何影响他们加入公司的决定?
  3. 他们在开源方面的经验是否适用于他们现在所从事的工作?

“我们用这项调查来衡量我们开源文化的质量,它同时说明了人们如何看待我们开源项目的整体效果。了解到数字具有上升的趋势是好的。” 

Christine Abernathy – Facebook 开源开发者 & 倡导者

用于开发人员招聘的其他常用指标包括:

  • 员工使用并贡献于哪些开源项目
  • 新员工从什么渠道听说该组织
  • 您通过开源项目引入的开发人员数量
  • 您招募了多少位项目维护(与培养)人员
  • 新员工入职需要多长时间
  • 开源开发人员如何在他们的职业生涯中大显身手
  • 开发人员的贡献被作为工作绩效的一部分来评估
  • 开发人员因贡献而被认可与奖励
  • 开发人员在贡献中获得帮助与支持

目标 5 促进开源文化

开源项目如何对工程人才的培养做出贡献,很大程度上取决于组织中的开源文化与开源实践的培育。这是由于开源组织是众所周知的开发人员工作与创新的好地方。开源项目经理通常是组织内部的开源精神大使,同时还负责监督开源合作的政策和实践。

追踪您组织中的开源文化如何发展对于衡量您项目的有效性是很重要的。衡量开源文化应用的一些常用方法包括:

  • 管理层和包括工程、营销和公共关系等部门的所有部门中的个人贡献者对于开源战略与开源项目的理解和支持
  • 开源社区中的品牌与知名度——如何看待贵组织
  • 参与——您以正面的方式积极参与开源社区
  • 培训与指导——您与开发人员合作改进开源贡献和开源项目,寻找贡献机会,并学习开源社区的工具和流程,确保贡献者能得到来自同行和管理人员的支持
  • 通用工具集的应用
  • 代码质量被开源/外部使用所接受
  • 代表组织进行倡导——出席会议并发言,撰写文章或教程等
  • 赞助基金会、团体或编程马拉松

目标 6 保持开源社区利益与产品利益的一致性

在开源项目中,社区宣传是一个新颖而日益流行的角色。您经常会扮演项目开发者和采用者社区之间联络人的角色——代表开发您的开源代码外部用户的声音,同时将信息反馈给产品管理团队。

这是确保您的产品和服务从社区受益的重要角色,因此您的开源项目将与组织更为广泛的业务战略和目标保持一致。用于监测您的宣传是否成功的一些指标包括:

  • 有多少贡献来自于组织外部?
  • 您的组织外部有多少全职贡献者?
  • 外部贡献的代码正在返回多少到产品中?
  • 来自开源贡献的雇员有多少人?

追踪的内容

有许多方法可用于开源项目的成功衡量标准与进度追踪。项目质量不是唯一的追踪内容,但它仍然非常重要。问题在于,围绕开源项目可获得的数据太多了。任何你能获取数据之处,都可以收集并追踪。同样每个组织追踪的指标——以及他们对数据的处理——很大程度上取决于组织自身的项目目标,以及组织在市场和开源社区中面临的独特挑战。

“我们收集自己可以获得的数据,虽然这些数据是可获得的,但我们并不生活在数字里。我们生活在确保我们拥有正确结果的环境里。” 

Gil Yehuda – Oath 开源高级经理(雅虎+美国在线)

对于一些(疯狂或完全自动化的)项目经理来说,他们的回答就是追踪一切事项。特别是对于大型组织而言,有太多的项目需要处理,追踪所有事项是不可能的,而且也无法从中得出任何有意义的结果。那么,衡量开源项目质量的真正指标到底是什么?

这里有一些评估您开源项目整体质量的最佳指标。这些指标只是之后更为严格和缜密分析的开端。请记住,这些是帮助项目负责人确保多个项目质量的技巧。项目本身也应该追踪它们自己的质量指标。GitHub的开源指标指南就项目维护人员应该关注的内容给出了很好的概述。

这些数字从GitHub上免费使用的开源工具和商业产品上很容易就能收集到。定期检测它们(每月、每季度和每年)有助于监测单个项目的进程,并将其以项目为一个整体计算总计数。它们可运用于管理层报告中,并帮助您的开发人员改进您的项目。

“我们试着定期查看项目质量的好坏,并建议他们应该将哪些内容做得更好。但是我们不直接参与管理。我们只是给他们提供数据,然后在我们有能力或有必要的时候稍微推动一下他们的工作。” 

Christine Abernathy – Facebook 开源开发者 & 倡导者

贡献者数量(以及外部贡献与内部贡献的比例)

项目的开始伴随着来自内部开发人员的多数贡献,并伴随源代码的使用或分支,发展吸收了更多的外部贡献。始终保持可持续发展的最高质量项目拥有极其多元化的社区,并拥有来自项目生态系统中其他公司的大部分贡献。这些公司已经对该代码产生了商业依赖。(还记得 1,000 多家贡献于谷歌 Kubernetes 项目的公司吗?)

持续吸引新的外部贡献者项目往往在维护项目、接纳贡献者和汇总社区的反馈等方面表现优秀。(注意:对于没有发展自身贡献者基础的项目,可能仍然是正确的!)

Kubernetes contributors (git-author) over time.

合并请求的提交量、开放量和接收量(以及它们保持开放的时间长度)

当贡献者发现错误或有功能需求,而他们可以(且有空闲)自行修补或编写代码时,并作为一个合并请求(PR)提交。追踪合并请求的数量以及发生了什么变化,可以显示出您雇员以外的贡献者正在提交多少代码,这同时也是您项目的外部收益水平的指标。

Line graph of Kubernetes pull requests over time

合并请求(PR)的开放时间也表明了您项目的维护人员对外部贡献者的响应和接纳程度。如果一个合并请求长时间没有得到回应,潜在的贡献者可能会把他们的“金点子”转到别的地方。

“当我们有一个好项目时,我会说,我们可能没有一个合并请求会保持开放状态超过或最多两到三个月。这时间实际上已经很长了。” 

Christine Abernathy – Facebook 开源开发者 & 倡导者

请记住,这些指标高度依赖于项目规模。Facebook 的小型项目尝试将开放状态的合并请求数量保持在 10 个或更少。但是,对于与维护人员的数量相比,拥有大量社区投入更为大型的项目而言,将合并请求(PR)的数量限制在这个范围是具有挑战性的。审查这些合并请求需要花费大量时间,因此更为大型的项目往往有开放时间更长的合并请求(PR)。

Facebook 的开源办公室经常在数据库中运行查询,找出合并请求(PR)开放时间最长的前五个项目。他们会查明一些问题,然后找寻机会与项目维护人员展开对话。他们询问维护人员一些问题,以找出问题的根源,并看看什么可能有助于解决问题。多数情况下,这只是一个重新聚焦他们的注意力,并提醒他们保持社区和谐重要性的问题。但偶尔深挖这些数字会指出更深层次的项目问题。大量开放的合并请求(PR)或旧的合并请求(PR)可能意味着只有一两个人在维护这个项目—— 这是一个潜在的预警。

问题提交数量(以及它们的开放时长)

没有时间、权限或能力提交合并请求(PR),但遇到有关您的代码问题的用户,可以将他们的错误和功能需求作为一个问题进行提交。问题的数量以及这些问题如何被解决,可以表明项目的用户使用水平,以及维护人员对于用户需求的响应程度。

这个数量当然取决于追踪问题的方式。仅使用 GitHub 来追踪错误的项目,其问题的开放时间可能会远短于使用 GitHub 来收集包括功能需求等问题的项目。这些考虑因素会拖延或缩短问题的开放时长。

Bar graph of Kubernetes issues over time

每一位贡献者的提交数量(外部贡献者与内部贡献者)

一个项目的外部贡献者提交数量与总数有关,是显示项目在公开创新方面成效如何的另一个标志——从外部引进新的想法。随着时间的推移,高质量项目的外部贡献者比例会逐步提高。衡量每一位贡献者的提交数量也有助于评估您的项目是否吸引新的贡献者,以及那些新的贡献者有没有流失。

外部使用者数量

每个开源项目应该有一种方法对生产环境中采用软件的组织进行追踪选择。无论它是通过一个 ADOPTERS.md 文件还是通过自述文件中的一个简单列表,关键在于追踪此列表并确保其随时间发展。如果外部使用者的数量停止增长或减少,它可能预示从项目成熟到项目过时。

创建或贡献的项目数量(整体项目范围内)

追踪您组织发布每一个项目的指标,同时也要追踪您的开发人员积极参与贡献的项目。在制定开源战略的过程中,您应该已经识别了贵组织正在使用的关键业务项目,并预留了专用资金投资于为这些项目做贡献。贵组织开源项目的成功与否不仅要以开源项目的质量进行衡量,还要以其开源活动整体来看,这是非常重要的。这包括了您的产品开发和业务运营所依赖的项目质量,也包括了确保贵组织与您使用或发布任何项目的开源许可证在法律上保持一致。(请参阅我们的开源合规项目出版物

其他追踪指标

基本的项目指标是一个很好的开端,由它来帮助您把控开源贡献。但成功的项目负责人需要更深入地了解其他重要指标。

这里有许多可以也应该追踪的其他事物,这取决于您的目标。请记住,数量本身不是目标——是持续追踪它们的过程和寻找数据模型的过程可以显示项目和进程的改进。

单独衡量每个项目,并对项目进行横向衡量对比,以获得对于项目的产出与结果的全面的看法。

  • 受欢迎程度/认识度
    • 项目网站的访问者
    • GitHub/GitLab 上的粉丝总数
    • 社交媒体帐户(如 Twitter、Facebook 或 LinkedIn)上的粉丝数量
    • 新闻剪辑和媒体报道
    • 组织和举办的 meetup 数量(例如,通过 meetup.com 网站)
  • 影响
    • 在战略项目中担任维护人员/领导者角色的员工数量
  • 项目贡献者的多样性
  • 补丁被拒绝的原因
  • 采用
    • 下载量
    • 建立的分支数
    • 贡献的外部公司数量
    • 采用的阶段(#PoC 和生产中的部署数量)
    • 商业依赖性(产品)的数量和质量——这可以通过查看为您的项目做贡献的公司或关注新闻与贸易新闻来追踪。
  • 项目成本
    • 员工:工程师、公共关系与市场营销、法律工作人员
    • 基础架构与支持
    • 工具
    • 出席会议与商务旅行
    • 培训
    • 会员资格与捐助

结语

团队以任何对它们的需求最有意义的方式来评估它们的开源项目、开源计划和开源贡献。最重要的事是要记得制定一个战略和增量目标来实现。而您该追踪什么以及如何追踪,将会自然而然地遵照战略和目标。


TODO Group

这些资源是与 TODO(Talk Openly,Develop Openly)组织合作创建的, 该组织是 Linux 基金会中专业的开源网络组织。特别感谢奉献自己的时间和知识来制作这些综合指南的开源项目负责人。参与制作的公司包括 Autodesk、Comcast、Dropbox、Facebook、Google、Intel、Microsoft、Netflix、Oath(Yahoo + AOL)、Red Hat、Salesforce、Samsung 和 VMware。如想了解更多信息,请访问:todogroup.org