我是*,前好未来励步事业部的前端负责人,LeapFE是我们团队的简称,曾几何时,我们团队的共同愿景是成为业界知名的前端团队。而今年由于政策对公司毁灭性打击,这个愿景要搁置了,但对于我们绝大多数人,已经或者即将会有更好的开始。
最近这三年,每年春节假期前一天我都会写个团队纬度的年终总结在公司内以周报的形式发出。虽说今年有些不同,但却是最值得总结的,无论是对于团队还是对于我个人来说。
LeapFE从最开始的 5 人,到后来近 35 人,再到今天的在职人数0,大概经历了三年半的时间,这是段美好的经历,很多个精彩瞬间历历在目,是我成长最快的阶段。
业务开发中成就感
相对于“造轮子”而言,更让人兴奋的可能就是自己研发的产品被更多人使用,更多人依赖。一个资深的程序员,可能不会对一些听起来高大上的概念动容,但一定会有几个记忆深刻的产品。我们经历过成功的项目,也有失败;做过无用功,也有日夜兼程带来的喜悦。三年时间里,我们支持数条业务线,教学、营销/流量、数据、客服等等,每年服务数十万的学员。
我们从零到一研发了自有的 课件系统,铺遍了全国所有校区,至今零事故;
我们做了让大家朋友圈刷屏、家长泪目的《年度学习报告》;
疫情期间,我们是公司内第一批上线“在线实时互动课件”的产品;
我们做了统一的内容制作平台,输出了数千讲课件,数万个互动习题;
我们是第一批做伪直播的机构,“摩励秀”成为孩子们学习的动力;
我们创建了从设计稿转换成课件包的方式,获得了专利;
我们在业余时间支持了公司 7w 人的年会抽奖程序;
我们在央视新闻里看到了我们的产品的身影;
点点滴滴构成了团队的记忆线。这份经验积累对于我来说是难得的。
业务部门中的技术建设
三年多的时间,团队技术从“野蛮生长”到逐渐规范化。最开始我们 5 个人的小团队,真真正正享受着“开发自由”的感觉。后来随着团队规模的变大,我们做了一系列的技术建设。
随着接手的项目也越来越多,我们遇到了技术栈不统一,代码风格不一致,lint规则不统一的问题,同时也有部分项目技术栈老旧不易上手等问题,同时基于 React Hooks 刚刚发布,市面上还没有一套基于 Hooks 的成熟解决方案,所以我们自研了一套开发框架 Luban。
基于稳定性及性能保障,并且更容易异常追踪的前提,我们开发了集成错误、性能、行为一体化的 sdk 以及数据看板,并提供实时周报、异常报警等。
为了解决互动课件开发提效的问题,我们针对不同课件场景,通过图形化编辑器(No Code)、模板化(Low Code)、D2C(Design to Code)不同的方式去实现。
为了统一中后台设计以及交互规范,我们封装了自己的 UI 组件库,以及创建了公共的业务组件库。
为了提升开发效率,我们搭建了私有npm,创建了各种公共业务组件,比如 jsBridge sdk、中后台业务组件、小程序业务组件、课件相关业务组件等。
为了统一编辑器环境,我们发布了自己的 vscode 插件包。
为了降低低级问题,我们规范了发布流程、cr流程,增加了性能及安全审查等环节。
同时我也会提醒自己要做到更加务实,需要抱着真正解决问题态度去搞建设,我觉得技术建设应该是因团队而异的,过度建设或刻意的流程化是无意义的,甚至会给团队带来很大的负担。
在励步这三年,也经历了几个无用功的项目,自己的“技术观”逐渐成熟了,少了很多“自嗨”,逐渐懂得了技术服务于业务的道理,开始更多的去关注性价比、能否落地等。当然我们有时候也不能完全理性,不然会扼杀一些创新,所以需要找到平衡。
温和的管理方式
三年多的时间,随着团队人数落地我的心态也有着不同的阶段。最开始的半年我把自己定位成一个大头兵,大包大揽,目的是为了让自己迅速适应工作,得到更多的资源。另一方面,对于之前的几位前辈,我也尽力的让大家舒服,尽量融入大家,而一切都异常顺利。
后来随着业务扩张,人数多了以后,大团队下面又分了几个小组,那时候我对于自己的定位迷茫过一段时间,没有目标,觉得自己离代码远了,没有安全感。
记得这种感觉持续了将近两个月,我有点无所适从,逼迫自己去看一些管理上的书籍,同时也参加了公司提供的各种各样的培训课程,星火训练营、金牌面试/绩效官、真北、情境领导力等等。我开始写双月OKR,再加上隔一段时间的述职,我逐渐懂得了这个阶段的工作重点,除了技术,还要多去思考,规划,找方向,定目标,做拆分,更需要找问题、挖掘痛点的能力。
没想到我成了之前每天鄙视的“写ppt”的那种人,才知道这活远比写代码要难数倍。而后我知道了如何定目标,如何拆解分工,如何推进,如何兼顾业务支持和技术改进,懂得了量化指标的重要性。
对于团队成员,我是个温和的管理者,这种风格容易营造轻松愉快的工作氛围,对于一些主动性高的伙伴,有更多的发挥空间。同时我也深知自己的不足,有时候会有团队的奖惩机制不足,目标紧迫感不强这类问题。所以后来的我,我意识到管理需要因人而异,针对不同类型的伙伴用不同的策略,大致可分为:指令、教练、支持、授权几种方式。
同时这几年,我变的圆滑了。
我从来都不是一个健谈的人,刚工作的时候都不敢和领导说话,有时候说话还会脸红,更别说是在上百人面前讲话了。不过这几年下来,这些对于我来说变的不那么难了。相对于纯开发的工作,我要面对形形色色的合作伙伴,产品,运营,教研,老师,客服,家长等等,我能够做到和不同角色用不同的方式去沟通,但尽量保持真诚和同理心。
我离职了
我亲身经历了一座大厦轰然倒下,这一年失去了很多,同时也见证了很多,想清楚了很多。我经历了一夜之间股票蒸发80%,几万同事的风雨同舟刷屏,看见无数学生、家长因为停课痛哭流涕,见识了一个伟大企业家的信念有多么坚定。
我从来没有觉得自己不幸,相反,对于普通出身的我来说,能够赶上时代的浪潮,吃到互联网的红利,已经是非常幸运了。
之所以选择离职,主要原因是因为团队,同时最舍不得的也是团队。对于裁员,我做不了选择,我怕我的选择给人带来生活上的困扰,也看不了一个个熟悉的战友接二连三的离开,所以,我逃走了。
聊聊面试
很幸运,对于已经 31 岁的我来说,找工作的过程还算顺利。
没有太多的面经,这几年我面试过很多人,面试中除了一些基础的硬性指标,比如一些笔试基础题、算法题、八股文需要多准备一些外,最重要的就是要想办法让面试官有眼前一亮的感觉,最理想的是你提到了他也不会的点,这样才能刺激到他。那么如何让他眼前一亮?一方面是简历写的内容,一定要每个都提前列好项目亮点,比如我的项目里用到的缓存方案比较特殊,那面试的时候就一定要重点突出,引导面试官往这里问。另一方面,要提前准备一些比较新颖的解决方案,但这里就可能靠平时的多积累了。
再举个例子,比如有一个问题问我们抽奖页面如何防刷?首先我们要确定面试官这个问题是在问什么,这里是在问如何唯一标识用户?那么这时候如果我们直接回答做登陆、或者用手机号什么的,那肯定不是他想要的答案。其实这个问题是个开放性问题,有时候面试官自己也没有一个标准答案。那么这就提供了一个可以让他眼前一亮的机会,因为我们回答的方向很多。
针对这个问题,我们首先要区分场景,是不是有登陆?在什么容器里?微信还是所有浏览器都可以访问?如果有登陆、或者在微信里,我们通过账号、或者 UnionID/OpenId 做标识。那如果没有登陆,也没有容器限制呢?那我们可以通过IP、种 Cookie 的方式来辅助限制,除了这些还有吗?是的,我们需要说个不常用的方案,我们还可以用 Canvas指纹 去标识设备。
那么针对这个问题的回答,面试官可能会有两个眼前一亮的点,一是我们区分场景,二是 Canvas 指纹的方案,虽然说现实场景下不一定能跑通,可能会有兼容问题,但这不耽误面试。
我们终将会有好未来
2021年,我们目睹了太多的大事记,有人说互联网的红利已经过去了,我觉得与其说是红利过了,不如说现在整个行业更加冷静了,大家都更加谨慎了。这几年,我们亲眼目睹了那么多的变化,其实都只告诉了我们一个道理,那就是跑得快不如跑得稳。2022年,我们可以静下心来,想想什么才是自己喜欢做的、有能力做得、能够长期做的事情。时间好像一趟列车,载着我们一路前行,回望过去,总有一个地方曾让我们长长地驻足,我们终将会有好未来。