光速不变

由Ansible的联合创始人兼CTO Michael DeHaan合着。 可能很多人听说过Ansible 。 对于那些没有的人,这是一个开源软件项目,从根本上简化了系统自动化的艺术。 在过去的一年中,Ansible在DevOps社区中非常受欢迎。 它是GitHub上最受欢迎的Python项目之一。 在GitHub上大约86,000个公共Python存储库中,Ansible 在星标中排名第6, 在forks中排名第3 ,使Ansible在Python项目中的受欢迎程度和潜在贡献率均排名前0.01%。 Ansible是目前在整个GitHub上排名第99的项目,每天创建数千个新存储库。 根据GitHub的说法,Ansible( 878 )的终身贡献者已经超过Chef( 345 ),Puppet( 324 )和CFEngine( 64 )的总和。

对于只有两年的项目来说还不错。

对于Ansible当前享有的成功,没有简单的路线图。 在一定程度上,成功的项目通过在正确的时间,正确的想法放置在正确的位置而成功。 但是,有一些关键的开源原则现在可以被认为是“久经考验的”。 开源世界中曾经的理论已经成为定义明确且可重复的实践。 在Ansible,我们从一开始就尽力遵循这些做法。

那么,这里有一些开放源代码实践,这些实践使Ansible在如此短的时间内取得如此巨大的成功。

使用GitHub

...但不只是关于GitHub。

在开源的早期,大多数项目都是围绕邮件列表进行的。 大多数讨论都是在清单上进行的,因为可以保证所有人都可以看到该文件,并且自记录讨论可以使决策过程更加清晰。 但是,一旦做出了这些决定,并且该提交实际的代码了,贡献者就必须学习为他们选择的项目做出贡献的具体机制。 因此,如果一个贡献者跨多个项目工作,他们需要学习几种不同的做事方式。

现在有了GitHub,有600万人使用它。 如果您的项目在GitHub上,则意味着无需任何特殊的魔术就可以为您的项目做出贡献,因为GitHub上的每个项目的工作方式基本上都是相同的。 在过去仅让用户弄清楚项目的贡献机制时,用户现在可以派生一个仓库,进行修复并提交拉取请求。 新开发人员的默认本能不再是“建议更改”,而现在是“解决问题”。

仅仅因为基础设施的存在使分叉变得容易,并不意味着所有的分叉都会产生贡献。 在Ansible,我们用来评估项目运行状况的关键指标是贡献者(占分叉的百分比) 。 这是GitHub上五个最受欢迎的项目以及Ansible的贡献者所占比例:

twbs / bootstrap:71,079星/ 26,488叉/ 573位贡献者(2%)
jQuery / jQuery:31,528星/ 7,234个叉/ 196个贡献者(3%)
joyent / node:31,499星/ 7,023个分支/ 544个贡献者(8%)
mbostock / d3:29,377星/ 6,729叉/ 77位贡献者(1%)
angular / angular.js:27,566星/ 10,040叉/ 936位贡献者(9%)
ansible / ansible:7,251星/ 2,227叉/ 846位贡献者(38%)

(截至2014年8月18日的所有统计信息)

如果像发布请求请求的欢迎垫那样简单,那么所有这些较大的项目都会有成千上万的贡献者。 取而代之的是,大多数项目,甚至是成功的项目,都对捐款做出了明确的限制。 拥有支持贡献的基础架构至关重要,但是构建一个能够做出巨大贡献的项目超出了基础架构的选择范围。

围绕模块化和选项价值构建架构

2005年,哈佛商学院的Carliss Baldwin和Kim Clark撰写了一篇论文,题为“ 参与的体系结构:代码体系结构会减轻开源开发模型中的自由骑行吗? ”在本文中,他们观察到开源项目具有两个特定的房地产更有可能获得并保留贡献者。 这两个属性是高模块化和高期权价值 。

模块化很简单。 具有高度模块化的代码库提供了平台和模块的简单框架。 该平台支持模块,并为模块开发提供了定义明确的规则; 然后可以根据那些规则独立开发或修改模块,从而使贡献者可以用最少的投资在项目的各个角落增加价值。

选项值稍微复杂一些,但可以在模块化的背景下轻松理解。 在高度模块化的框架中,某些模块显然会比其他模块更好。 甚至可能会有设计成执行类似职责的竞争模块。 具有高选项价值的高度模块化项目允许用户选择某些模块,而不能选择其他模块,甚至可以重写特定模块。 不必使用整个工具集,而是从各种各样的选项中进行选择和选择,可以增强此价值。 更多的选择意味着随着时间的推移,更多的容忍不确定性的能力。

因此,具有高选择价值的模块化设计使用户可以立即确定出资方式,并快速查看该出资额。 没有比成功的贡献更能推动成功的贡献了-这正是Ansible所做的。 在Ansible的库中浏览时,可以找到230多个不同的模块,其中大部分是由多个社区开发人员共同开发和共同维护的。 Ansible的“含电池”理念有助于确保在开发新模块时将其测试并集成到Ansible的核心中,从而使最大数量的用户能够以最小的集体努力获得最大的选择价值。 回馈共享公地的价值也得到了增强,创造了不朽的贡献,而不是定制开发的解决方案中常见的最终腐烂和替代。

通过设计模块化和选项价值,Ansible确保用户可以在短时间内做出对自己和他人具有永久价值的贡献。

为首次体验进行优化

允许AnsibleSwift传播的一件事是,产品和文档均经过了优化,以实现最快的成功首次体验。 轻松的安装体验和文档中的友好介绍有助于为新用户创建一个“浅端”池,新用户可以进入池中,而不必首先钻入深端池。 用户可以在午休时间尝试一些东西并了解它, 然后学习剩下的东西,这一想法是开源软件成功的关键因素。 太多的项目不必要地失败了,因为它们不投资这个关键的想法。

如果GitHub项目仅以五行README和任意代码存在,则它可能会在一小部分开发人员中幸存下来,但是广泛的用户采用将是遥不可及的。 这又限制了开发人员的数量,因为许多最佳贡献来自将用户转换为开发人员。

在开源中,成功是病毒。 发现新项目本质上是一个潜伏期,在此期间用户可以试用该项目。 如果体验是好的体验,那么用户会“发烧”并与朋友“传播”该项目,从而创造更多的用户,进而创造更多的开发人员。 Ansible的病毒式传播成功很大程度上是由于我们的潜伏期短和转化率高所致,而Ansible几乎从未杀死其宿主。

针对首次体验进行优化超出了用户的首次体验; 它也扩展到了开发人员的初体验。 这就需要一个有据可查的开发过程,以及为使新贡献者更容易而做出的有计划的努力。 必须检查代码的可读性和技术准确性,并应避免使用巧妙的代码技巧,而应使用易于被大量人员更改,编辑和理解的代码。

收集数据并据此做出决策

Ansible的出现是因为我们认识到一种模式:尽管这些工具之间存在明显的共性,但用户仍抱怨需要学习多种自动化工具。 当一种工具可以完成这项工作时,为什么要使用单独的工具来进行云配置,配置管理,业务流程和应用程序部署?

随着项目的发展,识别新兴模式并对其采取行动已成为一项关键技能,而这些模式只有通过不断收集和分析数据才能出现。 在Ansible,我们有多种收集用户数据的方式,并且我们积极收集和分析数据。 错误报告,IRC交互,邮件列表线程,Twitter注释和用户调查都提供了驱动关键决策的关键数据点。

仔细收集数据的最重要优点是,它可以让您聆听正确的用户,而不仅仅是聆听嘈杂的用户。 如果仅听取嘈杂的用户的声音,则会增加您构建错误内容或针对少数(而不是多数)进行优化的风险。

交流,交流,交流!

在管理任何大型项目时,沟通都是至关重要的,而且没有办法解决它-不幸的是,许多开发人员只是不喜欢以代码以外的任何方式进行沟通。 但是,对于用户和开发人员来说,回答问题和编写文档都是必不可少的活动。 项目越简单,所需的文档就越少,但是仍然需要文档。 文档越好,需要回答的问题就越少-但是仍然有必须回答的问题。 这就是为什么过分地重构和重写文档以及在邮件列表和其他地方进行过分的通信占用了Ansible早期项目时间的50%的原因。 时间的投入对于Ansible的快速增长至关重要。

在任何试图整合许多不同观点的大型项目中,都会存在正确的做事方式的分歧。 并非每个拉取请求都合适,也不是每个错误报告都有用。 以正确的方式说“不”比说“是”更为重要。 即使您正在拒绝他们的贡献,也很难花时间使贡献者感到被重视,尤其是当管道中还有其他数百个贡献时。 我们最近已标准化了对常见问题的回答,以确保即使我们达到了史诗般的规模,我们也总是让我们的贡献者知道他们的贡献是多么重要。 沟通可以快速而又简洁,并且至关重要的是,要快速而真诚地沟通,Ansible如何依赖其贡献者,以及我们多么感激他们。

我们还就优先事项进行了强烈的沟通。 我们要弄清楚我们现在正在做什么,以后要做什么,以及为什么我们以决策的方式做出决定。 随着时间的流逝,就这些事情进行交流可以使社区以统一的视野和声音继续前进,并且该项目发展出可预测的脉搏。 通过观察过去的工作方式可以预测未来。

成功是一系列深思熟虑的选择

在过去的20年中,开源开发的方法已经走了很长一段路。 Linux内核团队花了11年的时间才能在一个月内获得100位贡献者。 花费了Ansible两年的时间。 当然,Linux社区必须在进行过程中补充方法。 Ansible团队受益于多年来研究和参与Linux和其他开放源代码社区的经验。

最大的一课是,它远不止开源:卓越是一种习惯。 你习惯性地做的事情就变成了。

在Ansible,建立社区是我们最根深蒂固的习惯,以多种方式表达出来。 代码库的体系结构,日常交流,着重于数据的收集和处理以及对新用户的最初体验的不懈关注:这些习惯已导致许多贡献者和拥护者齐聚Ansible。 当我们与社区合作以迎接新挑战和新方向时,这些习惯将继续驱使我们。