原文 How Grammarly Engineering’s “Platform University” Helps Us Build Faster (https://www.grammarly.com/blog/engineering/empowering-engineers-build-faster/)
Grammarly 是一家诞生于乌克兰,目前总部在旧金山的公司。主要产品为用户提供了基于 AI 的实时拼写检查、语法纠错、写作建议,帮助用户提高写作质量并提升沟通效率。
Grammarly 的平台工程团队不仅专注于技术,还负责新成员的培训工作。这是因为团队致力于一个目标:确保每位工程师都能够通过平台的工具集,轻松地构建、开发以及维护 Grammarly 的所有产品。显然,工程师们一旦熟悉了这些工具,就能在整个开发周期中更加主动和独立。平台工程团队推出了平台学院 (Platform University) 项目,这是一个为新员工在刚加入 Grammarly 时设计的培训课程。该项目包含了我们精心制作和编纂的各种指南与教程,旨在帮助 Grammarly 的每一位成员迅速掌握我们所依赖的第三方服务、云托管,以及我们为各种基础设施任务自主开发的工具集的基础知识。因为我们采用远程优先的混合式办公模式 (https://www.grammarly.com/blog/remote-first-hybrid-work-model/),平台学院的资源能帮助工程师快速解决问题而无需依赖其他团队 - 这也减少了平台工程团队值班人员花费在 Slack 回答问题上所耗费时间!
为什么我们创立了平台学院
平台工程团队提供的服务范围广泛,包括众多自研工具。例如:一个自主构建的日志和指标汇总系统,使我们能够从成百上千的 Grammarly 应用中收集可观测性数据。
支持后端和前端服务交付的 CI/CD 基础设施,运行着成千上万的流水线。
用于创建已预置所有必要资源的云账户的自动化服务。
简化组织内部关于网络架构信息共享的 Slack 机器人和应用。
用于快速且可预见地启动新服务所需环境的模板工具。
- 本地及 CI/CD 中使用的 CLI 工具,用于管理和部署后端服务。
除了上述内容,我们还用了若干 SaaS 和自托管软件产品以及基础设施管理工具。平台工程团队围绕这些工具创建抽象,减轻了其他工程团队在开发和维护基础服务时的负担。随着组织的快速扩张,平台工程团队的 Slack 上收到的问题越来越多(我们在那里提供 oncall 支持)。于是,2020 年就萌生了打造一个自助式教育平台的想法。我们进行了深入调研,并让工程师们填写问卷,了解他们需要什么信息以及希望如何获取这些信息。最终我们在 2021 年 3 月推出了平台学院。平台学院是一系列在线教程,提供了关于使用我们的平台服务、自动化和管理工具的基本知识。通过文字教程和视频讲座,我们涵盖了各种主题,比如如何使用基础设施、维护已部署的应用程序以及设置监测工具。
我们的主要目标之一是避免工程师需要在众多文档中搜索信息。虽然迟早要深入到源文档中去,但平台学院提供了坚实的基础。把 Grammarly 开发工具和服务的所有必要信息都汇聚起来,并以清晰的步骤展示。一旦工程师掌握了基础知识,之后搜索和查阅文档就会更加容易和有效。
平台学院教授的内容
这个项目将工程师 Day 0 状态,逐步引导至准备好基础设施、部署完毕应用、设置完成监控工具的 Day 2 状态。
平台学院的教程解释了如何利用云服务或基础设施管理工具来管理云资源,更重要的是,探讨了如何在不同的使用场景中将所有工具和产品整合使用。通常来说,最好的学习方式是通过实践和试验。因此,我们还提供了一个特殊的实践环境,这是一个沙盒环境,工程师可以在其中自由实验,而不会影响到开发或生产环境。
我们如何确定工程师需要知道的内容?
在进行了广泛的研究和访谈之后,我们构建了一个「用户旅程」,可视化了工程师部署其项目并使之准备上线所需经历的每一个步骤。在此过程中,我们识别了痛点和未解决的问题。有了这些信息,我们选定了教程的主题,可视化表示法帮助我们将这些教程组成一个完整的用户旅程或小型项目,其中每个教程都是大画面的一部分。花时间构建用户旅程的另一个目的是为了准确地确定哪些过程可以或应该自动化。通过识别痛点,这张地图还帮助我们为其他团队构建了自助式解决方案。例如设置和配置 CI 运行器或日志存储现在已经实现了自动化,因为这些是用户和平台工程团队都觉得耗时的事情。
编写教程是一个挑战,没有一种方法适合所有人。我们的方法是让课程既轻松又具挑战性,同时确保每个教程都有明确的成果。教程串联成了一个完整的故事,让人感觉像是在进行一个完整的项目而不是零散的部分。但如果工程师需要深入某个特定主题,我们也提供了按服务或工具分类的更详细的文档。每个教程都有自己的学习目标、定义好的先决条件和下一步的步骤列表。这有助于用户每次开始或完成教程时都能保持上下文。我们提供代码片段和图表来解释重要部分,但不从涉及的服务(无论是自己还是第三方的)的文档中复制粘贴文本。相反,我们提供文档链接,以免教程解释过多。遵循着 KISS 原则(Keep It Simple and Straightforward),我们使用基本的标题,2-3 句话的段落,以及最少的的颜色/样式文本。
成果
简而言之,平台学院采用了开发者有运维职责和控制权的「你构建,你拥有」理念。当然,工程师不需要了解他们所构建的每一个基础设施或工具的细节。Grammarly 的平台工程团队负责将许多云中的工具和解决方案抽象化为一套易于使用的自动化工具和实用程序,使工程师能专注于构建。通过平台学院提供的教育资源,工程团队在以下方面受益:在部署任何代码前,对我们系统有一些背景知识可以帮助工程师从一开始就设计出更可靠的解决方案。
代码部署后,代码所有者能够满足自己的许多基础设施需求,如监控和扩展。这很重要,因为代码所有者最了解他们项目的独特需求。
工程师能够更快地响应事件 - 如果你了解某样东西的工作原理,你就更擅长故障排除。
- 工程团队获得更多自主权,减少了对其他团队的依赖,因此我们能更快地推出新项目和功能。
平台学院的另一个好处是,它使平台工程团队免于重复为不同团队重复解释同一主题,有机会专注于创造更多开发生产力工具!
展望未来
我们目前将平台学院作为新工程师的必修入职任务。他们不必阅读所有内容,但必须观看两个 20 分钟的视频,了解最重要的内容。之后可以自行学习教程,详细了解视频中提到的内容。结果是,我们显著减少了平台工程团队收到的重复和类似问题的数量。因为工程师可以更主动、更高效,我们几乎没有收到平台学院涵盖主题的问题。我们不断检测对教程的评论和反馈。每半年,我们会再次调调研工程问题和支持需求。然后利用这些结果对平台学院和平台工程团队提供的其他内部资源进行重大更新。在维护现有教程的同时,我们继续打造新的自动化工具,帮助工程师更快地构建软件和服务。我们还想探索和尝试新的教育方式。在 Grammarly 最近的 Hack Week (https://www.grammarly.com/blog/engineering/hack-week-2022/) 期间,开发了一个项目:通过 CLI 中的旧式文字冒险游戏呈现平台学院的主题。这个项目仍在开发中,但相信它能为教育过程增添乐趣🪀。