构建以质量为中心的研发文化以驱动创新

  • 张龙

2013 年 12 月 25 日

话题:语言 & 开发架构文化 & 方法

Aviran MordoWix后端工程的负责人,同时也是一位持续部署的专家,拥有 20 多年的从业经验。他在多家初创公司与大型企业中担任过工程师和领导者的角色。近日,Aviran撰文谈到了如何构建企业的研发文化,介绍了实现这个目标所需的准备工作以及执行过程。

在 2010 年加入 Wix 时,我的主要职责是重建后端团队。那时,整个团队的成员基本上都流入到了公司的其他项目中,只保留下了一个成员,因此我面对的是一个全新的团队。

几个月后,在组建团队时,我们决定采用持续交付方法学。由于在转向持续交付以及重写整个后端系统方面遇到了很多挑战,因此我们需要非常优秀的软件工程师来构建一个全新的框架,并且要成为引领公司以开发为中心文化的先行者。

我们要创造一种以质量为中心的文化,主要从软件工程与成员责任心这两个角度来衡量。由于在快速发展的公司中,每个人都会对公司的文化产生深远的影响,因此这就会为招聘流程定下了一个基调。在加入 Wix 后,我一直都在招聘工程师,不过招聘是个巨大的挑战。我一直在寻找卓越的软件工程师。面试流程的标准非常高,只有极少数人能面试成功,不过我愿意为此付出代价,因为只有这样才能构建出一个真正的团队。

面试流程

我们的面试流程主要有两个技术面试。一个由我自己来面,另一个由团队的首席架构师来面。除此之外,面试者还有与 HR 和 R&D 副总裁的两轮面试。不久之后,我们对面试流程稍微做了些修改,在第 2 轮面试中加入了上机考试,面试者需要像平时工作那样在计算机上编写程序。对于面试者来说,能够编写代码是非常重要的事情,因为很多时候我们发现有些面试者虽然能够侃侃而谈,但在实际编写代码时(这也是他们在工作中需要做的事情)却能力不足,即便知道了问题的解决方案,并且在编写代码之前能够解释给我们听,但他们还是缺乏编码的能力。有时我们觉得合适的话还会让面试者从我们的开发者中选出一个进行结对编程来代替上机考试。我们参与的开发者可以在任何时候拒掉面试者。经过一些实践我们发现,每次当我们对某个面试者产生怀疑并决定给他或她一个机会时,最后的结果都不是太好。

DevOps 文化

作为持续交付文化变化的一部分,我们要求开发者做的是 DevOps,出于这个原因,需要确保生产环境的可视化。基于此,我们在所有房间内都放上了巨大的 LCD 显示屏,开发者可以实时看到生产环境中应用的行为。显示器上会显示出应用的异常信息、应用性能以及系统度量信息等。一旦开发者看到了这些鲜活的数据,他们就可以开始根据这些数据进行修复并改进应用,而这些数据之前是看不到的。他们修复错误、改进应用性能并提升系统的质量。

每日例会

质量也影响着我们每天的站立会议。相对于谈论“我昨天做了什么”和“我今天要做什么”来说,在我们每天的例会中,我们会讨论解决或遇到的产品问题、面对的有趣的工程难题以及需要对框架所做的增强建议等。

质量星期四

大家都会对软件工程是一门匠艺这种说法表示认可,不过很多公司在改进工程匠艺方面却几乎没有什么投入。为了做到这一点,我发起了名为“质量星期四”的活动。每个软件工程师每周都会花上 4 天时间与项目团队一起进行项目开发,不过在星期四,所有的后端开发者都会停下来,进行质量增强方面的活动。

搜寻 Bug(1 小时)

每周 4 我们都会从一个周会开始,并搜寻 Bug。我们会从生产系统中拿一个运行着的服务,服务的编写者会在所有开发者面前经过监控系统的检验,并解释生产系统中应用所抛出的每个异常。对于每个异常来说,我们会讨论是否有与这个异常相关的任务项可以消除它。最后,服务编写者会根据任务项列表对服务进行修复。这个过程不仅改善了服务的质量,还向其他开发者介绍了服务的内容。

回顾(1 小时)

在这一周内,开发者会遇到一些问题,他们希望能与其他人分享并对这些问题展开讨论。我们会在内部的留言板(daPulse)写上这些主题,它设定了每周回顾的议题。在回顾中,我们会讨论问题以及过去一周内学到的东西,还有如何改进团队、质量、流程以及 R&D 组织效率的一些建议。

展示(1 小时)

质量星期四的第 3 个小时用于演讲。每个开发者会轮流介绍他所熟悉的一个主题。这实现了跨团队的知识共享。主题可以是关于技术的,介绍新的项目,或是开发者感兴趣的任何主题。有时,我们还会从 R&D 之外邀请一些人来介绍公司的其他部门在做的事情,这些主题并不局限于后端团队。R&D 的所有人都可以发表演讲,并发布每周主题。公司的其他人如果想要加入进来我们也是很欢迎的。这也实现了跨部门的知识共享。

星期四任务

开发者在星期四的后半天一般并不会从事自己的项目。我们称之为星期四的任务。星期四任务是个技术债务或是小任务,优先级比较低。每个项目都有此类任务,不过通常都完成不了,因为时间不够,优先级也不高。在星期四,我们会从事这些任务,不过并不是由项目的开发者来完成,而是由其他组的成员来完成。让其他项目组的成员完成这些任务有以下几个目的:

  • 开发者可以学习到其他项目。
  • 外部开发者可以看到他们不熟悉的代码,能够发现问题或是给出建议。
  • 开发者可以学习到其他项目组面临的问题与解决方案。
  • 寻找项目共有的模式。
  • 可以找到自己感兴趣并打算从事的项目。

驱动创新的质量

工程师们每周都有一天时间不必忙于项目,这有助于实现创新。“质量星期四”是创新的驱动力。所有活动,如搜寻 Bug、回顾、技术演讲和星期四任务都是促进讨论与想法的催化剂。我们已经根据星期四的讨论实现了很多创新的东西。我坚信为了能够吸引到更好的工程师,你需要在质量与匠艺上投入更多。通过深挖内部工程师,你会得到更好的产品与更高的生产力。

语言 & 开发架构文化 & 方法