@zhangnian88123
2020-05-27T16:17:59.000000Z
字数 2829
阅读 1406
更新于:2015-05-06
一开始的时候,现公司技术团队只有3个人,一个C++后台,两个前端(1个Android和1个iOS),但是每个人都能独当一面,不仅仅需要快速实现产品上的需求,还需要对整个技术体系和未来1-2年的技术方向有个大致的规划和把握。这个时期团队的初创成员是很重要的,我认为主要有以下几点要求:
1. 责任心和投入度
一开始的时候,由于需要快速的做出产品原型,因此前几个月加班的时间会特别长,这期间往往都是1个人负责1个系统或模块,此时就需要负责人不仅仅能快速的实现功能上的需求,还需要保证所负责模块或系统的稳定性和高质量。如果没有投入足够多的精力去做这件事情,是很难一个人抗下前期比较繁重的开发任务的。
2. 技术上的硬实力
做出产品原型也许只有几个月的时间,尤其是创业团队,每个人以前的工作经验和技能都不一样,很多时候遇到了问题只能靠自己独立去解决,其他同事可能由于技术背景不同,无法提供帮助,这时候就是考验个人技术硬实力的时候了;另外,除了尽快的开发新功能之外,还要保证代码质量和稳定,也就是Bug尽可能的少,这对于一个前期没有Code Review和专业测试的创业团队来说也是比较困难的。
3. 有产品思维
在创业团队,人人都是产品经理,作为程序员,不能写完代码就了事,更多的是要参加到产品需求的讨论中,明确为什么要做这个功能?有没有更好的方式?有没有其他的选择?先从产品角度完全了解和把握需要做的事情,然后再去写代码实现 。
前期的技术选型是非常重要的,往往决定了后面1-2年的技术方向,所以,从技术选型方向,主要需要从以下几个方面去考虑:
1. 团队人员配置
主要是考虑团队人员的技能背景和工作经验,最优的情况就是团队成员有着类似的技术方向或是相关经验,但实际上很难达到,所以就需要抽取大家技能上的一些交集,选尽量大众化的技术方向,不搞偏门、冷门。
我们公司前端和后台都用的C++,前端框架用的是Cocos2d-x,选用原因一是已经非常成熟了,有非常多的资料或是案例可参考;二是有C++背景的同学就算之前没有用过这个框架,也能很快的上手;三是这个框架是跨平台的,支持Android、iOS、WP,减少了多平台开发的成本。
2. 是否能满足前期快速的产品迭代
前期由于产品的快速迭代,选用一些表达力强的语言作为原型开发,也许更为合适。
比如,在我们系统中有些非核心功能和系统是用Python写的,选用Python的原因就是因为它比C++表达能力更强,相同的一个功能Python 10行代码就能实现但是C++可能需要50行去实现。所以,对于一些非核心的,对性能要求不高的模块或系统,可以尝试使用更合适的技术去实现,不能一成不变,也正是因为这样,就需要团队成员是多面手,也就是现在比较流行的“全栈工程师”。
3. 技术选型上是否足够成熟
我不推荐创业团队一开始就尝试新技术,新技术往往带来风险,一是学习新技术需要时间,能到达工程用途则需要更多的时间,二是遇到问题时可参考和查阅的资料也少。创业团队往往是没有试错成本的,所以,尽可能的使用当前成熟的、经过大量实践检验的技术,可以降低技术选型上的风险。
在公司的技术架构上,我的考虑主要有两点,1是简约,2是可扩展。简约的含义并不是简单,简约是指:架构上恰到好处,不引入额外的复杂性,能满足当前的需求即可。另外,由于项目的不断迭代,能否快速的在原有架构上新增功能,能否通过扩展来满足日益增加的性能和可靠性需求,这就是第二点:可扩展。
我认为不管是产品上还是技术架构上,都是在不断迭代和进化的,所以,前期不需要考虑的100%周全,往往也考虑不到100%的情况,这种情况下,就需要产品团队和技术制定一个产品的迭代规划,比如两周一次小版本发布,可能就包含1-2个小功能即可,一个月一次大版本发布,这也是目前大部分互联网公司采用的开发流程。
经过了创业前期,也许是3-6个月,产品已经初步投放到市场了,经过市场和用户的检验,产品人员应该对产品的规划和需求更明确了,所以,作为技术团队,在这个阶段所做的事情主要有两点:
**1. 保障产品在线上稳定运行。 **
**2. 高效率,高质量的进行新功能开发。 **
另外,经过了创业前期,技术架构和方向上比较稳定了,不可行的方案已经被淘汰,可行的方案保留了下来,所以,此时的人员招聘上我主要考虑以下几点:
1. 坚实的基础和较强的学习能力。
2. 有一定的架构设计能力,因为随着系统的日益庞大,可能需要他全权负责一个独立的模块或系统了。
3. 有自己独立的思考和见解,能对当前系统提出自己的建议和优化措施,这样我们的系统才会演进的更好。
现公司后台团队有8人,除了一位应届生之外(主要是做网页方面的),其他7人都是工作4年以上,按照主程(副主程)的要求去招的,因为需要他们每个人都有能力去独当一面,能够自己去设计系统和做出决策。目前团队在整个公司技术上的影响力和认可度都是第一的。
大公司的一个优势就是他们有非常多的技术积累,比如腾讯的《海量服务之道》课程,华为的《IPD软件研发流程》等,并不是一朝一夕就搞出来的,而是经常长时间的实践,在摸爬滚打中慢慢积累下来的。对于创业团队,技术积累一样重要,比如可以帮助新员工避过那些曾淌过的坑、可以使得优秀的设计方案或实践得到传承。
现团队在技术积累上所做的工作有:
1. 每2周内部分享一次,各成员轮换;每2个月外部分享一起,比如请合作方公司的同学来进行交流。
2. 建立团队WiKi。
3. 开源(有计划将公司的基础框架开源,目前数据中心已开源),好的开源项目可以提高公司在业界技术上的知名度,招聘也方便些。
随着线上用户的增加,这一阶段除了新功能的开发外,还需要搭建一系列监控和告警系统,在初期线上出现问题是很正常的事情,如果没有监控告警系统,那我们就无法第一时间知道系统的运行情况,出了问题也不能第一时间处理,这对于用户来说是不负责的行为,用户也会失去信心。
在现公司,后台团队开发了近10套的监控告警系统,对系统进行全方位24小时的监控,举几个实例:
1. 返回码系统: 监控手机端APP的运行情况,比如是否崩溃,是否发生异常。
2. Nagios系统:监控服务器基础指标和基本的运行状态
3. 一致性系统:检测外网系统的一致性和发布完整性。
4. 数据备份系统:对数据进行日常备份。
5. 短信和邮件告警Web API平台:用于提供通用的告警接口。
在这个阶段,也许是1.5 - 2年后,不管是产品上还是技术上都已经比较成熟了,此时需要的是扩张自己的知识面,以应对未来的变化,只有知识达到了足够的广度,才有能力去选择合适的技术去解决合适的问题。
比如,现后台团队已经开始从以下几个方面着手去学习和应用一些技术了:
1. OpenResty:Nginx + LUA的方式快速开发web服务。
2. Docker:使得环境的搭建更加简单。