铅笔记。第1部分。招聘

哈Ha!



我叫弗拉基米尔。我在Vivid Money负责移动开发。



Vivid Money是面向欧洲市场的金融科技初创公司,具有广泛的功能-付款和转账,多币种,财务分析,帐户共享,投资等。最接近的竞争对手是Revolut和N26。



我们在一年内成功制作并成功启动了移动金融科技应用程序。在这一年中,我收集了大约4年以来在我脑海中形成的想法,而我是其他项目的负责人。在本文中,这些思想是以提示的形式收集的,这些提示适用于从头开始长期和大规模项目的软件工程经理/负责人。



介绍



一年多前,我作为一个Android团队的负责人加入了该项目。我面临着一项雄心勃勃且有趣的任务-选择技术,组建团队,建立流程,最重要的是,做好一切。好的是一个松散的概念,但对我而言,从产品和技术的角度来看,它是优质的产品。



从头开始一个项目是一项既有趣又令人兴奋的任务,因为它既难以理解又困难。首先,您不知道要抓住什么,然后要做的事太多了,整个工作过程就像扑灭大火一样。



为了防止这种情况的发生,首先必须明确定义活动的优先级



我认为,线索的主要活动可以按以下顺序安排:



  1. 建立招聘流程;
  2. 选择技术栈;
  3. 建立团队互动;
  4. 建立开发和测试过程。


在本文的这一部分中,我将仅关注第一点。



免责声明:



本文包含我的想法和结论基于在大型和长期项目的工作经验。其中一些技巧似乎有些老套,但正如实践所示,即使在大型公司和项目中,也并非全部都适用。



招聘大楼



对我而言,这是第一要务,因为团队的进一步工作取决于人员的“素质”。



我们成立银行的时间表非常雄心勃勃-一年。在这段时间内,有必要定性地制作大量功能。根本没有时间供养受过良好训练的员工。因此,以下建议如下:



理事会编号1。记住招聘的重要性



除了弱小的开发人员会直接影响代码质量和产品中的错误数量这一事实外,由于没有完全的信任并且需要持续的控制,因此不可能委托给他。因此,在快速发展的项目中将出现困难。



理事会编号2。不仅要在面试时检查硬技能,还要检查软技能



在俄罗斯,开发人员访谈通常归结为语言/框架问题。实际上,软技能起着同等重要的作用,而且较难发展。另外,具有类似思维定势的人更可能适合团队。

对于我们自己,我们确定了以下软技能:



  • 系统思考;
  • 整洁健康的完美主义;
  • 依靠经验,而不是建议;质疑未经证实的事实。


当然,还有基本的无冲突和与人沟通的能力。



例如,我们问一个候选人一个问题:“你为什么要离开旧工作,选择新工作的标准是什么?” 答案本身并不那么重要,因为系统的方法很重要-我们希望候选人知道自己不满意,他能够以一种合乎逻辑的方式做到这一点,并把所有事情都整理清楚。

这样的问题可以帮助我们理解候选人的思想和原则,例如:“您理想的团队是什么样的?” 或“理想的开发过程是什么样的?”



理事会编号3。优化面试



采访应被视为可以改进和优化的机制。或作为可以重构的程序。

我将举例说明我们所做的优化。



示例1



:两名开发人员采访每个候选人大约需要1.5个小时。为了优化此时间,而不是将其浪费在明显弱的候选对象上,我们引入了筛选。筛选是一些简单的,已准备好的答案的封闭式问题。招聘人员自己向应聘者提出这些问题,大约需要10到15分钟。



几个数字:

在筛选出的100名候选人中,约有三分之一被淘汰,即约30名被淘汰;招聘人员每次筛选花费约15分钟,即30名被淘汰候选人的净时间约为8小时。在对这30名候选人的经典面试中,在最乐观的情况下,我们将花费大约60个工时。



示例2



面试的目的是选择最相关的候选人。考虑到所选技术的堆栈,我们分析并确定了对项目硬技能和技能至关重要的条件,这使我们能够删除一些不相关的问题并减少了采访时间。

例如,我们删除了与我们项目中未使用的Android SDK部分相关的问题-ContentProvider,JobScheduler等。 SDK很少使用。



示例3



最初,技术面试是在两个单独的阶段进行的-理论问题和实际任务。这极大地增加了候选人完成面试所有阶段所需的时间,并且许多申请人流失了,因为IT市场竞争激烈-优秀的开发人员可以迅速获得报价。



为了优化渠道,我们将面试分解到了阶段1-删除了无用的问题并解决了算法问题。我在上一段中撰写了有关非信息性问题的文章。但是我们用框架的实际任务代替了算法任务。他们还会测试您的编码技能和SDK知识。

结果,仅进行了1.5个小时的一次技术面试,但是内容变得尽可能优美。



理事会编号4。“了解比知识更重要”



选择开发商的最重要标准是“了解”。这样,一个人不仅知道如何给出定义和学术知识,而且还表现出特定框架结构理解没有这种理解的开发人员面临问题,将无法独自找到解决方案,或者无法充分优化地解决问题。因此,我们公开了所有面试问题,以使候选人不给出所学术语,而是讨论特定主题。并且,我们遵循他对这一主题的了解以及他的逻辑过程。



例如,我们问一个开放的问题:“如何在Android中制作ANR(应用程序无响应)检测器?”。该问题测试了有关线程在Android中的工作方式的知识,但避免了有关Looper和Handler的直接问题。它还允许您使用多线程简洁地切换到主题。



理事会编号5。分配采访功能



随着团队的快速成长,面试变得如此之多,以至于整天都没有面子,其他活动也没有时间了。因此,将面试职能部分委派给团队很有用。



这不仅减轻了潜在客户的负担,还使开发人员可以选择潜在的同事,这也激励了他。



此外,候选人还可以了解团队并为自己创造更全面的体验。



理事会编号6。平衡小队



招聘时,您应始终牢记团队中各个团队之间的人员平衡。太多的高级开发人员可能会导致他们提出新的解决方案,但开发人员不会提供功能。但是,在项目开始时,当技术基础已经建立多年时,这是必要的。而且,为了编写功能的常规代码,签名者会不合理地昂贵。反过来,太多的初级人员则会降低代码库的质量,并最终导致项目沉没。但是,精明的初级人员迅速成长为中间人,与市场中的中间人相比,他们对公司和团队更加忠诚。我认为,每个项目和具体情况下的余额是不同的,因此我不会给出具体百分比。



通常,团队会被承包商稀释,以加快开发速度。平衡在这里也很重要,因为大量承包商也会降低项目中的代码。承包商在项目中很少有与全职员工相同的动机和兴趣。



理事会编号7。不要害怕开火



最后,无需害怕解雇团队中的人员。在原则,精神和技术技能方面不适合团队的人,从长远来看,其危害要大于短期编码的好处。



听起来很容易解雇,但是如何使员工和团队尽一切努力呢?其原理在这里工作:“不要紧,什么你做什么,但重要的是如何”。如果您提前做所有事情-讨论对角色的期望,在不等待试用期结束的情况下按时提供有关工作的反馈,并争论您的意见-这对员工而言并不奇怪。



公开让团队了解原因也很重要雇员被解雇了。否则,您可以在团队中灌输恐惧并破坏团队氛围。



理事会编号8。收集新来员工的反馈



招聘过程包括两个阶段-面试和新手入职。



入门不仅对初学者有用,而且对项目也有用。



浸入项目后,新人们可以以开放的眼光看待问题区域并给出新的想法。因此,我们制定了一条规则-有意识地听取和分析他们的意见和建议,以改进方法和代码库。其中一些建议已在项目中成功实施。

例如,在Android团队的一位成员到来之后,我们彻底修改了将数据存储在内存缓存中的方法。



结果



最后,我想说的是,我们的移动团队在近一年半的时间里已增长到26人。所有开发人员都做得很好,没有人自愿离开团队。我们已经成功发布了产品并通过了远程工作测试,而没有损失质量和开发速度。



我希望本文收集的技巧对您也有用。



在下一部分中,我将讨论选择技术栈和建立团队互动的方法。



All Articles