30个团队的10个排字机。 你疯了吗

大家好! 我叫Kostya,我负责Wrike的布局部门。
现在我们部门有10个人,这些人都是在不同时间来到公司的,他们在不同的团队中有不同的经验和任务。 同时,所有员工都是优秀的专家,他们与十名专家一起满足了整个产品的布局需求。

在本文中,我想谈谈哪些实践可以帮助我们调整团队的整体技术水平,坚持工作中的相同方法,并为他们提供发展机会,以便他们可以更好地改善我们产品的界面。

对于那些有很多信件的人,有一个视频



现在有一点背景。 我们是一家致力于开发单一产品的Wrike产品公司。 这是用于在任务和项目上进行协作的单页应用程序(SPA)。 该公司共有700多人,目前有300多名工程师从事开发工作。 所有员工均分为30个产品团队-每个团队均根据Scrum方法论工作,并由不同的专家组成:后端,前端,测试人员,布局设计师,UX设计人员等。 每个团队都在自己的产品上工作。 然后将所有这些部件组装成一个大型产品,全球超过一万六千家公司使用该产品。

该产品是如此庞大和复杂,因此对于我们来说,重要的是要清楚地区分在客户端上创建业务逻辑的前端开发人员和UI开发人员,本质上讲,编码人员只处理接口的布局,但要最大程度地沉浸其中,因此,以最高的质量。

同时,我们不认为布局设计器是Frontend开发人员的中间开发阶段。 对我们来说,这是一个独立的开发分支,具有自己的技术堆栈和复杂性。 并非每个布局设计师都应该能够编程,但不是每个Frontend开发人员都应该可以排版。

尽管在Wrike中只有30个团队工作,但只有十个编码人员才能满足20个团队的需求。 事实是,并非所有团队都在完成更改界面的任务,因此只有20个团队由其永久性的布局设计师“武装”起来。

Wrike的团队分布广泛,我们在全球设有多个办事处:从圣地亚哥到沃罗涅日。 主要的开发中心位于圣彼得堡,开发项目的一部分位于沃罗涅什,现在在布拉格开设了一个办事处,部分产品团队将迁往该办事处。

当这么多的人在不同的团队,城市和国家/地区使用产品进行工作时,可能难以保持统一的方法,因此工程师具有相同的级别,因此具有一致的代码质量和同样高的质量。 如果不特别注意这一点,可能会引起各种麻烦。

想象一下您是一位排字工人,并且在您的产品团队中工作。 5月的一个美好的一天,另一个团队的成员来找您,并紧急寻求帮助:他们的版式设计师在重要版本发布的几天前生病了,他需要迅速替换掉,并完成了途中没有的一切。 您现在不是很忙,同意提供帮助:只需要几天。 接下来,您下载您的同事处理过的存储库,并淹没了一周,只是想弄清楚那里发生了什么。 不眠之夜,时间紧缺的最后期限和紧张的滴答声将给您带来额外的好处。

甚至更糟-您是同一个病态的编码员。 而且,离开病历列表后,您将更新存储库并从同事那里获得28次提交,这完全摧毁了从一开始就奠定的苗条架构。 为什么这样 因为您的同事在夜间不知道您的想法和与作者保持同步的能力而努力工作。 而且,似乎当前的任务已经完成,但是进一步开发此代码将是一场噩梦。 一切都需要重做,如果您可以向团队解释一下,并再花一周的时间来完成工作,那就太好了。

我从事Web开发已经有一段时间了:我是一名开发人员和经理。 他曾在网络工作室,代理商,外包生产中工作,现在我在产品团队中工作。 我已经看到了所有事情,也看到了类似的情况,例如在匆忙中以及在比Wrike小的公司中。 因此,我很高兴在Wrike中,至少就UI开发而言,没有这种情况而且不可能存在,并且我准备分享有助于我们避免这种情况的实践。

通常,如果您考虑一下,很显然,整个过程都在人员和流程中。 是人们编写代码,是他们构建流程并以某种方式进行交互。 人既是解决方案的来源,也是问题的来源。 如果我们在谈论工程师,那么一切似乎都很简单。 为了没有问题,必须遵守一些条件:

  1. 所有人都必须同样地高水平。 每个人都使用整套必要的技术,了解所有优势和局限性,精通流程并坚持使用相同的方法。 然后,的确,您可以将任务交给任何工程师,他将像其他任何同事一样解决该问题。
  2. 每个人都写同样好的代码。 好吧,或者至少是一样的。 然后,的确,当与第一段结合使用时,我们将获得一个一致的,维护良好的代码,任何团队成员都可以使用。
  3. 每个人都知道谁在做什么。 这降低了在任务之间切换时的进入门槛,实际上,即使有人生病或因其他任何原因“退出”工作流程,任何同事都将在场:这降低了所谓的“总线因素”的可能性;
  4. 团队成员“分享新芽”。 团队的数量正在增长,工程师的需求也在增加。 雇用与前三点相对应的人员已经很困难,因此,如果现有的人可以分享萌芽或克隆,同时又保持现有知识,那将是很好的选择。 然后,是的,扩展将不会有问题。
  5. 教大家飞翔。 对于在不同国家/地区设有多个办事处的公司而言,有必要能够将来自不同办事处的人员聚集在一个地方,因为很难通过非语言交流来建立交流的价值。 如果这些人需要与某人同步时,可以像漫画一样“飞出”到另一个办公室,那就太好了。 这样一来,也许全球范围内的团队分布都不会出现问题。

而且,如果以某种方式在一位工程师中实现了所有这些功能,则称其为“布局设计师”是不对的,而诸如“真空中的通用布局设计师”之类的标题更好。

似乎不可能实现所有这些要点,尤其是最后两点。 但是我们在Wrike的布局部门中已经接近这一点。 现在,我将向您介绍7种实践,这些实践可以帮助我们尽可能地接近我们所追求的理想。

1.当前能力清单


如果我们知道要解决的任务,那么我们必须了解解决这些问题所需的能力。 当然,每个人都应该了解世界上的一切都将是一件好事,但是客观上这是不可能的,值得强调至少部门中某人应该拥有的最小知识清单,并且对每个人都更好。

它有什么作用? 对候选人的明确要求-他的知识与所需能力列表越接近,越好。

如何弥补? 在某个时候,我们聚集了整个部门,并在几次会议上用纸写了我们已经在使用或希望将来学习并开始使用的所有技术。 在便利化的帮助下,我们得出了绝对每个人都同意的能力清单。

结果,我们的能力列表既包含非常抽象的内容,例如,快速查找信息的能力,又包含非常具体的技术,直到控制台实用程序git的特定命令为止,我们认为这些命令应该可以使用。
同时,部门中只有一两个人具备其中一项能力是完全正常的-在这一阶段,主要要点是至少有人具备这一知识,否则事实证明该部门面临着根本没人要完成的任务无法解决。

完成全部能力列表后,我们方便地将其分为13个方向。 它们是:

  • 谷歌的能力;
  • 环境(工具,git,服务等);
  • 的HTML
  • 的CSS
  • 通用方法(HTML / CSS);
  • UI套件;
  • Scrum;
  • Angular + Dart;
  • 代码审查;
  • JS;
  • 编程基础;
  • UI /界面;
  • 热键

而且,如果相同的HTML / CSS是通用的行业标准,并且我们可以期望候选人熟悉它们,那么就会有非常具体的事情。 例如,我们的内部UI Kit库。 或者我们的内部特定工具,环境特征,解决特定问题的方法特征等。 相同的Dart Angular(我们在Dart上编写的产品的前端)是一件相当罕见的事情,很少有人使用它,并且期望至少其中一个标准对于潜在候选人来说是熟悉的,至少是幼稚的。 事实证明,即使我们雇用了经验丰富的专家,他仍然不会知道成功完成任务所需的大部分知识。 事实证明,聘用新人并使其适应团队总是需要一定的培训。 积累的知识越多,培训的过程就越复杂和冗长。

事实证明,根本不可能找到100%满足我们对技术专业知识要求的人,而我们将需要学习他。 因此,初学者必须具有一定的学习技能。 这些是个人功能,即所谓的“软技能”。

当部门和产品很小,并且累积的知识很小时,雇用具有高专业知识的人员在团队中共享它是有利的。 在这里,“硬技能”已经名列前茅。

随着部门的发展,与此同时,有关产品的知识积累也越来越多,雇用具有丰富经验的孩子变得无济于事,因为他们很难适应难以迅速改变的新现实。 在这里,雇用那些即使没有很多技术专长但能够迅速适应并学习必要技术的人也很有用。 软技能脱颖而出-高学习能力,良好的沟通能力。 重要的是,一个人分享已经确立的价值观并加强团队,而不是与之抗衡。 关于所谓的文化适应。

重要的是,加入团队后,一个人应尽快了解技术和流程并开始带来收益。 这给我们带来了第二种重要的实践:

2.参加综合培训


我们已经决定仅仅雇用有经验的人是不够的,而且在一个人上班后,我们需要立即有效地向他传授他目前不知道的知识。 而且,这是否是世俗的东西(例如flex或grid),还是某些特定的工具,而这在Wrike之外根本无法实现。

为此,我们使用“英语入职”(Onboarding)(英语“ on-board”)在将新人员适应团队的过程中。 但是在Wrike,这不仅仅是一个关于新人在哪里工作以及在哪里看他的任务的故事。 我们意识到,入职对我们来说就像是继续教育课程-一种为期数月的培训:对当前水平进行评估,制定培训计划,由导师指导,对产品,技术和过程进行多次培训。 根据入职的结果,我们期望一个人将学习完成任务所必需的一切,并使其技能与本部门最有经验的人尽可能地接近。

总的来说,我们的入职过程是另一篇文章的主题,但是现在我要专注于一个关键事项:能力的上升。

根据我们之前制定的能力组,我们可以评估每个方向上的任何员工甚至候选人,并构建出这样的径向图:



每条射线都是一组特定的技能。 关键是该组固有的精通技术和方法的百分比。 一个人知道和知道的方式越多,他的图表就越接近理想圆。 在我们的能力列表中绝对拥有所有技能的人是我们需要的非常球形的布局设计师。

重要的是要了解这种图表(即能力的上升)不用于绩效评估,也就是说,我们不使用它来了解谁是优秀的布局设计师,谁是不好的设计师。 每个区域都没有最低限度,无法跌破该最低限度。 该图表可以帮助您了解一个人的优势和成长点。 我们为部门中的每个人都不了解某些事实做好准备,尤其是对于初学者而言。 但是,从胜任力的上升来看,很容易理解首先应该提起哪些事情。

当一个新来的人来到我们这里时,他就为他造了朵玫瑰,他们与导师一起制定了为期2-3个月的培训计划,沿着这个计划,一个人被泵送并达到理想的理想状态。

并且,根据结果,在进行了这次培训之后,玫瑰被重建,并且进步变得明显。



我们不希望每个方向都取得100%的结果,对我们而言重要的是要取得重大进展。 而且,实际上,即使在完成入职后也可以使用此图,以免停滞不前并进一步发展。 有人可以将自己感兴趣的方向抽到100%甚至更远,有人可以添加新的方向并从排字机发展到某个相邻区域。 我们也有这样的例子和实践。

它有什么作用? 为初学者制定清晰的发展计划。 因此,我们都达到了一个单一的水平,最大程度地减少了“老兵”和“新移民”之间的差距。

另外,这降低了对候选人的要求:如果您仍在培训,那还不是完全一样吗? 因此,我们对候选人的“硬技能”并没有真正的强制性要求。 显然,我们根本无法雇用没有基础知识的人员,但是在入职阶段可以学到很多东西。 最主要的是一个人有能力,剩下的就是生意。

因此,我们知道我们在寻找谁,需要什么技能以及如何培训他们,但是今天这些知识才有意义。 前端列车全速奔跑,涂抹所有绊倒的人并跟上轨道。 并且我们需要某种引入新知识的过程,以使整个部门不落后于现代要求。 这给我们带来了第三种良好实践:

3.定期的培训活动


为了跟上现代世界,监视其中正在发生的事情很重要。 参加会议,阅读专业文章,尝试新技术并在工作中实施它们。

将所有人拖到所有可用的会议和课程上很奇怪,这是无效的。 但是其中一个人以一种或另一种方式正在自己学习或在Wrike的支持下学习某些东西-我们派人参加会议,支付专业课程的费用,并总体上以各种方式支持那些想要抽奖的人。 而且,如果在整个信息流中可以发现对自己有用的东西,那么最好将其带到部门并与所有人共享知识。 为此,定期的内部培训活动对我们有帮助。 但是,如何理解整个部门可以教给谁和教什么呢? 胜任力的提升也帮助了我们。 但是,不是在每个员工的上下文中,而是在整个部门的上下文中。



查看这种图表,可以轻松地选出某个领域的专家,并要求与其他人分享您的知识。

您还可以看到,尽管我们自己已经确定了其中一个领域的一定水平的知识,但是该部门中没有人拥有100%的知识。 这是吸引外部专家的机会,他们将为我们举办研讨会或讲座并提高整个部门的一般知识水平。 例如,由于需要学习Dart语言的基础知识,我们在公司中找到了一位导师-一个强大的开发人员,他为整个布局部门进行了有关Dart的讲座。 这并没有使我们成为开发人员,因为没有这样的任务,但是至少我们现在更好地了解了前端。 或者,也许有人在感受到了新技术之后会考虑如何在有限元中进行再培训,这也很好。

对我们而言,剩下的就是定期审查我们的能力列表,并补充新的相关技术。 然后,玫瑰将被重建,我们将看到部门的一般水平,我们将能够对其进行管理,并且我们将永远不会落后于前端引擎。

因此,我们拥有一组很酷的专家,他们的实力大致相等,并且不落后于当前趋势。 我们甚至知道如何补充他们的队伍。 现在如何同步他们的工作? 第四项重要实践可帮助我们:

4.强制性交叉审查


让我提醒您,我们所有的工作都是在产品团队中进行的。 每个与更改界面相关的任务的团队都有自己的永久排字机。 排字机可以有多个命令,但前提是一个命令没有以100%的速度加载它。 而且,如果您不理会专家,那么他迟早会设计自己的排版方式,其他人永远不会知道。

因此,不会发生这种情况,并且几乎所有相同的任务都可以解决,因此每个任务和合并请求都必须通过强制性的检查代码。

重要的是,不应该将代码审查视为控制功能,而是要让所有人都不会感到不满意,而应该在这个阶段中,来自不同团队,背景和任务不同的两名工程师就如何解决这一问题达成共识。一个或另一个问题。

什么可以进行交叉审核?

在审阅阶段,您可以获取外部视图-如何更好地完成任务,从而减少错误数量并使代码一致。而且这也是一个相互学习的过程-不仅代码的编写者通过了审阅者的“验证”,而且审阅者还可以查看问题的解决方式并将其投入使用。因此,通过交叉审核过程,可以开发出普通行程,并在整个公司范围内进行分配。

已经开发了通用方法,将它们保存在某个地方会很好,这样,初学者不仅可以从同事那里获得此知识,而且可以独立地从中获得。这导致我们进行以下重要实践:

5.代码样式和自动掉毛


重要的是,代码必须与部门制定的一般规则保持一致。最基本的是所有人都通用的Codestyle。重要的是,这些规则必须明确制定并向公司中的任何人公开提供。因为您永远不会预先猜测谁将要使用您的代码。

更好的是,确保代码匹配由linter自动检查的给定规则:机器应该受苦,而不是人受苦。例如,我们已经开发并实现了标记模板的棉绒和较少文件的棉绒。

自动起毛有什么作用?

好吧,首先,编写代码是平庸的-所有错误都直接在代码中突出显示,而您仍处于上下文中。并且无需通过检查代码样式来分散注意力:这将由IDE的插件完成。

其次,更容易进行和通过代码审查-在MR中,根本没有错误,也没有代码样式错误,您可以准确地专注于任务的本质。

第三,在编写代码的过程中自动整理也是研究代码风格的一种方法。无论您是否熟悉代码样式,在编写代码时是否熟悉,甚至更重要的是,当您尝试提交代码时,lint会显示错误列表以及指向违反它们的规则的链接,其数量恰恰是您现在和现在所需要的数量。 。因此,您将不可避免地通过反复试验来学习代码样式。

似乎尽管每个人都在不同的团队中从事不同的任务,但仍有很多共同点。而且他们需要能够协调:谁,什么,什么时候进行审查,谁,什么时候,什么,将什么规则引入代码风格,哪些没有,等等。所有这些活动都需要能够同步。另一个重要的实践可以帮助我们:

6.每日站立


该部门没有自己的冲刺和计划(只有拥有布局设计师的产品团队才能为他们工作),但是我们仍然从Scrum学习了一些实践。即,每日站立会议是一次会议,我们召集并讨论紧迫的问题:我们讨论已完成和当前的任务,并讨论未来的任务。仅在按审阅任务顺序进行时这才是重要的,并且作为奖励,您可以讨论出现的问题,向同事寻求建议或共享团队新闻。

站起来要迅速通过,每天不超过15分钟,这一点很重要。因为即使每天15分钟,乘以10人,每月也要花费40至50个工时。这就像一个人一周的工作。因此,集会本身应尽可能短而有效。而且,只有在有需要单独讨论的问题时,它们才不在《每日新闻》的框架之内,并由感兴趣的人分别讨论,而不会浪费其他人的时间。

我们使用交互式白板执行任何布局设计师可以在任何城市任何时间处理的任务。在Daily上,聚集在圣彼得堡的每个人都在显示此面板的电视上的一个柜子里,而在其他城市工作的人则通过Zoom连接。除了网络摄像头之外,这还带来了我们所没有遇到的存在和分布问题的影响。

日常的站起来为我们提供了一些公共信息空间,可以解决有关布局的任何问题-只需大声提出,然后集体头脑就可以得出答案,因为有人已经遇到了这个问题。或者,某些感兴趣的人可以帮助找到解决新任务的解决方案。

因此,我们知道如何聘用和培训出色的专家,我们知道如何协调他们的行动以维护高质量的代码。但是这里有一个埋伏-如果一个人想发展成为专家并做好自己的工作,那么无论如何他都会做。即使所有这些过程都不存在。他们只会帮上忙。而且,如果他不愿意,那么即使是理想的流程和超级训练也不会使一个人动弹​​。每个人都应该对他们自己,公司和产品的未来命运真正感兴趣并对其感兴趣。这是列表中的最后一个,但实际上是最重要的做法:

7.每个人都参与部门项目


理想情况下,每位员工至少在下一个季度应该为他自己和部门的发展制定一个易于理解的计划。如果每个人都对它感兴趣,那就太好了。但是,当前任务流并非总是有时间考虑它。

为了使每个人都不会停留在当前水平并且不会在他的团队中感到“酸痛”,我们引入了与您的团队负责人或领导定期举行“一对一”会议的做法。在这些会议上,您可以讨论自己的发展,团队,部门和公司的发展,以及现在可以做什么。在会议上,您可以获得有关您自己的反馈并协调行动,或者可以提供有关您的任务,团队或部门中的流程的反馈,从而影响他们。

除了常规的1:1,“项目”与我们合作得很好。一种或另一种方式是,该部门中的流程和技术需要进行推广,应引入一些新内容,而旧的和无关紧要的则应进行处理。部门中的每个人都有机会提出这样的更改,例如,引入新技术。或删除一些会干扰生活的传统方法。

而且,如果这样的更改确实有用,那么任何人都可以承担该项目的实施。这意味着您可以独立进行一些研究或工作,或者聚集一个项目团队并管理其活动以实现项目目标。通常,这需要对新技术进行深入研究,或者寻找以前无法解决的问题的答案。

每个人都可以自己选择自己感兴趣的项目。因此,一个人在自己感兴趣的领域发展自己,并推动整个部门发展。

为了使每个人的项目工作透明,每个月一次,我们以复古的方式聚集了整个部门,分享我们的成功或提供新的项目。

通过这七种实践,我们一年内可以雇用6名布局设计师并将其集成到部门和团队中。目前,这几乎占整个部门的1/3。好结果

那航班呢?

这离不开魔术,这一切都要归功于自动化的魔力和我们的旅行仙女Ane。
如果出于某种工作原因,您需要在另一个办公室里聊天,例如与某人聊天,那么只需在Wrike中直接填写特殊表格,注明旅行的日期和目的。并在适当的时候寄出机票。剩下的就是拿一台笔记本电脑,护照,而不要迟到。因此,我们的排字机不会出现任何问题:)

但是,如果您的公司还没有这种做法,该怎么办?

如果您是团队负责人或领导者,那么建议非常简单:“在清单上,执行并执行。”我认为每个领导者都对员工的成长和代码质量感兴趣。

而且,如果您是简单的排字工人,甚至是自由职业者,您是否不必依靠“空中支持”?奇怪的是,建议是完全一样的。

诀窍在于,所有这些实践的实施不需要任何巨大的投资或人工成本,可以在普通员工的倡议下从下至上进行推广。最主要的是,您有一种抽身自我并改善周围世界的愿望。

Source: https://habr.com/ru/post/zh-CN452820/


All Articles