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

2021-05-07 09:27:49 +08:00
 LiuJiang

背景

自我介绍下,四年工作经验,头两年全栈开发,后两年专职做前端,目前已达到高级前端工程师水平,经历过三家公司。第一家公司,电商行业,做阿里 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 个部分组成:HeaderBodyFooter

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 DesignFrom 表单组件。

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

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

总结

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

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

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

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

17112 次点击
所在节点    程序员
113 条回复
eiheioffical
2021-05-07 10:46:10 +08:00
学习了,给大佬递茶
nekoneko
2021-05-07 10:51:22 +08:00
学习到了
Maxbee
2021-05-07 11:07:41 +08:00
点赞
xxxy
2021-05-07 11:18:15 +08:00
学习了,楼主前途不可限量
sakura1
2021-05-07 11:23:03 +08:00
优秀
NeroKamin
2021-05-07 11:24:26 +08:00
学习了,大佬的思路清晰执行力强,值得学习
shenlanAZ
2021-05-07 11:30:45 +08:00
非常干货 感谢分享!
eric1202
2021-05-07 11:57:08 +08:00
由浅入深,好文!
感谢分享~
lostSoul
2021-05-07 11:59:22 +08:00
这才叫干货,全文背诵,太强了,逻辑思路表达清晰
masterDu
2021-05-07 11:59:26 +08:00
学习到了
dany813
2021-05-07 12:02:02 +08:00
有点意思
chenshun00
2021-05-07 12:06:41 +08:00
干货
vToExer
2021-05-07 12:25:44 +08:00
很接地气的内容, Mark 一下
tmaller
2021-05-07 12:51:35 +08:00
mark 并反思自己
danhua
2021-05-07 12:52:55 +08:00
系统都在一个项目,最后是通过 webpack 进行分模块打包么。一起打包的话会不会体积比较大。
ericgui
2021-05-07 13:05:03 +08:00
最重要的东西没写: 折腾这么多以后,你们的各项性能指标咋样?打包体积小了吗?加载时间变短了吗?等等

还有,什么是{技术收敛}?你们又在发明新的黑话了。
drinke9
2021-05-07 13:21:48 +08:00
很棒的分享
GGGG430
2021-05-07 13:25:56 +08:00
干货满满
fantastM
2021-05-07 13:27:02 +08:00
相当受用
imnpc
2021-05-07 13:37:13 +08:00
全看完了 居然不是广告 已经感谢 非常棒的文章

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

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

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

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

© 2021 V2EX