【.com原创文章】雪球目前正在进行C轮融资,员工总数超过120人,其中工程师占比过半;网站注册用户数千万级,日活跃用户数百万级。以公司团队的发展为线索,针对已经经历的阶段和未来将要经历的阶段,描述一下我认为技术团队和CTO在不同阶段的主要职责是什么。从“天使轮”到“D轮”,CTO在不同阶段的职责。天使轮是验证创业者想法的阶段。这时候还没有完整的技术团队,东西很多,技术含量也不多。比如我们当时有一个基于Discuz的论坛,官网是外包团队搭建的。后来,雪球的原型也被外包了。整个团队不到10人,这很正常。使用所有可用的外部资源,使用外包、开源产品等,只要你能验证这个想法。A轮这个阶段,需要保证计划的产品能够如期发布,反复验证idea。这时候要解决的问题是能不能用,而不是好不好用。资源紧缺的时候,需要专注于核心功能,不要贪多求多。对于技术团队来说,肯定是使用开源框架和开源产品来搭建架构更好,这样才能保证不会花费大量时间去开发复杂的底层基础设施或框架。为了提高效率,可以使用一些新技术。一般来说,新技术的出现是为了避免上一代技术的一些缺点,提高效率。我们在这个阶段开始使用Node.JS。要知道在2011年,可能很多人还不知道Node.JS是什么,而雪球将这项技术应用到了生产环境中。这个技术给我们带来的好处就是前后端分离,两端效率大大提升,前后端独立迭代,只要API兼容即可。这对于我们当时的产品开发快速验证产品功能具有决定性的意义。这种思路一直在延续,包括Scala、SpringBoot、Docker等技术的推出,都是基于类似的思路。B轮B轮阶段,雪球已经分成了三个业务组。现阶段没有专职运维和测试团队,所以运维工作由开发完成,测试工作由产品完成。此外,我们现阶段专注于项目管理。由于产品功能和用户的增长,现阶段人员的扩充在所难免。突然有一天,你发现站会的每个同学都说了几句,开会就开半个小时。于是我们开始拆分团队,按照职能划分,重新划分职能划分的团队。过去,他们是前端团队、移动团队、后端团队、设计团队和运营团队。现在是社区团队、市场团队、组合团队。每个业务团队都有前端、设计、运营完整的学员。所有的产品迭代都是由业务团队驱动的。在这种情况下,我们的项目管理方式是:各职能团队基本遵循SCRUM的迭代方式,每两周做一次开发和测试迭代,提前一步迭代产品功能和设计,每周进行产品演示,确保产品满足所有期望。职能团队内部每天都会有站会,每周都会有各自项目的周报。周报会说明项目的进展情况。如果有延迟,将使用红色突出显示来指示风险和原因。对于跨职能的管理,特别是需要发布的app,我们采用版本火车的方式,即指定每个版本的提交日期,然后每个团队根据自己的计划选择拿哪个版本。组长每周1-2次沟通。通报各自团队的项目进展,了解彼此的产品特性,确保相互依赖的部分按预期实现。这些方法简单有效,沿用至今。C轮在C轮阶段,经过两三年不间断的功能开发,公司终于迎来了业务量的大爆发,业务团队也发展到了5人,为了更好的分工,我们引入了专业的SRE团队、测试团队、平台团队。比如运维团队负责基础设施的建设和维护,平台团队负责各种基础框架、类库、中间件的建设和维护,业务团队专门抽时间进行系统改造和推出。事实上,大多数时候,业务团队和几个支持团队是一起前进的。这样的组织架构可以充分发挥各个团队的优势,分配任务也更加明确。百感交集,我们的系统开始经常出现各种问题:程序负载高,数据库查询慢,缓存慢等。开始时毫无头绪,逐渐增加数据收集后,发现高峰期的请求量是过去的10倍以上。这个阶段非常关键,尤其是在数据、性能、架构方面,我们投入了大量的精力,做了很多的稳定性工作。加强数据采集就是尽可能采集所有的数据,然后以图表的形式展示出来,然后根据数据的突然变化设置报警。以前是因为量少,所以不管你怎么实现,在现在的服务器配置下可能都不会太大。问题。即使程序本身没有BUG,但如果数据量很大,瓶颈可能会出现在任何地方,因此需要尽可能多地收集数据,了解所有系统的细节,为系统的改造和扩容做准备。在性能方面,我简单介绍几大对策。还有一个要注意的就是时刻保持警惕,在收集资料的基础上多观察总结。我们不怕问题,回避问题是不可能的。主要的恐惧是我们不知道问题,我们不知道为什么会出现问题。监控报警可以预知未来并实时提醒,可以在用户察觉之前消除危险。系统重构的主要重点是将单个项目拆分成微服务,拆分相应的缓存数据库等资源,因为之前都是混在一起的。我们对架构最大的改变之一就是将单个项目拆分成微服务,这涉及到架构选择、标准化实现、资源拆分、代码重构、API兼容性测试、灰度上线、数据监控分析等一系列复杂的步骤.这些都需要非凡的细心和耐心。我们花了一年多的时间才将所有服务完全迁移到新架构上。D轮虽然我们还没有进入D轮阶段,但是我们已经开始做大部分相关的事情了。我们有更多的业务团队,更多的工程师,所以我们会更加关注流程、规范、运维、测试等提供的服务工具。随着参与项目成员的增加,之前描述的开发流程本身并没有太大的变化,但是随着新人的加入,如何相互传递信息就成了一个问题。所以我们花了一些时间整理了之前做过的最佳实践,包括项目管理流程、角色定义、阶段性输出、产品文档规范、技术系统设计规范、codereview规范、灰度和上线规范等等基本涵盖了大部分从需求到上线的场景。这部分的归纳可以让所有参与项目开发的同学对同一件事的理解在同一层次上,从而更容易理解和参与。在运维测试基础设施建设方面,现阶段我们逐步开始将之前的手动和半自动脚本工具系统化和服务化,将最佳实践固化在工具上,只提供有限的灵活性。.这样做的好处是运维测试的同学可以完全从碎片化的需求驱动向服务提供者转变。几乎大部分开发同学的运维和测试需求都可以通过基于Web的自助式工具完成。比如我们自研的基于Docker的在线和编排系统,开发同学可以通过这个工具点击几个按钮,将Git中的代码发布到各种开发测试灰度在线环境,并自动收集日志到数据中心.、监控系统和报警系统。监控报警系统预设了很多选项。如果需要,开发者可以完全自定义各种图表和各种报警项。测试同学提供的持续集成环境、静态分析、API自动化测试回归工具、UI自动化测试工具,方便开发同学使用。测试同学提供更多的工具支持,以及如何编写自动化测试代码。支持。综上所述,我们不需要非常庞大的运维和测试团队来支持更多的开发团队独立解决业务问题。毕竟,业务团队是最了解自己业务的人。技术团队建设之路技术团队建设的人才选择每个团队都会有自己的风格和做事原则,一般都符合公司创始人的某种特点和风格。我们在团队选择上采用了两种不同的方法:证明你不行的方法。听起来很奇怪。这种方式意味着通过我们招聘流程的学生,我们都倾向于认为他们是好学生,所以我们会最大程度地信任他们,在入职第一天开放所有权限,参与所有讨论,代码可以上线,团队无条件支持。除非结果很差,比如不活跃、不活跃、代码质量差。这倒是没有问题,毕竟他们不熟悉!我们会一起总结,给他机会调整工作,甚至换团队。如果***的所有措施经测试都失败了,就证明他不行,我们只好劝他退出。证明你的方式。这也很有趣。这意味着如果有人可以提出任何项目或计划,我可以做到。那么只要你能给出当前方案中存在的问题,解决方案,方案的设计,如何上线,如何测试,如果大家觉得没有问题,那么这个项目就是你的了.这样的学生,手上肯定会有很多重要的项目。他能迅速成为团队的核心,靠的是积极主动、先人一步、敢于担当的品质,这是我们特别提倡的。当你对某些同学的能力或行为产生怀疑时,如果不能下定决心迅速解决,最终会给自己和团队带来极大的痛苦。这可以分为两种情况:有同学确实跟不上团队的发展,但是他们一直在努力,你不忍心让他们走。如果时间长了,会严重影响团队的效率。能力比较强的学生,但过于个性化,不能以一己之力很好地配合团队。他们与相关职位重合,未能填补合适的人选。改变。回过头来看,短痛不如长痛!技术团队建设不可或缺的“一对一沟通”日常一对一沟通是团队建设中最不可或缺的环节。一开始,每隔一段时间,我都会和所有工程师进行一对一的交流。除了理解思路和传递信息,我觉得这个过程很重要:有什么问题直接指出来,让对方清楚的明白问题是什么,如何改进。如果不够直接、不够明确,可能会让对方陷入误会。误会无助于解决问题,所以不要不好意思,不要害怕伤害对方,我们都是成年人,客观明确的表达是对对方诚信的尊重,也是上级对下级的责任。如果公司业务发展的很好,特别是在高速发展的时候,没有什么大的问题,但是要清醒的认识到,危机随时可能出现,要保护的关键人物一定要保护好。到位,任何沟通不到位或者激励不充分都可能对业务产生比较大的影响。技术团队建设的两条招聘渠道招聘渠道数以千万计,其中有两个是独一无二的:用户和内部推荐。如果一个用户对现在的产品感兴趣,甚至是资深用户,那么沟通成本就会低很多,加入公司后通常也会更加主动。我们现在有很多工程师是用户转过来的。他们进入后,在投入程度、业务参与度、对企业的认同感、服务时间等方面都非常突出。有的学生甚至可以被降级,减薪。当然,他们的职位和薪水已经比以前高了。推荐是另一个重要渠道。转介的时候,现在的同事已经帮忙筛选了。他们一般都是很般配的,引荐的奖励肯定远比猎头费划算。一个人选是否合适,我们认为最重要的不是经验,不是学历,不是资历,而是价值观。雪球希望工程师有什么价值观?积极主动、客观、勇敢、追求效率、追求技术、追求结果。至于其他方面,是男生还是女生,毕业于什么学校,发型长什么样,我们并不关心。***,我们在面试的过程中一定要诚恳,尤其是在让应聘者上门的过程中,一定要站在对方的角度去沟通。比较好的同学手里有3-5个offer很正常,怎么沟通?我一般希望他说说其他公司或者职位,我会帮他分析利弊,帮他根据自己的情况想想怎么选择。我不会说其他Offer一文不值,我会客观评价。这样做的好处是我们知道招聘市场上其他竞争对手的优势是什么,即使以后他不选择我们,我们也可以成为好朋友,经常在QQ和微信上交流。当出现问题时,您总会想到我们。当时我是很诚恳的邀请,后来以这种方式过来的学生也不在少数。另外,在沟通的过程中,一定要知道承诺一定要做到,不能做到就不要说什么,否则就是给自己挖了个大坑,***会绝对对付不了它。任何团队的成长都是一路磕磕绊绊。我常常想,如果回到5年前,我会怎样去规划那些事情,哪些事情我应该更加注意。团队建设和招聘再好不过了,这是一个长期持续的过程。最需要改进的地方是什么?我会选择更早的投入到工程实践上,投入更多的精力,包括两个方面:业务开发,大部分公司一开始都会进行业务开发,如果你不关注质量、架构、代码一开始,虽然后面可以重构,但是会很痛苦,所以从一开始就一定要注重质量,从人到代码到测试的标准一定要高。放松不能被破坏。这也会为团队形成一个非常好的氛围。即使是新人也会不由自主地习惯,不适应的很快淘汰。以后需要重构的时候,因为前期质量好,测试覆盖率好,可能不会那么痛苦。基础设施,当没有持续集成、持续部署、运维自动化、监控告警等基础设施时,我们工程团队的生产效率不会高,后期接入这些需要花费数倍的时间和精力.此外,我们必须特别注意监控和数字。如果我们对监控和数字不敏感,感知不到系统的任何变化,那就很危险了。同时也可以提高效率,避免一些人为失误,对于整个技术团队的技术积累也是非常有意义的。王冬雪秋CTO,在互联网行业工作11年。曾在国美在线、宝宝树担任高级架构师。现在雪球是CTO,负责雪球的产品技术团队。专注于团队建设、高可用架构、高效优质运维、测试、开发、运维和测试自动化服务。以上内容节选自《CTO训练营》一书《CTO说》,根据乐视CTO杨永强、360副总裁谭小生、30多位CTO训练营导师的课堂分享内容整理改编CTO李钢江、财务CEO华夏段年、极客邦科技总裁迟建强等向谁学习,更多内容请查看:https://item.jd.com/12065279.htmlCTO培训营地是一个面向中高端技术管理人员的学习和社交平台。自2016年推出以来,受到行业骨干技术力量的欢迎。邀请业内资深技术高管、科技型投资人和科技创业者,打造科技经理人MBA,帮助中国培养有潜力的技术经理人成长为未来技术的领军人物。CTO训练营第四季正在招募中,你想加入吗?http://x.51cto.com/?51cto【原创稿件,合作网站转载请注明原作者及出处.com】
