回顾过去在前端团队的工作,有一些出现频率很高的词:任务拆解、招聘面试、代码重构、技术规划、人员成长等等,阶段性总结,有做得好的、有结果不理想的,过程中也有很多事之间存在冲突,分析背后的诉求,有一个共同目标:提升团队产能,在资源有限的情况下,当前哪些事要做,哪些事可以不必做,团队产能如何提升,需要有更系统的思路和方法。

先定一个公式:前端团队产能 = 人均产能 x 人数 - 离职率 x 人均离职成本

人均产能如何提升

拆解出影响人均产能的因素,逐个优化。

1、基础设施

  • 代码管理,GitLab。
  • 自动化,GitLab CI、Webhook、Rsync、Shell 脚本等等,实现从代码提交到后续环节各种需求的自动化,自动部署打包、自动发邮件、自动生成 Changelog 等等。
  • 前端构建工具,FIS、Gulp、Webpack 等等,满足本地开发调试和发布部署需求,视项目技术栈和发布部署需求而定。

2、多人协作能力

多人协作的关键在于:约定,需要约定的内容由分工和团队成员的能力结构决定,常见的约定包括:

  • 需求文档,产品经理与研发工程师的约定,包括:交互稿、UI 稿、需求描述文档等等。
  • API 文档,前后端接口的约定,基于 API 规范以及规范相关工具,如:OpenAPI 规范、Swagger UI、Swagger Editor 等等。
  • NPM,包规范的支持,组织第三方 JavaScript 模块,解决项目开发中的依赖问题。
  • 组件化,前端功能拆解与组装的约定,前端团队内多人协作的基础,主流方案如:React、Vue、Angular。
  • 数据流管理方案,开发复杂应用除了需要组件化还需要分层,主流方案如:Redux、Mobx、Vuex、RxJS 等等,由此衍生出一些新的约定,如:Action 的约定、 Store 的约定。
  • Git 分支模型,产品开发与发布的约定。
  • 迭代模式,产品研发流程的约定,相关工具如:Jira、Trello 等等。

3、代码生命周期

影响代码生命周期的关键因素:

  • 需求变更频率,常见的问题:需求细节没理清楚、研发的理解有出入、给到用户后发现不是他想要的等等,对应的解决方式,如:需求评审、设计文档、MVP 思路等等。
  • 代码抽象水平,缺少抽象会导致功能难以扩展,关联需求出现后需要频繁改动大量的执行逻辑,主要在于工程师的编程能力、业务理解能力,常用的辅助手段,如:技术评审。
  • 代码质量,单元测试、E2E 测试、Code Review。

4、代码复用

复用的诉求视业务情况而定,如:

  • 跨产品的代码复用,依赖 UI 设计规范、组件化、业务单元的抽象,技术栈不统一时还需要考虑跨技术栈的复用,如:iFrame 方案、微前端方案。
  • 跨端的代码复用,如:React Native、Flutter、以及针对国内各种小程序平台的统一开发框架。
  • 页面或应用组装方式的复用,如:百度的 H5 页面制作工具。

5、人员成长

人员成长能给团队带来巨大的收益,从指导干活到独挡一面再到带人做事,新人的价值会成倍增长,优秀工程师甚至能以一抵十。

成长的关键因素有两点:

  • 自我驱动,对技术的热情、勤奋、追求极致、不断跳出舒适区,比较常见的反例是:业务驱动、任务驱动,只求完成业务需求,对技术的掌握点到即止、能用就行。
  • 学习方法,知识 -> 能力 -> 价值,有效的成长需要完成这样的转化过程,比较常见的现象是:小 A 说“今年计划学习某某编程语言”,但这只是知识的部分,学完之后可能不久就忘掉,时间也白费了,计划学习某些东西时,要大致能看到转化的路径,学习知识后转化为能力的场景是什么,具备一些能力后输出价值的场景是什么。

帮助团队人员成长的手段:导师制、技术分享、成长规划、专业方向的高要求等等。

人数如何增长

招聘的话题,简历人数 -> 面试人数 -> 谈 offer 人数 -> 接 offer 人数 -> 入职人数,分析各个环节的转化率,逐个优化。

基本的前提是:招聘要求,什么样的能力和经验是我们需要的,什么样的素养与我们契合,避免纯技术维度的考量,关注候选人在过去团队中发挥的价值。

业务前景、薪酬福利,除了这些常规因素外,还有两个关键点:

  • 影响力,把业务做大做强很牛,对外输出价值更能揽人心,技术分享、开源项目等等,需要长时间的经营。
  • 『故事』,大公司有大公司的好,创业团队有创业团队的空间,因人而异,分析候选人的特点,把能给的故事讲明白。

离职率如何降低

除常规因素外,还有两个关键点:

  • 成就感,技术层面,要有好与不好标准和高要求才有成就感的来源,把代码写得更好、把事情做得更极致,成为基本的团队风格;业务层面,关键在于自上而下的信息传递,传递到一线成员的除了任务与时间点,关联的目标和价值要多讲讲。
  • 成长空间,首先要有对成长的定义:知识 -> 能力 -> 价值,再结合业务特点设计成长方向与路径,如:复杂 Web 应用的开发、数据可视化、Node 等等。

人均离职成本如何降低

  • 防止知识丢失,产品研发的最终交付除了代码,还要有一系列文档:需求文档、API 文档、总体设计文档、会议纪要、代码注释等等。
  • 人员备份,避免出现关键业务单人跟进的情况,降低技术门槛,如:统一的开发流程、统一的技术栈等等,降低业务门槛,如:新功能、新业务的串讲。

应该怎么做

先设定一个时间线,确定当前要关注多长时间内的产能,三个月、半年、一年,或者更长,由企业所处的阶段决定。

在这个时间线上看各个因素的投入产出比和确定性,有些投入可能需要一年或更长时间才能看到收益,如果我们只关注三个月、半年的产能,那这些事大可不必做;有些投入很确定能立马产生收益的,比如:自动化,可以多投入资源做。

皮成,2019.01.05