对于提供IT专业服务的公司来说,具备专业服务能力的人才和团队是企业的核心资产,直接决定企业提供服务的能力,进而影响企业的盈利能力。当企业处于快速发展阶段,人员规模迅速扩张,每个团队都充斥着许多新人。在这种团队杠杆(Leverage)非常高的场景下,如何保持原有的专业服务能力,不被稀释,并为企业的持续盈利做好人才储备,是摆在所有团队面前的一道考题。
背景
过去的一年半是ThoughtWorks西安办公室迅速发展壮大的一年,其人数规模从不到十个人发展到目前的七十多个人。在此期间,我们和一家国外的客户展开了长期的战略合作。面对大量新招聘的人员,特别是毕业生的加入,顺利实现交付并且与客户维持良好的合作关系给团队的能力建设带来很大的挑战。下面我会以Home Ideas团队为例谈谈我们在这方面的经验。
一年前Home Ideas项目的开发工作正式启动时,初的五个开发人员中有四个是新人,其中两个新人虽然有几年工作经验,但是却没有与该项目相关的技术背景,还有两个新人是刚入职的女毕业生,技术基础非常薄弱。在随后的日子里,又陆续有新人加入,一个十人左右规模的团队内,多时一共有五个毕业生,开发人员中只有一个已经通过了试用期。不仅如此,团队的人员流动还非常频繁,项目开始后的半年内,先后有两个有经验的新人和一个毕业生离职,并且平均每个月都有一至两次的人员变动。为了应对这样的人员结构和能力状况,Home Ideas团队进行了如下尝试。
编程作业
紧迫的莫过于培养毕业生基本的读代码和写代码的能力。一般认为结对编程是好的培养毕业生的方式,但是在实际中,和毕业生结对的效率太低,讲 授的很多内容都很难让毕业生在结对的时候接受并消化了,主要原因是毕业生不熟悉项目的代码和技术。Home Ideas团队每天让有经验的同事给他们布置一些作业,主要是让他们去理解和掌握项目中的代码和技术,并且这部分代码通常和他们正在做的用户故事相关,第二天要求毕业生给布置作业的人讲述他对那部分代码的理解。通过这种方式,能让毕业生迅速熟悉项目的代码和技术,使得他们在结对编程中的学习更有效率。
另一种作业是基本编程能力的练习,我们通常用一些典型的面向对象编程练习题。通过和毕业生一起对题目分析,将解决方案拆分成一个任务列表,要求毕业生必须用TDD的方式,每次完成一两个任务,并提交代码到Github上,布置作业的人会检查并提出重构的建议,然后毕业生修改后提交,通过检查后,再做下一个任务。我们将这种“小步前进”式的编程作业称之为“持续提交”(Continuous Commits)。经过一段时间反复的练习,能够提高毕业生的基本的面向对象编程、TDD、重构、任务分解等方面的能力。需要注意的是,布置的作业一定要检查,否则,相当于没有布置,只有这样才能形成一个完整的戴明环。