前因后果
自 2020 年 管理 前端研发团队以来, 提高 研发效率
一直都是我们的目标, 为了达到这个目标, 我们做了很多尝试. 浅尝即止. 屡败屡战.
年鉴
- 2020 年 研究 Pattern Lab 与 原子设计. 直至今日, 我们对
设计系统
知之甚浅. - 2021 年 基于 高级 Vue 组件设计 推行
组件化
开发模式. - 2022 年 基于 Node CLI 推行
自动化
开发模式. - 2023 年 基于 Strapi 设计系统 打造 定制化的
组件库
.
问题
团队技术广度和深度有提高, 但是 研发效率
依然没有提高. 为什么?
什么是规范
4 年前 甚至更早 我就喜欢 在鸡汤里面 拌上 开餐饮店
的类比. 殊不知, 当局者迷, 因为切入的维度不对.
想开连锁店 必须要有规范, 我们知道没有规范, 每家店 口味就不能一样, 客户就不会认同这个品牌. 味道是以前最喜欢的切入点. 但是这样一来, 和研发层面的 规范化 似乎就没有关系了.
但是如果换一个角度, 客户不在意口味. 单纯从效率角度来讲, 连锁店的规范是不是有必要呢?
假设 餐饮店的头牌之一是 热干面, 但是每家分店操作流程都不一样, 那么不难想象, 最高效率的分店 和 最低效率分店 是有差距的. 这只是 单品, 如果 菜单上每件单品 都有操作流程带来的差距, 那么整个店铺的效率差距就会更大.
规范决定了效率, 决定了营收水平.
规范在哪里
很容易就能从 互联网找到 类似 前端开发指南 一样的开发规范. 或者 awesome* 系列 例如: awesome vue.
所以, 问题不在于规范的缺失, 而在于规范的执行.
执行的难题
前端项目的类型 我们分为 4 类, 大屏
, 管理端
, 小程序
. 以及小众点的 网站开发
. 拿 管理端
来说, 技术栈有 vue2
vue3
react
angular
基于 jquery
等等.
具体到一个项目, 我们至少会选择 路由方案
, 基础UI组件库
, 表单库
, 状态管理库
, API组件库
, 编译框架
, 等等. 框架基本组成部分的解决方案, 每一个有很多选择.
更细分的组件库类型 更是数不胜数.
更微观的层面, 哪怕约定了所有的技术栈细节, 两个人写同样一个业务模块, 往往也是大相径庭, 有的人是 命令式
, 有的人是 声明式
. 有的人喜欢 面向对象
也有的人喜欢 函数式
. 或者 根本就是 无招无式
.
实际情况, 你永远不知道下一颗巧克力是什么味道.
提示
"Every line of code should appear to be written by a single person, no matter the number of contributors."
这是我从 本文第一个链接中 摘取的名言. 这对于大部分团队来说, 都是遥不可及的天花板.
放弃吧, 规范化 是不可能完成的任务.
反转
思路凌乱必然是想错了. 复杂的问题, 虽然复杂度不可能消失, 但是可以转移. 问题的正确方案, 其思路一定是简洁的, 把复杂度隐藏在低纬度.
规范化 === 消灭重复 === 一致性
原则 1:首先 规范化 另外一种解释就是 同样的事情 再做一次 做法基本一致. 规范化 本质上就是 消灭重复. 不做重复的事情 自然就 保持一致了.
原则 2: 业务 > 技术
从业务角度出发而不是技术角度出发, 业务往往是收敛的, 有限的, 重复的, 有规律的. 技术是百花齐放的. 所以从业务角度去思考 规范化和一致性, 会更容易.
但是, 要非常注意! 业务角度是相对的, 宏观来讲, 业务层就是业务需求, 技术层就是技术方案.
但是在研发领域, 有的时候 业务和技术 都处在 技术侧. 所以 我们可以换个角度看待 业务和技术.
宏观或者微观也好,
- 业务是指要达到的目标
- 技术是指达到目标的手段
原则 3: 一致性 > 最佳实践
这一原则很有争议, 而且对 开发人员来说 由于 惯性思维
往往难以接受. 但是, 最佳实践这个词本身就是相对的, 同一个问题, 哪怕现在的实现方案是有瑕疵的, 但是保持一致性始终优先.
直到为了实现新功能 而不得不重构的时候 我们才有必要替换原来的方案.
反过来思考, 你反对保持一致性的出发点到底是什么?
原则 4: 重复 > 重构
有的时候大家都习惯于 这样的说法, 一段代码如果出现两次, 就应该重构了. 但是, 抛开时间成本不说, 有时候冗余的代码会带来更好的可读性.
重构 不是一个简单的话题, 所以这里仅仅是聚焦在大的方向.
原则 5: 平衡 > 极端
没有最好的方案, 只有最适合的方案. 一切都是权衡.
如果你从上面的原则得出这样的结论, 一个项目中 要么都是 面向对象
, 要么都是 函数式
, 这可以认为是走极端. 一致性并不针对整体, 而是针对具体的问题. 别忘了, 还有一个因素, 时间. 在有限时间压力下. 保持局部一致性, 就相当于保证了整体一致性.