如果您在软件工作,这可能听起来很熟悉:一个工程团队一直负责设计和从头开始建立庞大的,高度可见的产品或系统。该团队主要是由新的工程师用更少的机构知识和技术负责人没有在这个特殊的领域很多经验。然而,有一个与领域知识和一些临时可用性的高级工程师。什么是他们可以帮助最有效的方法是什么?

通常是这样处理的:高级工程师来帮忙,但自己做大部分工作。他们编写了大量的新代码。它写得很好,但对于团队来说是陌生的,因为团队不了解为什么要做出任何决定——他们看到的是完成状态的代码,而不是达到这个状态的过程。代码被传递,现在它是他们自己的和维护。他们只是用领域知识的匮乏换取了自己代码库知识的匮乏。

让我们回到过去,高级工程师到达。如果不是编写所有的代码,他们在整个过程执教什么球队?他们成为球队的一部分了数个月,帮助创建门票,给建筑咨询,并有日常结对编程会话。该团队编写所有的代码自己所以有结尾没有切换。他们了解新的代码从上到下,而且他们在一般的写代码更得心应手。它们不仅能够更好地拿起一个项目,他们可以对其他开发人员的资源。在这期间,高级工程师已经越来越动手反馈,以帮助提高整个组织使用的平台工具,避免了平台上的“象牙塔”的心态。

这是辅助工程 -“建立伙伴关系与工程团队,以增加它们的速度和建设质量的持久的文化。”我们从随队的团队,为嵌入足够的时间,以帮助开发人员构建的习惯,因为他们建立一个MVP。

当时的想法是开发大约3年前乔纳森·比德尔亚历克斯Truslow对Python的平台团队,前端平台采用的模型,一年后。自此PHP,测试启用,并PartnerHome平台也开始辅助工程队,到今天为止,我们已经完成了数十个具有非常积极的成果交战。

我支付概念在所有辅助工程团队共享,虽然经验是从我的前端辅助工程的角度,着眼于JavaScript和反应。我一直都是去什么,我们呼吁嵌入视频(或约定)一年多,迭代与我的团队和其他辅助工程团队的过程。它在工程师和工程文化的投资。这是什么样子的做法?请继续阅读!

是什么让一个AuxEngineer?

自我描述的“谦虚专家好学,”我们各等份工程师,教师,导师和教练。而不是“你没有做你的工作做得不够好,”我们说:“让我们把你的技能,以一个新的水平。”我们在那里支持和跨Wayfair的工程组织成长能力。

我们会做大量的笔记,并寻求批判性的反馈,以改进这个平台。我们的约定给了我们一个独特的机会,让平台工具更好地为使用它们的开发人员所用。我们没有假设我们正在为团队构建正确的工具,而是直接使用这些工具,并自己感受这些痛点。这种做法已经发现了一些机会,导致我们赢得了一些最大的平台。

一个AuxEngineer需要在他们的领域深厚的技术功底,与人际交往能力和过程管理平衡。我们坚信,在成长心态,我们使用普通回顾反馈和发掘自己的盲点。

什么是一个嵌入样子?

之前:审批过程

有团队与我们联络(而不是我们接近他们),所以我们知道他们是在船上,我们的过程是很重要的。他们应该知道自己想要得到的参与,即交付和一批精通多开发商什么。团队提交他们会的建设项目建议书后,我们经历了面试期间作出的承诺,一个团队,以确保我们的目标和时间表对齐前。我们评估基于一些标准的项目,包括:

  • 业务价值- 没有产品本身提供可衡量的价值?
  • 技术价值-该项目对平台和工程组织具有战略意义吗?
  • 交付- 什么将我们在项目结束时显示?
  • 时间线- 非常紧迫的期限不理想,建立习惯需要时间。我们要确保重点是不断增长的开发人员和不急于产品出了门。

我们也很喜欢,以满足个人开发者,并确保他们都在船上。我们将最密切的他们如此有自己的买入是非常重要的合作。

一旦我们接受了一个提议,并且两个团队都同意共享目标文档,我们就可以开始工作了!每个人都有自己的工作流,所以会有一个介绍阶段,在这个阶段我们会熟悉每个开发人员和他们的流程。我们搬到了他们那里,从周一到周四全天工作。周五,我们回到平台团队,写下笔记,为下周做准备,并将任何可操作的反馈整合到工具或文档中。

在什么球队都报名参加

从JS专家知识转移- 这应该是显而易见的是其手头居民JS专家能给球队在速度一个巨大的推动。少搜索堆栈溢出,较少通过内部文档梳理。但有一间JS专家的真正价值在于你得到的不仅仅是答案。我们将提供一个更深入的了解,并帮助开发人员构建因为他们的工作一个强大的心理模型,这有助于维持能力,我们离开后。

前期软件设计-嵌入是3个月长的承诺。团队正在打造一个新产品的MVP,所以软件设计是重中之重。这些应用程序可能要维护好几年,所以我们强调干净灵活的设计。产品的需求会不断变化,所以我们在设计时要牢记这一点——最终的设计永远不会是最终的。我们认识到我们不会预测所有的事情,并且我们允许实现本身向初始设计提供反馈。

我们还与门票估计帮助,确保:

  • 所有开发商都参与了评估
  • 我们给比例输入,不是规定的估计
  • 票具有良好定义的范围和验收标准
  • 单位/集成测试都包括在每一个功能票

结对编程- 共同定位与球队的手段,我们可以通过转移大量的知识结对编程。我们主要是对的导航仪,即我们解释我们要完成,他们编写的代码。随着他们变得更加舒适的新课题指导我们变得不那么明确,宁愿过直接回答诱导性问题。

这是繁重做,对我来说是最有趣的部分。配对是高度动态的,不同与每一个人。有需要发生,使其生产给大家一些社会导航。我喜欢这个来自参与这部分的挑战和奖励。

自动化测试- 我们的一个要求是,小组同意编写测试的过程的一部分。We consider automated tests an integral part of a healthy codebase, and since many teams don’t have testing integrated into their workflow, we’re clear that this can incur a short-term velocity hit as developers learn the tools and get into the flow of testing.

这是所有的服务“走慢走的快”,而它的直觉相反,编写代码_and_测试将加快速度,它的作品,因为“速度取决于稳定“。随着我国加入指导测试工作流程,无论是开发者和利益相关者看到,它提高了速度,并具有烤成的过程中经过严格测试的代码。它给开发商的信心,在其应用和信心做出改变。根据我们的经验,测试使重构和帮助发现错误代码更易于他们去生产之前。这是常见的听到这样的话:“我不知道这些东西互相影响,直到测试爆发!”

体积小,频繁展开时- 这主要是为了减少对开发商和评论家都认知负荷。对于开发者,小频繁展开时意味着部署一个功能,或者做一些离散变化 - 甚至只是一个!类似于单一职责原则,部署只有一件事提供各地部署的效果会是怎样更清晰。较小的PR意味着更少的审核疲劳的变化更直接的了解,抓住并固定更快的错误。

现场代码审查-我认为代码评审是学习和在团队中工作最重要的工具之一。现场实践是传播最佳实践、团队决策以及在留下评论时建模所需的软技能的一种很好的方式。通过观察领域专家的评审,我得到了一些很好的见解,所以这允许我把经验传递下去。我们设置了一些基本规则来强调心理安全,例如“假定动机良好”和“评论时就像作者在房间里一样(他们可能就在房间里!)”。没有人试图摧毁任何人。初级开发人员可以通过让更资深的开发人员检查他们的代码来学习,但是通过转换角色,更初级的开发人员将会暴露在他们不可能看到的模式中(而且还可能捕捉到一些bug !)

实时代码评审也让我们有机会包括邻近的团队,扩大我们的影响力,因为我们通常与不超过5名开发人员的团队合作。我们可以见到邻近的团队成员,让他们知道当我们有额外的带宽时,我们也可以作为他们的资源。

之后:以团队建立持久的关系

我们衡量所推出一个成功的产品的成功,也通过长期的代码质量和习惯。之后每嵌入我们设立了3个月的检查中看到:

  • 如何舒适他们维护自己的代码
  • 他们是否能保持速度
  • 如何测试帮助,或者他们是否已经造成任何摩擦

因为我们看的指标并不总是立竿见影,我们渴求的批判,寻找在那里我们可以改善和暴露我们的盲点区域。我们要嵌入过程中获得尽可能多的反馈,可以改善我们正在做的事情的长期影响。

赢,赢,赢

主队从订婚得到最明显的好处,但是辅助工程模型具有全线好处。

如何主队优势

  • 软件架构
  • 扩展访问与深厚的领域和机构知识的平台工程师
  • 建立持久习惯 - 编写测试和小,频繁展开。
  • 置身于新的模式和技术

如何在公司利益

我们就像被雇佣的顾问,但是对工程组织的长期健康有着既定的利益。

  • 健康的总体代码库
  • 更多的测试覆盖率
  • 最佳实践交叉授粉
  • 发展我们的开发人员
  • 动手的平台反馈,以确保我们正在做正确的工作,使开发人员

如何AuxEngineer优势

这项工作对嵌入式开发人员来说是一个令人兴奋的挑战。这是一种强烈的体验,被期望成为各种主题和技术的常驻专家。

  • 有两个功能和平台团队中的影响
  • 与代码库的许多不同部分工作
  • 身为教练/导师奖励
  • 对企业直接的影响
  • 高挑战,高增长

我学到了一些东西

心理安全是成功的关键

其中最重要的会议是非正式的介绍单对单的人与每一个开发者。对于我个人的过程中,我想知道他们的背景,具体的东西,他们希望工作或学习,他们为乐趣做什么。我们的一个既定目标是建立与这些球队持久的关系,这与开始信任和心理安全。对于个人知道,我们是有帮助和支持他们是非常重要的。

我经常被问到的一个问题是“那么开发人员对您在那里有什么感觉?”“在我所有的嵌入过程中,我只觉得受到欢迎,我把这归功于从一开始就建立起的信任。

这不是我的工作知道的一切

该专家知道这个想法一切有害的原因有几个。首先,这是不现实的——没有人知道所有事情的全部。也许,更重要的是,这种心态认为知识是静态的。即使是专家也总是在学习和成长,这一点很重要。

我的工作要弄清楚我怎么能在你的知识填补空白。如果我在同一区域内的知识差距,它是那么我的工作,以填补这一空白,并消除障碍为您服务。这可能意味着研究,发现谁做的人知道,或者开发自己的解决方案。

我发现随着时间的推移,它实际上更有利于开发者看到你走过了你不知道的工作,因为不舒服,因为它是。这表明,即使是资深的开发人员的知识差距,并拉回到我自己的调试或通过一个未知问题的工作过程的序幕。

我们相处过程中一个独特的视角

有几十个工程队在Wayfair的。通过与该组织的所有不同地区的团队合作,我们得到的所有不同种类的过程中开阔的视野。我们看看有什么效果,什么不,我们可以交叉授粉的最佳实践和流程改进。

给一个人一个答案,你解除他们一天...

我一直有打的冲动,直接给出答案。我不得不提醒自己,我们的任务是长期的可持续性,并且为开发人员提供答案将只在一瞬间帮助。这是更具冲击力的问引导性的问题,并帮助开发者在自己的解决办法。这是更有价值以自己得出答案,并更容易坚持。

技术支持支持

辅助工程可以是一种强烈的体验,所以我们互相依靠,互相支持。我们是一群半游牧的人,所以定期联系彼此很重要。我们从周一嵌入到周四,然后在周五“回家”与平台团队进行交流。

做一个出口

因为我们和每个团队只有几个月的时间,所以我们有很短的时间来提高他们的技能,让他们在离开的时候更加自给自足。成功的一个标志是当我们能够平稳地从主队过渡到他们几乎没有注意到我们的消失,就像本垒打消失在灌木丛中。在与优秀的人经历了一段时间后离开是苦乐参半的,但有限的时间让我们更加专注于订婚。当它结束的时候,没有什么比看到一次成功的发射更值得了,也没有什么比看到工程师的影响力更大了,他们通常是其他人的资源。

你可以聘请专家,或者您也可以增长他们。对于一个公司Wayfair的大小有一个巨大的潜在专家的数量,并从我在这里看到的,很多人用驱动器级了他们的技能。辅助工程是一个积极的,动手的方式投资于我们的开发商,发展我们自己的专家,以及不断提高的吧。

感谢您对本文的宝贵意见:

弗朗索瓦·沃德

附庸风雅Buldauskas

亚历山大·布林

乔纳森·比德尔

照片由马文·迈尔https://unsplash.com/license