大众点评校园招聘面试评估系统开发回顾

由于9月校园招聘痛苦的经历,赶在10月第2波秋季校招前,我们花了2天时间开发并交付了校园招聘面试评估系统,很多人都很惊讶我们是如何在2天内开发出这个产品来的?回想起来,我自己也很惊讶。2天开发出来的工具,替换了花了XX万人民币买来的招聘系统,在公司的校园招聘中全面使用。本文对关键过程做一个回顾。2013年12月我们在pycon 2013 shanghai做这个过程的分享,有兴趣的同学可以查阅pycon的演讲材料。

背景

2013年国庆前的9月,大众点评校招团队在南京,武汉,西安进行了第1批校招。面试评估的过程不下9个步骤,过程繁琐而枯燥(具体过程参考附件pdf。当然校招面试本身是一件非常愉快的事情,每次都会遇到很多有趣的事情,都会有的收获)。

过程大致如下:

  1. HR发出面试评估表的word模板(office 2007的docx格式)到一面面试官的公司gmail邮箱。
  2. 一面面试官登陆gmail邮箱,下载word附件,拷贝n份(有n个学生),每个学生的名字重命名文件。
  3. 面试官每面完一个学生,填写学生的基本信息(名字,学校,电话,学历,生源地等)以及面试评语到word评估表中。(这些基本信息,其实是已经有电子文档记录的)
  4. 面试官面试完一天所有的学生后,批量把word文档通过email发送到HR。
  5. HR登陆gmail,查收每一个面试官发来的评估表,并下载到本地。
  6. HR汇总所有面试官发来的word结果,并一个个把结果汇总到汇总的excel中,汇总后一一通知学生面试。
  7. HR筛选出需要二面的学生的word评估文档,发送到技术的二面复试官
  8. 二面复试官查收email,下载word文档
  9. 二面面试官第2天面试后,做同样的事情,把二面的评估记录追加到word文档。。。。(后面还有HR复试。。。)

填写面试评估表示的时候都是通过word编辑,通过gmail发送评估记录,HR汇总再分发,再汇总,期间遇到各种问题。

a.面试评估记录到word文档中不方便共享,追踪: 一面到二面还得拷贝文件,或者一个个邮件发送。
b.各个面试官的文档还需要HR或者小叮当额外的汇总。
c.苹果上面对docx的支持不好,有的机器装的open office,有的是pages,有的是ms office,不同机器上的格式不一样,调整起来非常麻烦。好几个人熬夜到晚上1点多才弄好简历。
d.由于墙的问题,gmail邮件经常不能使用,外地网络不好,VPN也进不来。

引子

9月校招过程中填写和汇总的面试记录的工作非常枯燥,繁琐,流程繁杂,加上南京的面试量比较大,前面两天里我和大部分HR都加班到晚上1点半才填完面试评估表,这些过程中的大部分本是技术可以通过系统来的简化的,但我们却在不断地重复,因此而感到非常地痛苦不堪。

国庆节最后一天,10月7号晚上8点翻开9月发给唐灏的校招总结邮件时,在想自己能做些什么,不希望到了10月的校招仍然如9月一样疲惫和枯燥,于是毅然决定整理需求,找华杰一起花两天做一个简单的web版面试评估工具。

工具需要有如下功能:

在时间上,由于10号开始1面面试了,希望系统在9号晚上可用,希望8号,9号两天可以开发完。给了华杰一些建议:之前开发的众包系统是否适合做这个事情。如果不合适,用django开发一个这样的工具是否可以2天内完成? 但实际后来都是华杰一个人做的,而且华杰只用了1天时间就出了可用的MVP版本,远出乎我的意料。

校招过程中,我把系统拿到学生看,找学生估计需要多长时间开发,答案在30-60天不等。 校招结束后,我找team里的开发人员估计这样一个系统需要多长时间开发完,有的答案是一个人2-3周,有的是1个月,有的是2-3个人2-3周。

过程

两天的时间,经过了不下10次的上线,这个产品实现并交付了如下功能:

  1. 学生的面试评估记录的添加、编辑功能
  2. 点评域账号的集成,可以直接使用域账号登陆
  3. 面试官管理,只有面试官,校招HR可以登陆系统
  4. 面试评估记录的打印
  5. 面试评估记录的批量导出
  6. 面试评估记录的搜索,排序,过滤 (可以按照名字搜索,按照初试,复试成绩,面试官,分数等维度排序,可以按照城市,学校,初试结果,复试结果过滤)
  7. 学生基本信息的批量导入 (导入以后可以开始初试)
  8. 记录所有的操作日志
  9. 可以通过外网域名访问服务

截图如下,列表,查询,筛选页: Alt Text

面试评估录入页面: Alt Text

总结回顾

那么,这个校招评估系统,是如何用2天开发出来的。 华杰和我一起做了一个回顾。供大家参考。 下图是2天发生的事情,按时间轴如下: 2天开发回顾

这个系统的开发过程中我们的收获总结如下:

1.不做完美的系统。细化目标,分解目标,可以很快交付MVP。

2.这次开发有明确的目标,清楚要做哪些事情,所以开发效率可以很高。

3.通过不断地快速迭代,半天之内上线1-3次,尽早交付验证产品,可以快速根据用户所需做出调整。

4.系统设计,产品设计遵循KISS原则(keep it simple and stupid)。比如表设计,是用多张表还是单表,可参考附件pdf中的详细描述。

5.留意细节。功能谁都能做,但产品的易用性往往易被开发人员忽略,但对用户来说却是最重要,举个例子,编辑页面内容比较多,有5屏,开始的时候没有导航,HR要找到填HR复试记录的地方,要往下翻5屏才能找到,后来我们加了导航,HR只要点一次导航就可以定位到要录入数据的地方。 还有一个例子,右侧有很多筛选条件,起初学校筛选在最上面列出来,但学校非常多,本科加研究生学校有上百所,需要使用其他条件,比如城市,初试结果,复试结果筛选,就需要往下拖好多屏。后来就把学校放到了最下面。用起来就舒服多了。 还有很多类似的例子。华杰看过一本书《细节决定成本》,跟大家推荐。

6.做自己用的产品,自己做的产品自己要用。在使用的过程中自己就会发现很多问题,比如5中的几个问题。 后来到其他人反馈好多问题的时候,我们已经修复上线,或者正在上线中了。

7.使用快速开发框架(这次用的django),重用以往项目积累的模块。

8.小而美的团队,1-2个人搞定所有的一切,包括开发,测试,上线,申请域名,创建数据库。。。如果我们要等QA测试,要找运维配置nginx,要找DBA申请数据库,不停找DBA更新数据库表结构,还要找DBA导入数据,不可能在1-2天内就完成这样的系统开发。

9.开发语言和工具是非常重要的,用的python脚本语言开发,一个命令即可发布,如果用java,需要编译,打包,不停重启服务,也不可能做到这么快。在合适的场合使用合适的语言,比如python/go/lisp都非常不错。

10.设定时限,挑战自我。天下武功,唯快不破,我们没有时间去等1-2个月开发完一个这样的系统,只有2天的时间。当我们计划有2个月做一件事情的时候,会有2个月的方案,真的就需要2个月了,而中间会有大量的浪费,当我们用2天来做一件事情的时候,会逼迫自己把系统的设计,产品的设计做得清晰,简洁,产品做得恰到好处,切中用户痛点,没有多余的功能。这一点在之前的多次hackathon中深有体会。设定时限,能帮助我们真正地做到MVP,快速迭代。

实际上,跟华杰一起回顾,我们认为开发效率还可以再继续提高,在回顾中,总结到还有多个方法能大大提高功能开发,产品维护效率的地方。如果用了这些方法,系统甚至可以用更短的时间完成。

这次的开发过程,简要总结如下:

小而美的团队,做自己用的产品,找到明确的问题,设定时限,用正确的语言和工具,清晰地拆解目标,不做完美的产品,尽可能快地交付最小的可用版本(MVP),不断验证用户需求,快速调整,持续改进。

经过两天开发出来的校园招聘管理系统,在成都,北京,以及后面上海的校园招聘中全面使用。一方面得意于我们用正确的方法做正确的事情,另一方面,也得益于HR提前已经梳理好比较完善固化的线下招聘流程。