文章原创首发于微信公众号「 TGO 鲲鹏会」,原文地址:樊伟伟:中华万年历的研发体系建设
2018 年 5 月 7 日,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 。当我们处于这个阶段时,每天的日活都是上千万,所以新功能上线不可能全部覆盖所有用户,一旦出现问题就是非常严重的线上故障。
技术 / 工具栈这一阶段相对稳定,但如果有新业务或新突破想去尝试,那么可能就需要积累一些自己的公共组件,把基础服务平台化。同时,在这一阶段要把沟通的工具统一,把沟通、流程全部统一化。最后,我们还要有数据分析平台,前期可以采购,后期可以去自建。
对于未来,我们希望组织敏捷,小而美;希望能把流程、各种最佳实践工具化;希望能真正做到技术驱动业务发展。
总结
我认为一个高效的研发体系,需要人或组织、流程规范,技术工具三位一体的考虑。每条线会有很多具体的实践,虽然每个公司都不一样,但思路都一样;
· 研发体系不求高大上,只求适合自己;
· 高效的研发体系和产品一样,需要不断迭代。
· 以上就是我分享的全部内容,希望能帮助到正在创业的朋友,谢谢大家。
Q & A
成熟期的标准是什么?
每个公司的发展阶段都不一样,对于我们这种 to C 的成熟期产品来说,新功能的迭代已经非常少了,我们更注重的是核心业务的稳定性,会往其他方向或其他领域做一些新的尝试。我认为,如果一个产品的核心功能稳定了,也开始想突破,想做新的尝试,就算是达到了成熟期。
如何裁掉不合适的人?
因为我们公司发展至今已经 8 年了,所以有很多老员工。有的老员工会跟着公司一起成长,会成为公司的核心,甚至到管理层。但有些老员工跟不上公司的发展,或是自己不再寻求改变。我们首先会跟这些跟不上发展的员工面谈,并给予物质上的奖励,如果还是无法改变现状,那么就会快刀斩乱麻。
创业公司的研发团队要做 KPI 绩效吗?
我们把研发分成了小组,每一块负责一小块独立产品,从整个业务的目标上来看,研发、产品以及运营都一样,所以研发也要背业务的 kpi 。除此之外,研发还会有其他的考核,比如交付速度、交付质量、线上故障等方面。
有没有做过失败的功能,是如何收场的?
肯定会有。尤其在最开始的时候,会被用户左右,各个功能点都很散,不成体系。当你做了几个版本之后,你会发现之前做的功能其实很少有人用,甚至连自己都会慢慢遗忘掉,那这个功能最后就只能砍掉。我们现在会用数据衡量必须要做的核心功能,再加上 A / B test ,作出最后的选择。
技术团队和产品团队的沟通协作机制是什么样的?
互联网公司的产品和技术打交道非常多,每一个版本的需求都要和产品碰。其实沟通协作,最重要的一点就是做到大家的目标一致,在这个基础之上沟通就会好很多。
如何安排团队加班,团队如何激励?
对于创业型公司来说,加班肯定是在所难免的。我觉得加班应该分两种:
新业务尝试,关在小黑屋里每天都加班。这个时候团队的 leader 必须保证在物质上加倍补偿。在项目成功之后,要给予奖励;
产品迭代的节奏没安排好,造成研发团队加班。我们不鼓励这种加班,作为团队的 Leader 应该思考如何避免、如何优化。因为这种类型的加班并不会提高效率,最后交付的产品质量也会非常差,造成团队的不满,同时也没有时间让团队成员沉淀提升。
训诫和鼓励是否有适合的比例?
如果有团队成员在某方面做得不好,我们应该先做正向的鼓励。如果正向的激励不起作用,那我们再采取反向的激励。比如提出批评,扣减绩效奖金等,但比例也需要自己去把控。
- End -
声明:文章为 TGO 鲲鹏会原创,并首发于微信公众号 TGO 鲲鹏会( ID:tgo-kunpenghui ),未经授权,不得转载!