首先说一点背景故事。我曾经用我的方法招聘近10个在海外远程工作的外包人员。尽管不是万无一失,但我认为这是我使用过的方法中最省时并且投资回报率(ROI)最高的。过去几年里我在自己的业务中常常使用外包人员,这一个招聘流程也可以说是从我的经验里产生的副产品。有时候这套方法效果很好,有时候很糟甚至是一塌糊涂。经过了很多次的优化,我下面阐述的方法能够稳定的筛选出最优秀的外包程序开发人员。希望这套方法也能为你带来同样的效果。
一共是四个步骤。如果去掉发布职位这一步实际上只有三步。整个流程的目标是节省时间和开销,同时尽最大可能去发现最优秀的候选人。需要注意的是这个流程可能需要花费$50到$250,取决于你要招聘的人。你需要发布职位,审核候选人,选取最好的X个(通常最少选10个)。在此基础上你聘用他们完成一个简单的编程任务。等他们完成后(前提是他们能完成)你就可以审核代码并最终决定谁的实现更好,然后你就可以决定招聘的人选。下面就是所有步骤:
招聘优秀外包开发人员四步法:
- 招聘网站上发布职位需求
- 预评估:雇用候选人(最少10个)一小时
- 编程挑战
- 留下最佳候选人
第一步: 招聘网站上发布职位需求
目标: 发布有吸引力的职位
登陆招聘网站发布职位。确保标题能准确描述你需要做的事情。不要写类似“JavaScript高手”或“Rails大牛”之类的。换成“高级Rails开发”或“Wordpress开发”可能更好些。职位描述应该具体描述你的需求。不要寥寥几笔简单了事,例如:“代码优雅,按时交付”。你需要告诉应聘者你需要他们做什么。如果是升级现有代码,那你需要告诉对方可能会面对哪些东西。如果你是做业务的不懂代码,那你需要描述产品的功能以及你为什么需要做这个。不要在这一块花太多时间。差不多10到15分钟够了。
招聘网站都有一些模板式的选项,针对这些选项我喜欢采用下面的设置:
- 技能需求:
顾名可以思义,如果你是Rails网站,可以写”Ruby on Rails”,有可能还要写”HTML”和”JavaScript”等。
如果是其他技术,就填上具体的技术
- 支付方式:
如果是没有具体结束时间的项目就采用按小时付费
如果工作范围能确定就按固定金额支付,比如安装WordPress并配置像X一样的主题
- 预计工作量
这个每个人的评估不一样,通常我勾选”兼职”
- 期望的经验值
总是选中级或高级。选择新手会让你最终花两倍的价格来换掉
- 公开程度
所有人可见(除非我要指定招某一个人)
- 其他偏好:
- 兼职类型:无
- 最少评价星级:无
这里选无偏好的原因是大量的高手从来没有在这网站上完成过项目。还有的人只做了一个项目,结果还得了一个差评,但原因不是开发的错,而是产品管理没做好。所以我们不要滤掉这一批人。
- 已工作时间:无
再次说明一下,很多高手是刚加入网站的
- 地点:
这一项要注意。我个人是不关心对方在哪里。但这得取决于你。我一边选择无偏好。但如果你想各个地方的人都试一下那你就选对应的地点
- 英语级别: 5或更高
这一项是应该有要求的。好多人自称英语是4/5但你跟他们发邮件,IM或Skype/Google Hangout沟通时你会发现实际上只有2或3。能够有效沟通是成功的关键,缺少这一项犹如逆水行舟。
- 其他用于筛选的问题
我个人会留空,因为程序员就是技术型的,编程这块要么知道要么不知道。
接下来发布职位。
等上大约48小时进入第二步。这期间应该有人来申请职位。
第二步 初步审核 – 雇佣最优人选(最少10个)
目标: 选取可能适合职位的最优候选人进入下一步
可能你会收到25到5份职位申请,他们可能来自世界各地。你要做的第一步就是过滤名单,下面就是行动方案:
- 砍掉英语(或者其他你选择的语言)很烂不能阅读的。这是很明显的排除信号,如果现在都不能交流,你怎么能期待以后能交流。
- 去掉没能力完成工作的。比如,你正在招聘Rails开发,但是应聘者没有在技能里列出Rails。你需要招聘能力最强的。
- 去掉不符号职位描述的。 比如你需要招人开发一款游戏,那么web开发人员可能就不是很适合。
- 去掉超过预算的。一般来说
- 要价高一点的是比要价低的活儿好一点,但没这必要。不然就是在浪费双方的时间。
经过48到72小时后,你的候选名单上应该包含最少10个候选人。
现在就需要你掏点银子了。如果申请人的平均薪水是5美元到25美元每小时,那你可能需要花50到250美元才能找到合适的人选。你需要把这10个人全部聘用,我是认真滴。但是你聘用他们的时候你得通知他们你只是需要他们完成一个简单的任务,时间不超过1小时。然后你把编程任务(第三步)的链接发给他们。这一小时是要支付报酬的。这是给候选人信心表明不是要让他们白干。如果你想找外包/自由职业者/合同工白给你干活,那你立马失去所有的优秀开发人员。如果你支付他们整个一小时的报酬,他们会更认真。
这时候会发生一件有意思的事。平均有50%的候选人没能完成这一步。我猜想其原因就是他们根本不知道如何完成。这也正是第三步的目标:把能做事的人筛选出来。
第三步: 编程任务
目标: 确认候选人有能力通过代码解决问题。对候选人的代码进行审查。
这一步和“如何招聘程序员”的第三步很像,但也有一些改动。虽然很相似但也存在关键的流程差异,所以读了之前一篇文章的同学还请继续耐心阅读。
过程中候选人会用我指定的语言解决实际问题。对于高手来说编程任务应该不超过1小时就能完成。我也只支付了1小时时间,他们可以爱用多久就用多久的时间,反正我只付一小时。目标很简单:判断候选人行还是不行。
编程测试是很好的调节阀。不是说问题有多难(恰恰相反,问题很简单),而是因为你可以了解对方的代码质量,同时也能找到以下问题的答案:
- 候选人的沟通能力
- 候选人是否知道服从指示?
- 候选人知道如何使用git和GitHub吗(后面会细说)
- 候选人知道最佳代码实践吗?
- 候选人知道如何写代码吗?
- 候选人能通过测试吗?
我一般告诉候选人截止时间是24小时。题目放在一个在线的GitHub/BitBucket的一个Git库里面,所有候选人共享一个代码库。这意味着候选人可以看到别人答案。但这没关系,如果有人作弊也很容易发现。如果三个人的repo看起来一样,那很可能最先提交的人才是真的写出代码的人。没有人在一次测试中写出一模一样的代码。
repo里包含题目所需的所有信息。候选人只需要按照指示操作,并在完成后发我一封邮件就行了。
。如果候选人不清楚干什么,他们可以跟我确认或者直接在Goolge上找答案。候选人完成后需要提交一个pull 请求给我,然后我可以进行评审。
这种方式可以说是神来之笔,因为它能全方面了解候选人。比如候选人是否能按时写出代码完成工作。同时也能让我审查代码来判断到底是好还是坏。基于我的经验,平均5%的候选人不能完成任务,因为他们不知道如何解决问题。这也是我让他们在家面试的原因。从第一步到第三步都可以远程进行。这为公司节约了时间。在这完成了任务的40%的人中,只有20%的人做对了,并且到这个时候基本上只剩下一两个候选人看起来不错。如果你有更多的选择当然更好。
有的网站要求候选人安装监控软件,它会定期进行截屏让你检查。所有者让我不仅可以看到他们的进度,也能让我部分评估他们解决问题的过程。
对于这种方式有一个很正常的顾虑:万一他们作弊怎么办?如果他们叫朋友或者其他人当枪手怎么办?是有这种可能,但我认为现实中也存在这个问题。有时候程序员不知道如何解决问题就会寻求帮助。他们通过QQ向朋友求助,或者是在网上搜或者是找一些满足要求的开源项目来修改。这就是程序员的作风,管你是在家还是在公司谁关心。如果对方真是在欺骗,我想很快我也能发现。就算是对方被招进来了,团队也能很快发现问题。这时候你就需要需要决定是否要留下这个人了。
如果候选人没能完成测试,这就直接是红牌了。当然出的问题也应该足够简单让有经验的程序员能在一个小时内完成。如果不能完成,要么是题目太难了要么是候选人不合适。如果你用的是我上面提到的链接(或者类似的),那就不存在这个问题。对于那些没通过测试的,我建议放弃后面的面试直接换下一个人。
对于那些正确解决问题的人,我一般会审查他们的代码,如果没问题我回把他们加入潜在雇员清单。
如果你不会写代码又想参照本流程那我强烈建议你找一个会编程的朋友,或者是同事来帮你。支付他们2个小时的报酬让他们给你的候选人进行评价。向他们解释你要进行的流程并告诉他们担任的角色:代码评审。如果你采用这种方式,你需要他们按照“行/还行/不行”这三个等级对代码进行审查。“不行”的意思就是不行、不能聘用。“还行”就是说可以,不是最好的但可以用。“行”表示可以,聘用这个人,活干得不错。我把那些“还行”的人也包含进来了是因为有时候代码看着可以但不完美,这也不是大问题。有时候你希望产品能尽快出来并不要求完美,只要能用就行。这些”还行“的人就适合干这种事,因为有时候你在测试市场反应或其他方面,你希望越快完成越好。然而能招到”很行“的人总是好事。
如果没人能完成编程任务,那就再发布职位。有时候要找到合适的人得发布好几次职位信息。这是要花点钱,但花在前面比后面一直花钱要好。
第四步: 留下最优秀的
目标: 招聘合适的人选
通过上面的流程你已经找到了合适的人选,现在就要准备聘用了。一般到这一步可能剩下2到3人。
如果只招聘一个人,那就留下最好的,并告诉其他人你已经招了其他人,但会和他们保持联系,团队扩充的时候需要他们。这正是做人留一线,日后好见面。说不定以后还需要他们。如果你要招两个人,那就留排名前两个。道理你懂的。如果人不够,那就再发布职位。
总结
招聘外包人员也是蛮有挑战的。但如果你采用上面的流程,你会始终锁定优秀的外包开发人员并过滤掉滥竽充数的人。我希望这些流程能帮到你。