我是如何突围传统行业的?

2021 年 5 月 7 日
 jchencode

背景

自我介绍下,四年工作经验,头两年全栈开发,后两年专职做前端,目前已达到高级前端工程师水平,经历过三家公司。第一家公司,电商行业,做阿里 ISV 供应商,为淘宝卖家服务,也是我第一次接触百万 UV 级别的产品,在第一家公司呆了两年,由于达到技术瓶颈期,遂跳槽,第二家公司,航运物流行业,呆了六个月(工作强度对我来说,是真的高),身体不适,没有同意转正。目前这家,担任项目管理和前端组长,两个角色,目前呆了两年,做了很多东西,把自己的一些想法跟大家聊一聊。

入职时的环境

这是一家做保险和金融行业的公司,属于传统行业的科技公司,有点外包的性质,当然,也有自己的 SaaS 产品,由于是传统行业的公司,技术栈相对互联网公司来说,稍微落后一点。我刚来的时候,上一个前端要辞职了,然后做对接工作(告诉我,有啥问题,直接搜代码),我算是接盘侠,前任留下的屎山,其他的,大概有以下几点:

前端组 4 个人

其中一个归 CTO (做后端) 管,另外两个在广东,我入职的时候,也没有确认,到底要不要带人。我来的时候,就已经在了,后面我领导跟我说,要带下他们,我当时压根就没有带人的想法,也是个坑。

历史项目有很多个,都是基于一套从 GitHub 上弄过来的项目框架

基于以上的原因,向领导提出过重构,没有同意,我认为可能有两个方面的顾虑,

项目人员能力较弱

前后端接口对接,没有相关的文档

产品画的原形 和 UI 设计稿不规范

列举了以上的这些点,烂摊子太多了,好在有一个点,领导的支持力度还不错,看我是如何突围的。

明确自己的任务

前端技术建设的核心目的,是为了提高开发效率,保证开发质量,为保障项目高质量按时交付,同时兼顾考虑中长期研发实际情况,结合团队实际能力,为未来做技术储备,为业务发展提供更多的可能性,大概将自己的分为以下四类

如何解决

首先,要对现有的问题进行梳理归纳,按照问题的优先级进行排序,然后,分阶段性目标进行实现,对于上面的问题,我大概整理了一张表格

问题 优先级 成本 目标
如何打造前端工程化体系 p0 高 提升整个前端团队的开发效率、按时交付、保证交付质量。
如何进行团队管理 p0 中 进行人才储备,提高团队人员技术能力
如何进行项目管理 p1 中 掌控全局,知道项目下的人都在做什么,资源协调

团队管理

人员管理

权限管理

主要是指代码权限控制,目的是确保代码安全,问题可控可避免可追溯

具体管理举措有以下几条:

前后端接口对接

前后端开发联调有一个严重问题,就是后端接口变动或者字段改动时,没有在事前事后通知相应前端开发,测试人员,导致效率底下,并且会出现各种异常情况。

因此,通过梳理开发流程,出接口文档,作为对接标准。

我们使用 apiDoc 来作为前后端联调标准。

但在实际情况中,还是会有一些接口文档和实际接口不符的情况发生,导致一些问题产生,这个我们也在思考。

前端工程化体系

刚入职的时候,由于上面的项目框架问题太多,之前也尝试过解决,但,解决不了,领导也意识到了这点,而且也有新项目进来,就让我重新搞一套项目框架。所以,我自研了一套基于 Webpack 的项目框架和工程化体系,做这件事的目的,就如我上面提到过的一样,提升整个前端团队的开发效率、按时交付、保证交付质量。

基础架构设计

Git 分支管理规范化

我们使用的是 Git Flow 分支管理策略

Git Flow 最开始是由 Vincent Driessen 发行并广受欢迎,这个模型是在 2010 年构思出来的,而现在距今已有 10 多年了,而 Git 本身才诞生不久。在过去的十年中,Git Flow 在许多软件团队中非常流行

分支命名规范
分支说明
提交信息规范

提交信息应该描述“做了什么”和“这么做的原因”,必要时还可以加上“造成的影响”,主要由 3 个部分组成:Header、Body 和 Footer。

Header Header 部分只有 1 行,格式为<type>(<scope>): <subject>。

type 用于说明提交的类型,共有 8 个候选值:

  1. feat:新功能( feature )

  2. fix:问题修复

  3. docs:文档

  4. style:调整格式(不影响代码运行)

  5. refactor:重构

  6. test:增加测试

  7. chore:构建过程或辅助工具的变动

  8. revert:撤销以前的提交

  9. scope 用于说明提交的影响范围,内容根据具体项目而定。

subject 用于概括提交内容。

Body 省略

Footer 省略

这样做起来的好处,这个项目下:

总之,一目了然。

开发人员基本流程

在这个流程中,开发人员只对个人仓库拥有可控权,无法直接改变公司仓库代码,当需要提交到公司仓库下时,需要发起 PR 请求,经过组长 CR 后,将其代码合并到公司仓库下。

主分支代码和线上代码进行隔离,由组长将指定版本的 Tag 发布到生产环境,再通过运营人员直接从 GitLab 上拉取指定的 Tag,然后打包发布。

通过以上流程,前端代码能保证高质量,高稳定性的状态,运行在服务器端。

工程化设计

要根据实际业务情况和团队规模,技术水平来做,关键是要形成一个闭环,所谓闭环就是从零开始到上线再到迭代的全链路,有很多节点,这些节点需要根据实际情况进行设计,避免过度设计。

定制 Webpack 项目框架

为何不是 create-react-app

create-react-app 是基于 webpack 的打包层方案,包含 build 、dev 、lint 等,他在打包层把体验做到了极致,但是不包含路由,不是框架,也不支持配置。所以,如果大家想基于他修改部分配置,或者希望在打包层之外也做技术收敛时,就会遇到困难。

为何不是 umi

umi 提供的功能很多,这也导致它太过于臃肿。而且你还要去学它的封装化配置,而不是学原生第三方库的配置,如果你只想要一些简单的功能,追求更高的可玩性,哪 umi 不太适合。

所以,我自己定制了一套脚手架,实现了以下功能:

解决了以下的问题:

完成整个编码过程的一个闭环:

这些节点要视实际情况,以最小成本去做,然后逐步升级。比如编码规范,我们是采用业界比较著名的 Airbnb JavaScript 代码规范,搭配eslint 、pre-commit 、lint-staged 、prettier 、stylelint 去进行约束。

这套项目框架,目前开发体验非常爽,在我司多个产品线上,投入使用,并已开源,**框架地址**,演示页面比较少,大佬们觉得不错的话,可以给个 Star 🌟,也欢迎给项目提 issues ~

业务场景

我们是做 ToB 业务,存在页面上大量使用表单的场景,所以,把我们的表单页面做成可配置化,实现了大部分页面表单配置化,减少前端人力资源投入。

针对公司的实际业务场景,其他子系统不会特别复杂,页面也不会多,共享一套账号体系,这里采用的思路是只有一个项目,不分主从系统,通过 Webpack 配置多页面,不同的子系统进入的首页内容不一样,加载内容不一样,菜单导航,则通过后端对每个租户进行区分,来做到租户看到的菜单系统不一样。

如果子系统特别复杂,有主从系统概念,可以考虑使用微服务设计,这里不做过多介绍。

静态资源

除了业务代码以外,前端还会有一些公共静态资源,例如 React 资源,Ant Design 资源,BizCharts 资源,以及一些图片文件等。

对于这些文件,是所有项目所共享的,假如这些文件分散在各个项目里,既没必要,也容易导致不同项目依赖文件不统一。

我们是放在 S3 上,做 CDN 静态资源加速,然后前端项目通过引入url 来使用这些资源,这样可以减轻自己的服务器网络带宽消耗。

项目管理

熟悉产品线业务

所谓技术服务业务,找产品了解现有的业务流程以及痛点,甚至未来要做的一些产品规划,好的技术架构,要考虑各种各样的业务场景,怎样才能结合业务的复杂度,设计出颗粒度更加细化的组件。

画出产品架构图

提升相关人员的能力

产品人员

需求频繁且混乱,决策摇摆不定、动辄推倒重来。市面上一个好的产品经理是很贵的,没个三四万是拿不下一个真正靠谱的能抗住复杂产品线的产品经理,但是很多公司老板是不愿意花这个钱,一般就会招个工作一两年的产品经理先过来,顶个位置把这个工具给做出来就行了。恰恰因为这样一个认知导致产品经理这一层他既没话语权,又不能让自己闲着,所以层出不穷的需求全堆上来了,而对于公司长久型的产品架构就把控不住,如果一个产品经理无法起到,上对客户负责,下对开发负责,不会对所有需求进行筛选,把需求只会丢给开发,不会进行工时把控和质量把控。甚至对现有产品有什么功能,都不了解,那么就不是一个合格的产品。

所以对产品经理的要求非常严格,因为一个公司,如果战略方向把握住了,那么核心是要看产品,能否把握住市场方向,非常关键。这样才能决定你是否能占有市场,由于我司是做一个 ToB SaaS 化的平台,所以,必须要求产品经理清楚的了解客户实际需求,需求背后的实际场景,提炼出来哪些是共性的需求,哪些是客户定制化的需求,然后再讨论,再进行落地实际的开发。

测试人员

对测试人员,尽量覆盖全所有场景,保证核心流程畅通,要求能找到复现步骤,提高开发解决 BUG 的效率。

设计规范

由于我司采用的是 Ant Design UI 库,所以设计标准,尽量都是按照 Ant Design 现成组件和样式来做,避免开发二次修改,参考这个链接 Ant Design 设计原则

某个列表页

普通的列表,和设计,产品都约定好,上面是筛选,下面是按钮,底部是表格展示。

某个详情页

详情页大量会使用到表单,所以直接使用 Ant Design 的 From 表单组件。

表单每行放多少个,都是以 Ant Design 组件来的。

这样带来的好处就是尽量避免定制化的开发,所有列表和详情都是按照这种风格来进行开发。

总结

上面这些,包含其他的,大概花了一年多的时间,建设完成,我们目前的基建状况如下表所示

前端人员的开发效率较之前,提升了一倍左右的开发效率,前提是完全熟悉我这套项目框架的开发模式。

项目管理,人员工时占比,资源协调,目前下来都还不错,平稳进行。

如果你觉得对你有帮助或启发,欢迎点赞留言。

20231 次点击
所在节点    程序员
113 条回复
DT37
2021 年 5 月 7 日
学习到了
kop1989
2021 年 5 月 7 日
写的挺好的,有借鉴意义。对你的成长速度感到很震惊。
jamsfox
2021 年 5 月 7 日
挺有想法的,很棒
k9982874
2021 年 5 月 7 日
四年经验可以哒
Tinu
2021 年 5 月 7 日
学习了 感谢分享
coolxll
2021 年 5 月 7 日
思路清晰
J55s5
2021 年 5 月 7 日
学习了,感谢分享
0x19A
2021 年 5 月 7 日
学到了很多东西
server
2021 年 5 月 7 日
马
GeorgeGalway
2021 年 5 月 7 日
谢谢,对我很有用。
polaa
2021 年 5 月 7 日
很棒 (尤其拉到最后 没看到推广
la2la
2021 年 5 月 7 日
厉害呀,很多人骂屎山,但是自己上手整理的我见的还是第一个
luosch
2021 年 5 月 7 日
公司太小,没什么参考意义
hafuhafu
2021 年 5 月 7 日
梳理归纳能力好强
duduaba
2021 年 5 月 7 日
很详细受用!
simple2025
2021 年 5 月 7 日
NB
kidult
2021 年 5 月 7 日
感谢分享,非常实用,并不是“人均”都在大厂
terrytang1
2021 年 5 月 7 日
大佬,厉害,很多点要去细细读下
fengxianqi
2021 年 5 月 7 日
规划和执行力,点赞
wtfdsy
2021 年 5 月 7 日
学习了,特别是管理这块

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/775334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX