互联网创业公司技术团队的管理

这几年基本上是在几家互联网创业公司度过,从最开始的iOS + 后端开发到最后专注于后端开发,有过一些感悟,也踩过一些坑,对此总结了一些经验和失败教训,这里简单记录一下。

互联网创业公司的技术团队内都是比较朝气蓬勃的年轻人,初期的一般的构成是一到两个相对资深的程序员和一些资历尚浅的应届生或有1-3年工作经验的程序员。下面主要从技术选型、日常开发、代码审查、项目进度管理、部门间沟通和协作、团队建设等方面来细说。

技术选型

互联网创业公司成立初期,甚至还没正式成立之前,技术人员就必须考虑技术选型的问题,因为这涉及到今后整个技术团队的发展方向。互联网创业公司大部分是以web或者app的形式面向用户,当然还有一些其他的形式,比如智能硬件或者多者结合,这里主要谈谈web和app的形式。在技术选型方面,要充分考虑该领域比较成熟的技术方案,成熟的技术都有很多现成的库可以使用,当你遇到问题时,可以快速找到答案,因为这些问题很多人已经遇到过了。另外使用成熟的技术时,招聘上也有优势,你不需要因为采用了非常小众的技术而费尽心思地去挖人和招聘,这有助于降低前期成本和HR的压力。

当在团队内部推进一项技术方案前,请尽量调研市面上已经成功的案例,分析自己的业务为何需要采用新的技术方案,预估新方案的成本、开发难度、开发周期和可能对现有业务造成的副作用,不要根据个人喜好或仅仅是因为想尝鲜来推进/替换一个技术方案。

当遇到一个比较难以解决的问题时,一般都有两条路:一是用一种比较暴力的方式去解决,二是充分分析这个问题,找到一个完美的解决方案。前者速度快,能够在一定程度上“解决”问题,后者消耗人力和时间都多,但效果最好。选择哪个方式需要看具体情况,要考虑这个功能是不是业务的核心功能,后期是否会有更复杂的需求和并发量,如果回答是肯定的,就需要认认真真地分析这个问题,否则可以依情况采用一些取巧的方式快速解决。

技术和成本的关系也很密切,我们是使用云服务还是自己搭建服务器托管在运营商机房?需要为服务器的CPU、内存、硬盘、网络带宽等资源支多少费用?需要几台服务器?这些数据不能单靠想,最好要有测试数据支撑。建立一套性能测试标准,对你的系统进行测试,你才能知道什么时候需要扩容和缩容。

日常开发

代码版本控制是必须的,重要性无须多说。且应该是你在写代码之前就已经准备好的,不管是使用代码版本控制的云服务还是自建代码版本控制仓库,总之必须要做代码版本控制。

程序员们经常陷入一种自我矛盾中:到底要不要写测试代码,单元测试、集成测试、性能测试这些东西如果真的要全部实现,工作量会非常大,所有模块都配备完整的测试代码并不现实,所以我们需要甄别哪些模块今后可能迭代会非常频繁,针对这些模块最好要有相应的单元测试和集成测试,当你为这些模块的迭代忙得不可开交时你会感谢自己之前写过的测试代码。

建立一套运行持续集成(CI)系统也很重要,在每次代码分支合并,都自动运行代码拉取、自动部署、自动运行测试代码,这不仅有利于解放双手减少机械劳动,还有利于快速发现问题和修复。另外在测试过程中发现的bug,如果可能的话,尽量将其测试脚本化后加入到现有的测试脚本库中,时间久了以后你就会拥有一个测试宝库。

团队内需要制定代码规范,最好能写成具体的文档,每个新来的成员入职后阅读。在代码审查中,也需要互相监督代码规范的问题。代码规范的另一个很好的监督办法是使用一些LINT工具,在配置文件内设置代码规范,比如Python的PEP-8规范,使用CI实现自动化代码规范检查。

代码审查

代码审查是经常被忽略的一件事,有时候为了求快,做完一个功能就立刻提交到版本控制系统中,然后就测试。这其实并不是一个好习惯,这会让一些新手程序员养成很随意的风格:只要能实现功能就提交测试,出错了再改。理论上来说,每一次提交都应该很慎重,特别是项目参与者比较多和项目复杂以后。适当地引入代码审查机制是有好处的,可以在组内互相审查,提出改进意见。越多人审阅过你的代码,上线的时候出错的概率就越小,员工今后也会慢慢变得更加谨慎和深思熟虑。

项目进度管理

项目进度管理不能仅仅是项目经理的口头过问和项目进度邮件中的文字这种相对静态的东西,而应该是更加动态实时的。尝试使用一些项目进度管理工具,项目管理人员,包括项目经理、各个team leader需要时刻掌握这些信息,迭代项目进度预估的数据,使项目进度管理不是一纸空文。

部门间沟通和协作

互联网创业公司肯定不止一个技术部门,但技术部门都是非常核心的,所有需求的最终实现者。技术部门要配合的部门很多:产品、设计、运营、商务、财务,当然还有老板本人。做为最忙碌的部门之一,技术部门和其他部门的沟通和协作至关重要。

一般来说,建议在部门内设置小组,比如:web前端小组、web后端小组、app开发组等,小组内还可以继续细分,如果人员本来就非常少,就不需要分得太细,也可以按照项目来分,具体方式可以自己把握。每个小组设置一个组长(可能会有一个人身兼多个小组长的可能),组长会辛苦一点,日常组间沟通、和技术部门领导沟通、任务分配和时间预估等事项需要小组长参与,其余组员不太需要参与,可以专心做业务。另外在人员数量较多的情况下,为了减轻组长的压力也可以设置两个组长互为主备,日常切换由组内自己定夺。

团队建设

技术团队内可以组织一些技术分享会,可以由几个活跃分子牵头,将开发中遇到的问题总结出来,或者最近研究的技术心得,向部门的成员分享。这个活动应该是充分自由的,不应该称为团队成员的负担。

定期向员工征集书单(工作相关的),公司购买后员工可借阅。

制定导师计划,当新入职的成员是应届生或者毕业后工作不满2年(这个时间可以视情况而定),最好制定一个导师进行一段时间的指导。导师需要了解新人之前工作的一些情况,带他熟悉项目代码,加快新员工的熟悉进度,尽快投入到实际工作中。

不建议HR部门过多干涉技术部门员工的事情,比如KPI。技术部门的业绩应该有自己独立的一套评定体系。

在互联网创业公司中,技术部门的每个人都是多面手,经常要同时处理很多项目,因此对员工的自觉性、学习能力和学习态度有比较高的要求。要充分利用员工的试用期(考核期),在考核期内,导师必须观察和评定新人的能力和不足,帮助新人进步。一段时间内表现欠佳的,需要谈话,如果考核期到但表现还是没有进步的,要毫不犹豫辞退,这样也是对其他员工的公平。