写点什么

樊伟伟:中华万年历的研发体系建设

  • 2020-01-10
  • 本文字数:3862 字

    阅读完需:约 13 分钟

樊伟伟:中华万年历的研发体系建设

TGO 鲲鹏会南京分会会员、随身云(南京)信息技术有限公司技术总监樊伟伟作为TGO鲲鹏会线上分享第六季的嘉宾,以直播的形式分享了中华万年历的创业研发体系建设。本文根据当天直播内容整理。



大家好,我是来自中华万年历的樊伟伟,很高兴今天能和大家一起探讨关于创业公司研发体系建设的话题。我的分享主要以研发中华万年历产品的整个过程为主,向大家介绍如何在产品的不同阶段,构建适合自己的研发体系,保证产品和业务稳定发展。


中华万年历是一款日历产品,除了一些日历必不可少的功能(农历、黄历、传统文化运势)外,还有天气、星座、节日提醒、订阅公众资讯等功能。产品的初衷是以日历切入,串联天气、提醒、倒数日以及星座,为大家提供资讯和传统文化。


先和大家讲一个关于创业段子:“我有绝妙的创意,靠谱的团队和天使,就差一个程序员了”。但我认为,只要创业项目不是 demo ,那绝不仅仅只差一个程序员。创业公司能活下去非常不容易,必须要有完整的研发体系支撑,所以打造高效的研发体系非常重要。

什么是研发体系


技术人都应该知道康威定律 —— 一个公司的产品和服务,是其自身组织结构和沟通以及工作方式的反应。从这个角度来看,一个研发体系应该包含三个部分:


  1. 组织。组织和人是最重要的,如果研发体系里没有组织和团队,谈流程 / 规范或是技术 / 架构都没有意义;

  2. 流程 / 规范。流程和规范的优化是为了让组织之间的协作更加高效,同时保证我们研发的交付质量;

  3. 技术 / 工具。合适的技术架构保证我们的产品快速迭代,自动化工具的使用可以提高工作效率。


这三条线共同构成了研发体系,每一条线下都有很多实践点,来促进产品和业务向前发展。接下来我会从万年历开发的不同阶段,针对这三条线的不同时间点,来跟大家交流我们当时是怎么通过这些打造并建设我们研发的体系。

中华万年历产品发展历程

起步阶段,从 0 到 1

从 0 到 1 是野蛮生长的过程,为了让产品快速上线,第一个版本的产品功能能多简单就多简单。在起步阶段,人手的不足是从 0 到 1 阶段面临的普遍问题。



从组织这条线来看,如果在创业之前已经搭建好团队最好,如果没有团队,面临的第一个问题就是招人拉队伍。创业公司刚开始招人有一个 3F 法则:family ,friends ,fools(家人,朋友,“傻瓜”),除此之外,因为资金有限,我们还要尽量多招多面手,能在多个领域发展的员工。


同时,这个阶段的流程 / 规范也是非常粗暴的,沟通基本靠吼,协作基本靠走,甚至没有独立办公室。但这时的效率却是最高的,因为大家都是面对面沟通,所以避掉了很多不必要的环节。在流程方面,如果有 idea 、需求或开发上线就直接上,没有很完整的开发环节。


最后,这个阶段不要有任何的技术情怀,要选自己最擅长的技术栈,不要选大公司时髦的技术架构。技术服务业务,优先保证产品能快速上线。在这个阶段,技术方面要做到最基本的一点就是代码和开发环境的统一。同时,这时的工具也非常少,大部分时候都是靠人肉操作。

成长期,分组而治

我们在成长期 —— 产品快速发展时会遇到下列问题:


  1. 用户规模快速增长,新的需求会大量涌现;

  2. 团队成员快速扩张。沟通和协作的效率大大降低;

  3. 原有的系统架构在扩展性、稳定性方面,会暴露出很多不足,产生很多问题;

  4. 因为之前大部分的工作都是靠人肉,所以迫切需要自动化。



这个阶段我们要开始施行分组而治,业务和组织都要进行拆分。


因为这个阶段的需求会非常的多,各方面的人才都要配置齐全,所以我们要建立一个人才梯队和 QA 团队。同时,这个阶段我们需要沉淀一些最佳技术实践,所以还要建立团队内部的技术 wiki ,鼓励大家进行内部分享,团队之间相互学习和提升。


在从 1 到 10 的阶段中,需求来源和功能都非常多,所以我们必须要做出优先级,建立需求池。同时,我们还要保证代码的质量,做 Code Review 。除此之外,还要建立 bug 跟踪和故障管理流程,必须把此前的小 Bug 集中解决。虽然故障是不可避免的,但我们还是要把故障记录,分析背后的原因,避免重复犯错。


在技术 / 工具方面,随着用户的增长,我们需要引入成熟的开源技术,提高开发效率。在这个阶段,我们将单体的系统拆分成:用户、UGC 、内容和社区等子系统并快速上线。除此之外,因为这个阶段的发布会很频繁,所以我们还要建立持续交付的工具链以及统一的日志管理平台。最后,做一套大宝剑系统,包含资产、机房、应用、监控等同属于运维基础设施的管理,由系统统一管理。

成长期,产品迭代流程


上图是在成长期的产品迭代流程。首先是产品需求的收集和评审,有设计评审和技术的评审。接着进入研发、测试阶段,再通过测试环境和预发布环境后上线生产环节。在整个版本迭代之后一周,我们会进行复盘,对上个版本的各项数据进行分析,对做的不到位环节进行反思,在下个迭代里优化,并确认下个版本产品迭代的方向。


这个阶段是产品非常重要的阶段,也可以叫爬坡阶段。因为这个阶段的业务、产品、用户,系统以及组织人员都在向上增长,出现的问题会非常多,所以我们需要在组织流程、技术架构以及工具等方面快速提高。

成熟期,稳中求变

走过高速发展期,我们的产品会逐步进入到成熟期。在这一阶段可能会遇到以下几个问题:


  1. 产品功能比较稳定,需要寻求新的业务突破;

  2. 尝试增多,会导致新业务的失败率增高;

  3. 相同的业务场景,会出现重复造轮子的问题;

  4. 各个维度的数据分析需求越来越多。



这一阶段的团队需要垂直领域的专业人才,不断提高团队敏捷性,要形成研发团队的闭环。同时,我们还要建立基础平台部门和数据分析团队,沉淀基础服务,避免重复造轮子。


在流程方面要敏捷,小步快跑,接受用户的反馈,快速迭代演化产品。除此之外,还要用数据驱动产品决策,灰度和 A / B test 。当我们处于这个阶段时,每天的日活都是上千万,所以新功能上线不可能全部覆盖所有用户,一旦出现问题就是非常严重的线上故障。


技术 / 工具栈这一阶段相对稳定,但如果有新业务或新突破想去尝试,那么可能就需要积累一些自己的公共组件,把基础服务平台化。同时,在这一阶段要把沟通的工具统一,把沟通、流程全部统一化。最后,我们还要有数据分析平台,前期可以采购,后期可以去自建。


对于未来,我们希望组织敏捷,小而美;希望能把流程、各种最佳实践工具化;希望能真正做到技术驱动业务发展。

总结


  1. 我认为一个高效的研发体系,需要人或组织、流程规范,技术工具三位一体的考虑。每条线会有很多具体的实践,虽然每个公司都不一样,但思路都一样;

  2. 研发体系不求高大上,只求适合自己;

  3. 高效的研发体系和产品一样,需要不断迭代。


以上就是我分享的全部内容,希望能帮助到正在创业的朋友,谢谢大家。

Q & A

**成熟期的标准是什么?


樊伟伟:每个公司的发展阶段都不一样,对于我们这种 to C 的成熟期产品来说,新功能的迭代已经非常少了,我们更注重的是核心业务的稳定性,会往其他方向或其他领域做一些新的尝试。我认为,如果一个产品的核心功能稳定了,也开始想突破,想做新的尝试,就算是达到了成熟期。


如何裁掉不合适的人?


樊伟伟:因为我们公司发展至今已经 8 年了,所以有很多老员工。有的老员工会跟着公司一起成长,会成为公司的核心,甚至到管理层。但有些老员工跟不上公司的发展,或是自己不再寻求改变。我们首先会跟这些跟不上发展的员工面谈,并给予物质上的奖励,如果还是无法改变现状,那么就会快刀斩乱麻。


创业公司的研发团队要做 KPI 绩效吗?


樊伟伟:我们把研发分成了小组,每一块负责一小块独立产品,从整个业务的目标上来看,研发、产品以及运营都一样,所以研发也要背业务的 kpi 。除此之外,研发还会有其他的考核,比如交付速度、交付质量、线上故障等方面。


有没有做过失败的功能,是如何收场的?


樊伟伟:肯定会有。尤其在最开始的时候,会被用户左右,各个功能点都很散,不成体系。当你做了几个版本之后,你会发现之前做的功能其实很少有人用,甚至连自己都会慢慢遗忘掉,那这个功能最后就只能砍掉。我们现在会用数据衡量必须要做的核心功能,再加上 A / B test ,作出最后的选择。


技术团队和产品团队的沟通协作机制是什么样的?


樊伟伟:互联网公司的产品和技术打交道非常多,每一个版本的需求都要和产品碰。其实沟通协作,最重要的一点就是做到大家的目标一致,在这个基础之上沟通就会好很多。


如何安排团队加班,团队如何激励?


樊伟伟:对于创业型公司来说,加班肯定是在所难免的。我觉得加班应该分两种:


  1. 新业务尝试,关在小黑屋里每天都加班。这个时候团队的 leader 必须保证在物质上加倍补偿。在项目成功之后,要给予奖励;

  2. 产品迭代的节奏没安排好,造成研发团队加班。我们不鼓励这种加班,作为团队的 Leader 应该思考如何避免、如何优化。因为这种类型的加班并不会提高效率,最后交付的产品质量也会非常差,造成团队的不满,同时也没有时间让团队成员沉淀提升。


训诫和鼓励是否有适合的比例?


樊伟伟:如果有团队成员在某方面做得不好,我们应该先做正向的鼓励。如果正向的激励不起作用,那我们再采取反向的激励。比如提出批评,扣减绩效奖金等,但比例也需要自己去把控。




TGO鲲鹏会,是极客邦科技旗下高端技术人聚集和交流的组织,旨在组建全球最具影响力的科技领导者社交网络,线上线下相结合,为会员提供专享服务。目前,TGO 鲲鹏会已在北京、上海、杭州、广州、深圳、成都、硅谷、台湾、南京、厦门、武汉、苏州十二个城市设立分会。现在全球拥有在册会员 800+ 名,60% 为 CTO、技术 VP、技术合伙人。


会员覆盖了 BATJ 等互联网巨头公司技术领导者,同时,阿里巴巴王坚博士、同程艺龙技术委员会主任张海龙、苏宁易购 IT 总部执行副总裁乔新亮已经受邀,成为 TGO 鲲鹏会荣誉导师。


2020-01-10 16:512285

评论

发布
暂无评论
发现更多内容

深入探秘OpenTelemetry Agent奇特的muzzle机制

骑牛上青山

Java Java Agent OpenTelemetry

涅槃重生,BitKeep如何闯出千万用户新起点

BlockChain先知

PoseiSwap:合规、隐私与支持更广泛的资产

BlockChain先知

BitKeep逆势崛起:千万用户的信任,终点还未到来

鳄鱼视界

从 ChatGPT 大热看未来的云计算的发展趋势 | 社区征文

宇宙之一粟

ChatGPT 三周年征文

如何优化Golang中重复的错误处理

乌龟哥哥

三周年连更

Kubernetes CNI之Flannel网络模型分析

王玉川

Kubernetes 云原生 flannel VXLAN cni

比起失业我更害怕自己“一无是处”|社区征文

轻口味

个人成长 移动端 三周年征文

23年最新Java岗常见面试题及答案(1000道),90% 的公司都会问到

Java你猿哥

Java MySQL zookeeper JVM java面试

2023-05-12:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号, 给你一个数组 graph 表示这个图, 其中,graph[i] 是一个列表,由所有与节点 i

福大大架构师每日一题

Go 算法 rust

MySQL 安装配置

梦笔生花

MySQL shell脚本 三周年连更

利用 Amazon API Gateway 和 Amazon Lambda 处理 Cloudfront 的内容请求

亚马逊云科技 (Amazon Web Services)

Java补充之MySQL入门必备知识

timerring

Java

Go语言中如何通过接口来实现单一职责原则

Jack

Github标星90K!不愧是阿里大牛珍藏的LeetCode题解全彩小册

Java你猿哥

面试 算法 LeetCode ssm 算法题

2023开源之夏|来自MatrixOne社区的邀请函

MatrixOrigin

MatrixOrigin MatrixOne 开源之夏

ES数据没了?谁动了我的数据?

极限实验室

elasticsearch 数据误删 数据丢失

文心一言 VS chatgpt (16)-- 算法导论4.1 1~2题

福大大架构师每日一题

ChatGPT 文心一言

使用Spring Boot接入ChatGPT

Java你猿哥

Java spring Spring Boot ssm ChatGPT

涅槃重生,BitKeep如何闯出千万用户新起点

股市老人

一文讲明白路由器的基本概念、工作原理、主要部件以及应用场景

wljslmz

路由器 三周年连更

2023最新后端中大厂面经&在面试过程中如何反问?

Java你猿哥

Java ssm java面试 面试官 Java面经

新技术层出不穷,程序员到底该走哪条路|社区征文

阿泽🧸

职业规划 三周年征文

失业浪潮之下,不如一蓑烟雨任平生 | 社区征文

宇宙之一粟

Django笔记二十六之数据库函数之数学公式函数

Hunter熊

Python 数据库 django 公式函数

C++编译器和链接器的完全指南

小万哥

c++ 程序员 面试 后端 开发

一篇文章教你在业务开发中高效玩转TDD(测试驱动开发)

Java你猿哥

Java ssm TDD

知乎文章被百度收录有何意义?如何让知乎文章被百度收录?

石头IT视角

奇葩的 Git 签名错误

HoneyMoose

系列课程:从零开始接触人工智能大模型(介绍)

茶桁

樊伟伟:中华万年历的研发体系建设_技术管理_樊伟伟_InfoQ精选文章