开源项目管理的成功秘诀
这篇文章是微软 web 开发系列的一部分。感谢支持我们的伙伴们,是你们让它成为了可能。
今天我想要从我的帖子中改变一些事情:不是去代替技术布道的话题,而是希望分享如何运行一个开源项目。
两年多来,我的朋友 David Rousset 和我领导了Babylon.js项目。我们开始这个项目是在听说IE11将支持 WebGL(Microsoft Edge会支持更多)之后,我们想让人们更容易地构建 3d 场景和游戏。之后的两年,我几乎花费了我所有的业余时间去构建 Babylon.js,让我成为一个简单而强大的 Web 3d 引擎开发人员。
奇妙之旅的开始
在最初的 2 个月里,它如同梦一般:你开发着,并赋予你所有的想法以生命。它是纯粹的幸福。
这一阶段我称为预赛。就像在恋爱中一样,这是最好的时期,在把它带入可能出现困难的严重境地之前。
发布是重要的。讲真的。我仍然看到许多项目在开发的阶段停滞多年。我知道这很艰难,但发布你的项目很有必要。
在某个时间点,你已准备妥当,或者你自认如此。
我和戴维很快就遇到了第一个挑战:编码这个产品是不够的,你还需要在沟通上下功夫。我们编写并商定了希望发布的关于 Babylon.js 的文章,想要发表的论坛,为了展示它而希望参与的事情,等等。
来自网络开发社区的反馈是强烈的。其中一个原因是,我们与一个天才的设计师(Michel Rousseau)共事。他不止帮助我们发布了一个框架,还开发了巨量的三维场景来展示人们可以用我们的工具实现些什么。
这是第一个要诀:开发一个框架只是工作的一半。让人们知道这个框架存在,以及为何他们应该关注它是另一半 - 更为重要的一半。
这是第二个要诀:有一个伟大的框架是不够的。你必须提供许多例子,并专注于拥有某些非常牛逼的例子,让开发者印象深刻,以期深入了解。
小狗综合征
我第一次听说这个概念是在 2012 年 dotjs 会议,源于 @fat
当你是世界上最快乐的开发者的时候,有一件奇怪的事必然会发生。它开始很是微妙,但很快就会变得更加繁琐。用户反馈将成为压倒一切的要求:
-
一些用户开始行为怪异,要求越来越多的功能,你需要坚定或说明原因,为什么你不支持或不打算支持这些功能。永远记住,更多的功能意味着更多的工作,也意味着使用者有更多的选择。一个用户眼中的伟大创意会被其他人视为负担与烦恼。
-
人们请求你修复他们的代码,从而独占你的时间(并阻止你完成项目上必要的工作)
-
其他人会要求你完全改变框架来解决他们的需求,无视你的愿景和你想借以实现的。
这是小狗综合症!这是你可爱的、每天用爱和奉献亲抚的小狗,变异成你几乎无法控制的怪物。
这是你工作中最复杂的部分。你必须坚持你的愿景,但你也必须要迁就,来迎合用户的需求。这时候运用你的常识!
这个阶段会花很长时间,你需要沟通良好,在用户群中寻求盟友。由这些盟友,你可以形成一个社区,带你进入下一阶段。
社区的发展
你可以拥有全宇宙最好的产品,然而如果没有用户,你就一无所有。这就是为什么我逼着自己遵循以下 12 条法则:
1.准备好不要在开发你的产品上花大量时间。
2.准备好在产品宣传上花费大量时间。
3.从不遗留未解决或未回应的问题超过一个工作日。
4.从不遗留在论坛上未回应的问题超过一个工作日。
5.每天登陆论坛,展示给用户论坛的活跃状态(是的,在一开始这是一件累人的工作,但这很重要——没人在空白墙上写字)。
6.推特你在做什么。
7.有一个公开的路线图。
8.询问用户关于路线图的反馈。
9.拥有一个用户之声(http://babylonjs.uservoice.com/)。
10.友好待人,不要傲慢。你需要他们远比他们需要你。
11.寄希望于一个像样的文档编制系统:我知道你们讨厌写文档,但是这是你工程强制性的一部分,我们花了很多时间在http://doc.babylonjs.com/上,把它变得更漂亮,易用,以社区为导向(文档编制本身是一项社区可参与的 Github 工程)
12.准备一个简单的边干边学的方法,对我们来说这真的是重要的一点。我们创建了http://www.babylonjs-playground.com/ 使 web 开发者不用安装任何东西就可以可以测试babylon.js。减少所有的阻力很重要。我们都很懒而你如果能够移除全部障碍,那么你将使更多人尝试你的框架。正如 jsfiddle,也是一个与他人分享代码的方法甚至更简单地提供 bug 报告。我们尝试通过增加一款出色的工具智能感知(intellisense)切实的使编译时更加方便。
关于论坛的题外话:我们刚开始在 GitHub 的 issues 上与用户沟通,但结果不如普通的旧式论坛方便。我要感谢 Richard Davey(photonstorm【译注:此为李察戴维的昵称】)主持我们 HTML5GameDevs.com 上的论坛。
这是所有关于关注用户的需求和问题。用户需要能够信任你的产品,并有维护良好的沟通渠道,赋予他们对你的产品的信心。你处理请求越快,你的用户就越有信心。这是如何建立你的框架的声誉的主要构件。只要你关心你的用户,你可以用比其他工具更少的功能开始。
社区的形成
如果你做到了支持你的社区,他们会提供给你美好的礼物。某些来自社区的人会美妙并充满说服力地开始回答其他人的问题——有的时候甚至会比你做得更好!当这第一次发生在我身上的时候,我哭了。
如果你足够幸运,你会拥有以下三种用户:
-
使用你的产品并问问题的普通用户
-
使用你的产品、问问题、并且回答问题的强力用户
-
使用你的产品、问问题、回答问题、并贡献代码的超级用户
这就是你旅程的终点了。现在起用户不需要你就能上传代码并做出美妙的事情。举个例子,在Babylon.js 的最新版本中超过 40% 的新特性都是由社区产生的
现在你已经成为项目的领导人物了,你需要给予方向、目标,并且保证所有的东西都是整齐一致的。
当我现在收到来自世界各地聪明人的 pull 请求,知道他们希望做出一个更好的 3D 引擎的愿望时,我仍会感到相同的愉悦。
结语
总的来说,从一个项目领导者的视角出发看起来像这样(图片由我的手©荣誉出品)
更多互联网开发的实践
这篇文章是微软工程师与宣传者在实际 JavaScript 学习、开源项目开发、协同工作(包括 Microsoft Edge 和新的 EdgeHTML 渲染引擎)中所著的互联网开发系列文章之一。
我们鼓励你使用这里免费的工具来进行跨平台和浏览器(包括 Microsof Edge)的测试。
通过工程师和开源布道者进行深入学习:
-
最佳交互性实践 (系列):
-
喔,我可以在Mac&Linux上测试Edge&IE (Rey Bango)
-
不影响网站运行的高级JavaScript开发 (Christian Heilmann)
-
使用WebGL解放3D渲染 (David Catuhe)
-
托管网络应用和网络平台革新 (Kiril Seksenov)
我们社区的开源项目:
-
vorlon.JS (跨设备远程JavaScript测试)
-
manifoldJS (跨平台网络应用部署)
-
babylonJS (简化3D作图)
更多免费工具及即将开发的网络应用:
-
Visual Studio Code (Mac, Linux,或者Windows平台的轻量级代码编辑器)
-
Visual Studio Dev Essentials (免费,基于订阅的练习及云)