写点什么

探索全栈工程师团队的开发协作模式

  • 2014-01-26
  • 本文字数:3412 字

    阅读完需:约 11 分钟

他是 2013 年 QCon 北京云计算专题的出品人,也是 2014 年 QCon 北京移动应用专题的出品人。他的团队往下做到云计算基础架构,往上做到客户端。他本人从 80 年代末起接触编程,在大数据处理、云计算、以及分布式系统等方面都玩过一圈。他是蒋炜航,网易技术总监,目前全面负责有道云笔记业务。

在这样一个团队中,后端和前端团队在同一个产品上工作,有紧密的协作关系。但是,底层的软件研发和应用层的软件研发毕竟有很大的区别,他们在代码提交和管理模式、测试机制、代码的交付周期、反馈和监控体系方面都有怎样的异同?在本次采访中,蒋炜航博士会介绍有道云笔记团队的一些实践。

InfoQ:您在去年 QCon 北京出品云计算专题,今年则出品移动 App 的专题。这也对应了有道云笔记在技术上的一个特点,就是从底层到客户端都是你们自己来研发、维护、运营的。能先简单介绍一下跟有道云笔记相关的技术团队都有哪些,各自负责哪些方面吗?

蒋炜航:我们底层有基础架构组,这个组在云笔记业务之前就建立了,服务的对象不单单是云笔记,还服务有道的很多业务。这个组也在我的团队,做的东西跟 Hadoop(HDFS、HBase、MapReduce)这些差不多,是自己研发的一套系统。底层提供的东西比较基础,只是存储和计算服务,对所有业务通用,本身不包含业务逻辑。

业务逻辑的开发都在服务器端的团队,这个团队专门是负责云笔记的服务器端的,负责处理同步、多版本、提供 API 等服务。

客户端包括 PC、Mac、iOS、Android、Windows Phone 的客户端,以及 web 端和浏览器插件。基本上每一层的团队都是几个人来做,不是很多。

此外我们还有个精干的研究团队,这个部门做的是一些三到六个月才有成绩的东西。方向主要是应用研究,研究的目标不是发论文,而是把成熟的技术做到产品中。比如编辑器,我们需要做跨平台的编辑器,过去大家比较熟悉的就是 Office 和 Google Doc,而以前很多 Web based 的编辑器并不适合跨平台终端的需求。我们一开始也是用 Web 编辑器做起来的,但是并不是很适合。我们也不可能像 Office 那样用几百个人去做一个编辑器出来,所以研究部门做的事情就是,花一定的时间找到合适的方法来提升编辑器的体验。提高跨平台的体验是一个很模糊的目标,不确定性很大,具体用什么做法要很多研究和尝试。这个团队还研究一些 NLP 和手写输入方面的项目。

InfoQ:有些软件产品的发展思路是求快,尤其在产品推出初期,要以最快的速度推出新的特性以验证产品的可行性;有些软件产品的思路是求稳,尤其在产品积累了一定用户量的时候,会更加关注软件的稳定性、安全性,升级的时候不要对现有用户造成负面影响。有道云笔记现在处于怎样的阶段,是偏重求快还是求稳?

蒋炜航:做互联网产品永远是要快的。同时,云笔记是个人的信息、知识管理工具,稳定性非常重要。要快,同时也要坚守产品质量,我们必须要两者兼顾。

可以这么说:我们的目标就是,最大化高质量产品的输出。我们无论做什么事,都要以优化它为目标来做。敏捷、测试、监控,都是很重要的手段,但相比之下,清晰的目标才是更加重要的。比如,什么叫做快?新版本发布多了就是快吗?引入新特性的频率高就是快吗?我觉得不是。新版本发布,可能会有很多 bug;新特性引入,可能是用户根本不关心的,可能你 80% 的用户从来都不会用到。所以这样的快是没有意义的。

我们对快的定义是,要让有效的产品尝试的速度尽量的快。你发一个新版本来测试,是否获得了更多对用户的理解?新功能是否让用户在某个场景下的需求得到更好的满足?用户是否更加活跃了?有效的快速是满足业务目标的速度,这是通过不断为用户提供更合适的功能来实现的。

我们现在发布重要的版本,会先在内部做高保真原型,在内部试用,从内部非常快的得到有效的反馈。然后我们会做很多的小范围用户测试和 AB 测试,比如在不同的渠道分发不同的软件包,来验证新的交互、新的功能,改掉原有的问题。另外我们还有一个很简单的原则:我们客户端覆盖这么多的平台,但是一个新功能的引入可能先只在一个平台上做,这样我们可以很快通过用户分析,了解用户是否需要这个功能,确认有用了才在全平台铺开。否则,就不引入其他平台,这样其他平台可以有更多机会尝试其他的东西。

在这样的思路下,我们测试阶段的服务器端也可以做的很简单,比如我测试覆盖就几百几千人,那就先用 Node.js 搭一个服务给他们用就好了,性能问题可以以后再考虑。很多时候,做面向三五个专家用户(资深产品经理)的内测也已经足够了。

做软件开发不是做选择题,要么选 A 要么选 B。只要目标明确,具体用什么手段都可以的。

InfoQ:你们后端研发团队和客户端研发团队在开发模式上的差异大么?

蒋炜航:本质上没有任何差别,大家都是为了业务的发展。实际上,我们有很多好的移动端研发工程师是从服务器端转过去的。很多应届毕业生是没做过前端和移动端,他们一开始就是对服务器端感兴趣。我们就会让他先做服务器,其中一些人就会转岗到客户端去。基本上,优秀的工程师在哪里都是优秀的,所以我们内部鼓励 full stack 工程师,可以从头到尾把高保真原型做出来,包括前端的 JS、iOS、Android App、后台服务。我们所有的工程师都要有敏捷的思路,以及以用户为中心的认同感,这些方面是一致的。

当然,因为前后端软件的特性不同,肯定会有一些差异。比如,服务器端对性能更加敏感,所以会关注很多提高性能的手段。当然这些思路,客户端也可以引入。另一方面,敏捷在客户端是比较常见的,因为客户端是功能驱动开发,对交付速度要求更高。当然,服务器端也要有一定的敏捷思路,不能说要我提供十个接口,我就要做俩月。我完全可以用一周时间,用一些现成的技术,比如 MySQL,把这个接口先提供出来,让客户端的开发能够用起来,之后再考虑性能问题,是不是要移到并行文件系统上面去,等等。

总之,在规定的 Sprint 之内,我们一定要做出一个完整的版本。无论是客户端工程师还是服务器端工程师,他们的工作质量都是很容易判断的。

InfoQ:两个团队的交付周期是一样的吗?

蒋炜航:交付周期都是一样的,我们的节奏是一个月,也就是每个月都会有新版本出来,只不过有些不对外发布。

我负责这个业务,具体来说我并不关心客户端团队是不是在满负荷工作,或者服务器端团队是不是在满负荷工作,我关心的是我们在这个周期内,产品经理想要展现给用户的价值是否高质量的完成了,是否能给用户提供一个高质量的版本,这是最重要的。

InfoQ:两个团队的代码提交方式、代码 review 机制、测试机制是怎样的?

蒋炜航:我们内部用 SVN 提交代码,每个项目提交到各自的 repo 里面。代码审查是结对 review 的方式。

测试方面,主要由工程师自己写单元测试,交到自动化测试系统里去跑。我们有强制的测试覆盖率的要求。当然,服务器端和客户端跑的测试是不一样的,服务器端需要做更多的压力测试,而客户端在自动测试外还要做很多功能测试。

InfoQ:在监控和反馈机制方面,两个团队又分别是如何去做的?

蒋炜航:服务器端主要是服务器健康状态的监控。客户端有我们自己写的 crash report 机制,还有一套自己的 BI 系统,用于收集业务方面的指标。

整个产品的日志跟功能是一样重要的,一起开发、测试。有健康的日志系统,才能了解用户的使用情况。这套日志系统检测的指标有几百项,其中一些比较重要的指标包括日活跃用户量、各个功能的使用率、用户满意度等等。其中用户满意度是关键指标,也就是 NPS(net promoter score),我们所有的产品中都有这个分数,这个分数体现了用户对产品的喜爱度。

InfoQ:客户端团队相当于是底层团队的客户,这两个团队之间是如何进行沟通的?

蒋炜航:一个一个 sprint 来走。我们每个 sprint 先开客户端的会议,事先跟 server 端沟通好,要做什么功能,可能有哪些接口,之后就是非常自主的形式了。比如客户端安排要做功能 A,server 端做接口 A,那么这两边的人就会自己去沟通,讨论 API 该如何设计,协议如何做。

敏捷小组的特性就是自发性,我们没有规定谁是谁的客户,或者谁 lead 谁。我们就是设定了目标,分配任务到每个组,之后任何人都能驱动。比如很常见的,客户端说某个接口做的不对,会跟 server 端一起去改接口,不会说客户端不管 API 的设计,给什么用什么,大家肯定是一起来设计的。因为我们的工程师是 full stack,所以这点是比较自然的。

另外,我们的产品、测试、运营也都跟研发团队是坐在一起的,这几个团队之间的沟通都很多。我自己现在是 60% 在产品上,20% 盯研发进度,20% 在运营和市场上。

2014-01-26 08:082540

评论

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

当中间件遇到云原生,看看会发生什么事

金蝶天燕云

云原生中间件 中间件套件

科兴未来|第六届中国·南宁海(境)外人才创新创业大赛

科兴未来News

趋吉避凶、取名问卜!大语言模型再算命领域有哪些应用

FN0

AIGC

瓴羊Quick BI新增多项可视化分析的模块,为数据驱动决策带来更多可能

流量猫猫头

【零售电商系列】走进亚马逊(二)

小诚信驿站

6 月 优质更文活动

软件测试/测试开发丨Allure2报告中添加附件-日志

测试人

程序员 软件测试 测试开发 Allure

对线面试官-为什么要使用MQ

派大星

Java 面试题

华秋干货铺 | HDMI接口需注意的PCB可制造性设计问题

华秋电子

科兴未来|第四届中国·盐城创新创业大赛

科兴未来News

纠删码技术在vivo存储系统的演进【上篇】

vivo互联网技术

分布式存储 磁盘故障 纠删码 数据可靠性

人工智能正在使代码普惠化!未来五年人人都能编程

FN0

我对混沌工程的理解

老张

混沌工程

FreeRTOS使用 — 合理使用内存 “ 任务中创建任务 ”

矜辰所致

内存管理 FreeRTOS 任务创建 6 月 优质更文活动

火热报名 |【崖山论“见”】第3期,如何让SQL速度飞起来

YashanDB

数据库 sql 技术沙龙 优化器 技术干货

活动预告|6月15 日 Apache Paimon Meetup,深入解读 Apache Paimon 0.4.0 !

Apache Flink

大数据 flink 社区活动

软件测试/测试开发丨Allure2报告中添加附件-html、视频

测试人

程序员 软件测试 自动化测试 测试开发 Allure

第十一届“创业江苏”科技创业大赛正式启动

科兴未来News

文末有奖品 | 开放原子全球峰会最新剧透,给我冲!

KaiwuDB

数据库

深度学习应用篇-计算机视觉-语义分割综述[6]:DeepLab系列简介、DeepLabV3深入解读创新点、训练策略、主要贡献

汀丶人工智能

人工智能 深度学习 计算机视觉 语义分割算法 6 月 优质更文活动

Terraform 改善基础架构的十个最佳实践

SEAL安全

Terraform 基础架构 企业号 6 月 PK 榜

海外直播源码技术文字聊天功能的配置

山东布谷科技

软件开发、 区块链二维码溯源系统开发 源码搭建 直播源码 海外直播源码

文件管理开发指南全新登场,快来了解如何访问各类文件

HarmonyOS开发者

HarmonyOS

深度解析Java程序员从入行到被裁全过程

Java全栈架构师

程序人生 后端 架构师 java程序员 java面试

深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等

汀丶人工智能

人工智能 深度学习 计算机视觉 语义分割算法 6 月 优质更文活动

小程序容器与PWA有什么不同?

没有用户名丶

天翼云SD-WAN解决方案直播

天翼云开发者社区

云计算 服务器 云服务

全球LED租赁屏市场

Dylan

LED 市场 规模化 全球 技术指南

定时任务原理方案综述 | 京东云技术团队

京东科技开发者

定时任务 线程 中间件 分布式定时任务 企业号 6 月 PK 榜

【架构设计】【问题分析】记一次调用内部es服务超时问题

如果晴天

架构设计 问题定位 问题分析 日志平台 失败策略

想给业务松松绑,又怕数据泄漏隐患? 动态脱敏了解一下!

极盾科技

数据安全

探索全栈工程师团队的开发协作模式_QCon_sai_InfoQ精选文章