我不知道你上周工作做了什么。即使我想知道,也无从得知。
但是,如果你对此足够好奇,你可以确切地了解我从周一到周五所做的一切。
例如,在 2016 年 8 月 31 日,我向 Reaction Commerce 的主代码仓库 的各个分支提交了 3 次代码。其中两个通过了测试。一个失败了,我不得不回去修复错误。几个月前,我花了一整天的时间修复我们即将发布的版本的 lint 错误,而今天,我修复了一些与我们的平台相关的 i18n 翻译问题。
不过,你不需要我告诉你这些。那是因为我每天所做的一切,都 对全世界可见,可以在 GitHub 上看到。
我们确实有一些私有分支,我偶尔会在上面工作,但除此之外,我的大部分工作(以及 Reaction 的所有其他开发人员的工作)都在那里供你查看。
这令人感到畏惧。这令人感到欣慰。这很有趣。这令人感到害怕。
这是我第一次为开放组织工作。在加入 Reaction Commerce 之前,我曾在 Media Temple 和 TTPM 工作,这两家公司都是闭源软件公司。这对我来说是一个挑战,但由于开源的透明、互联和协作的特性,我已成为一名更优秀的开发人员和沟通者——而且我每天都在学习很多东西。
以下是我从全职从事开源工作中学到的一些独特经验。
绝对透明是绝对的
你可以从 我的 GitHub 活动 中了解我很多。
例如,根据我的代码提交时间,你可能会注意到我是个夜猫子。你可能还会注意到,有两周我没有为该项目做出任何贡献,因为我在休假。你可以看到我编码最多的日子,我为此感到自豪,但你可能会认为,“这没什么!”我的生计任你评判,所有这些都不需要我的参与。
这是一个可怕的想法。想到未来的任何潜在雇主都掌握着我每天所做一切的完整记录,这也令人感到害怕。
在封闭环境中,很多事情都在暗中进行。它们在小团队中讨论,或者根本不讨论,只要它有效,就不会受到质疑。
但是在开放环境中,我不能热修复代码。如果需要更改一行代码,我有责任通知社区并告诉他们我在做什么。我创建一个 issue,创建一个分支,发起一个 pull request,然后联系团队成员将其合并。我们所做的一切每天都会影响成千上万人。每个变量的更改都可能导致商店崩溃。
学习完全透明一直是一个挑战,但我相信这使我成为更好的开发人员,我学会了记录我们的想法,并强迫自己看清我在做什么。几个月前,我从一个意外从错误分支创建的分支发起了 pull request。这是一个每个开发人员都会犯的简单错误,但我的错误将永远留在 Reaction 代码库中供所有人看到。我不得不公开解释,我为什么要删除一个分支,以便在另一个分支中进行相同的更改。哎呀!
还有一个问题是,我的工作习惯和贡献是无拘无束的——有时甚至是无法辩解的——可见的。在封闭环境中,我的直接经理通常是唯一了解我日常活动的人。如果其他人需要知道,我有机会解释我在做什么。但是在开放环境中,一切都暴露在外。
全天候可用性既有回报,也令人沮丧
在封闭环境中,你很少需要帮助任何人处理你软件的代码库,因为他们根本无法访问它。问题在工作时间内在内部解决。
但是在 Reaction,我们的代码库对所有人、在任何地方都是可访问的,我们的公共聊天室也是如此。因为我们是 24/7 开放的,所以世界可以在任何时候向我们提问,我们需要回答。有时,当出现问题时,我们会帮助商店恢复在线。有时,我们会花几个小时帮助某人首次安装 Reaction。
身边有人你会知道他们会回应,这很棒。但是,当你需要快速回复咨询时,24/7 连接可能会造成干扰,尤其是在你思路流畅的时候。不过,你专注于构建的产品最终是为那些你正在帮助的人服务的,所以你不得不打断自己。另外,我想说我们的社区已经足够了解我们的习惯,他们知道我们的可用性,因此他们会相应地控制他们的期望。
很高兴看到人们在我们的聊天室里说“谢谢!”的次数。我曾经处于事情的另一端,那时总有人不在,所以我真的能体会到我们贡献者的感受。
协作带来发现
在封闭环境中,你有一个团队一起工作,而且这个团队很少改变。决策、失败、胜利都在这个团队之间分享,通常到此为止。我经常想到我们自己的 Sara Hicks 的这句 名言:“开源开发可能就是最高的协作体验。”
我们在 Reaction 拥有一支令人惊叹的核心团队。但实际上,我的同事实际上是每个曾为 Reaction 做出贡献 的开发人员。无论你修复了一个错别字(顺便说一句,这是我的 首次贡献,早在我被聘用之前)还是贡献了 整个仪表板功能,每一次贡献都使 Reaction 成为今天的样子。
走出舒适区,并不断收到来自数百个国家和背景用户的反馈,这非常棒。你学会了与你通常的工作方式完全不同的做事方式——但仍然能达到相同的结果。与此同时,当我们要对我们的产品进行更改时,有这么多人在参与会引发深刻的思考。这可能看起来像狂野西部,但我们花了很多时间讨论我们应该如何以最佳方式做事。协作让你对未来进行深入思考,这对于像 JavaScript 这样瞬息万变的事物来说非常重要。
一年多来,我们多次更改了编程语言和环境。现在,我们正在将我们的 UI 代码库从 Blaze 模板转换为 React。我相信我们的数千名开发人员都是如此,但在当时,我不懂 React。我一路学习,首先更新了我同事 Mike Murray 的一些现有组件,然后,随着每个新版本的发布,我自己也制作了一些组件。现在我已经有几个月的经验了,我感觉可以自如地帮助我们代码库之外的其他人了。
这些都是巨大的变化。在闭源平台上工作,这些选择很容易做出,并且可以在开发人员团队之间决定。但是在开放组织中,这些都是会影响成千上万人的重大决定。这会暂停剧烈的决策。切换到 React 意味着我们必须相信我们的社区会了解并希望使用 React。我们必须解释为什么我们选择 React 而不是 Angular,LESS 而不是 SASS,Mocha 而不是 Jasmine,以及两个空格而不是四个空格的制表符。这可能会对生产力造成挑战,尤其是在我们有截止日期的情况下,但是一旦我们达成协议,我们就可以确信我们获得了整个社区的支持。
结论
我永远不会排除回到任何闭源项目(并不是说我计划离开 Reaction!),但是在开源领域全职工作让我对事物有了全新的认识,我真的很喜欢。绝对透明性使我成为更好的计划者和开发人员。在实施想法之前、期间和之后都必须向世界表达我的想法,这改变了我的做事方式。全天候可用性既令人着迷,也让人感到压力巨大。最后,与不仅仅是核心团队,还有我们的 GitHub 社区一起工作,促使我们共同做出决策,并成长为一名开发人员。
我期待着在我们的开源社区中看到更多新面孔和贡献者,以及更多挑战。
1 条评论