我们如何基于信任建立工程文化,使我们能够难以迅速地移动,而无需代码审查。
在Raycast,我们不需要代码评论。工程师推向主要分支机构,并在他们认为它的情况下申请审查'在这个博客文章中,我概述了我们如何建立基于信任的工程文化,并让我们快速地移动。
当宠物和我开始射频时,我们坐在同一个平坦的彼此三个月。每天,我们建立了功能尽可能快地迭代的功能。此时,我们盲目地审查并相互信任。如果有技术问题,我们将其解决了它,将代码提交给主分支机构并转移到下一个问题。
当我们开始成长我们的分布式团队时,我们向自己询问,如果我们应该通过代码审查。常见的智慧告诉您,提取请求是高性能工程团队中的最佳实践。但我们喜欢我们的信任,合作和速度;过程"并决定不需要代码审查。相反,每个工程师都有权将其更改推向主分支机构。如果他们希望别人拿另一个看他们的代码,他们可以申请审查。有时会发生这种变化在树干中落在后备箱后。
我们使用GitHub进行源代码控制,附带拉拉请求(PR)的概念,用于代码评论。通常,工程师在任务上工作,然后提出对存储库的更改。在讨论和潜在的变化之后,工程师将其更改合并到基本分支中。此模型适用于开源,使陌生人能够为项目做出贡献。但是,我们为我们的团队发现了几个原因:
拉请求劝阻信任。提出每个代码的改变,其他人必须批准并对应该以高度信任的团队进行鼓励。有更有效的方法可以在代码上进行协作。
拉请求Don' t防止错误。查看代码很难!你可以抓住明显的错误,但你赢了一致的深入审查。许多问题只有在广泛使用之后才能揭示自己,这在代码审核期间不会发生。我们依赖于用户反馈的快速迭代。
拉出请求减速。代码评论aren' t的高优先级为工程师。他们必须花时间清理他们的评论队列。实际上,PRS是一个事后的想法,而不是你想要作为工程师的时间。
我们重视全部责任,我们的所有工程师都拥有从想象中的维护功能。我们的工程文化通过为工程师提供推动到主要分支机构的自由来反映这一点,并且只有申请代码审查他们认为是'
我们的目标是Dogfood尽快改变。为此,每个人都在主要分支机构上工作。这产生了可以由其他人立即测试的恒定的变化流。我们的持续集成构建并测试每次提交。此外,我们每天晚上都会触发内部释放,其中包括在白天犯下的所有变化。每个版本都会自动为整个团队安装。这使我们可以在24小时内测试新的更改。
每日内部版本使得收集许多反馈来耗尽错误或可用性问题。如果团队对功能的质量感到满意,它将作为下一个公开发布的一部分发布。如果需要进一步的迭代,我们使用一个功能标志来保持内部。此工作流程可帮助我们每隔一周一致地发货。
侧面注意:我们使用rebase而不是合并来保留一个更清晰的项目历史,并消除不必要的合并提交。
当我们要求代码评论时有一些情况。如果我们触摸CodeBase的新部分,我们会打开拉出请求。这种更改的一个很好的例子是第一次添加数据库迁移。没有人想搞砸生产环境,而是仔细检查它。通常,新团队成员请求代码审查的前几周熟悉我们的代码库。随着时间的推移,他们有信心努力更大的变化,并开始直接推向主要分支机构。
它不会始终是公关。有时它' s足以使队友意识到与A&#34的特定变化;后发表消息"在某人致力于改变之后,他们将相关人员链接到订阅我们的存储库的松弛渠道中,或者在GitHub本身上的提交上。这对于可能影响他人工作的变化是有用的。这也是避免由于时间差异阻塞代码评论的好方法。如果有一些需要输入多个工程师的问题,我们跳过快速的视频通话并使用屏幕共享来协作。这很方便地对诸如CodeBase的重构部分或对齐彼此的功能来进行整理更大的主题。
我们发现这种工作方式更加有效。它避免了在长期分支上孤立的工作,并通过连续更新应用程序创建势头。
每个公司或团队都不同,但有一件事是一样的:他们都希望在最短的时间内在最短的时间内建立最好的产品。有不同的方法来实现这一目标。我们的是打赌我们的团队,并为所有工程师提供信任,以尽最大的工作。这包括让他们决定每当他们想要其他别人审查的代码时。这可能不是其他团队具有更严格的安全要求的正确进程。到目前为止,这对我们来说很好。它允许我们迅速迭代特征,吸引想要解决大问题的伟大工程师,并建立一个适合我们完全分布的团队的异步通信文化。
它'由您和您的同事设置团队的规则。 Don' T以教条时尚采用最佳实践。相反,如果其他人的情况适用于你,请问问自己。他们赢得了很大的机会,他们赢得了' t,你找到了更适合做事的方式。