简说创业公司的技术选型,从「BearyChat」的开发说起

BearyChat 发布于 2015/07/30 16:15
阅读 422
收藏 5

「BearyChat」可以为用户做什么?

      「BearyChat」是由一熊科技目前重点为团队打造的一款沟通工具,通过“各种第三方服务集成”、“全格式的文件共享”、“自由定制的机器人”等方式将你所关心的信息快速汇聚到平台上,再通过信息的“永久保存”、“一键收藏”、“全局搜索”、“实时预览”帮你将信息流快速梳理,从而提高工作效率。     

     

「BearyChat」项目如何开展的?

       目前一熊团队会以两个月为一个周期进行冲刺,首先有一个基本原则:活跃和留存。所有的事情都需要和这两个数据挂钩,越直接优先级越高。每个周期大概分三个阶段:

首先是功能需求确定阶段,这个大约有一周时间,最后都会体现在 Trello 里面,主要是:

1.确定 2 到 3 个大功能;

2.对于收集到的反馈问题按优先级确定哪些要在这个周期处理,进行细节迭代;

3.最后和每一位同事确认需求,保证大家达成共识,知道这个周期的共同目标以及最终期望结果;

4.计划排期阶段,这个大约 1 到 2 天时间,主要是和每位同事沟通,确定工作量,最后以周为单位,划分这个周期的任务。

开发阶段,包括:

* 产品和设计师再次明确需求

* 设计师出设计

* 产品和相关开发验收设计

* 开发

* 产品和设计师验收开发

* 黑盒测试

* 上线

回顾阶段,主要是做总结,看这个周期完成度如何,差的比较多的话,会留一些时间做收尾或者将一些内容留到下个周期。

整体项目的推进是采用简化的 Scrum 敏捷开发,每天会 15 分钟左右的站会,让大家清楚每个昨天已经做的事情和今天要做的事情。另外除了 Trello 之后,办公室还有一个现实白板,大家可以清晰的看到每个计划所处的阶段,目前主要分:Doing, Stage, Prod。然后每周五都会有一个 demo day,让大家来展示一下各自做的东西,保证一周的进度 。

「BearyChat」的内部开发流程以及上线流程是怎样的呢?

       目前团队的整个开发流程基本是和上面提到的开发阶段差不多,这里说说开发这个环节的内容。先介绍一下团队的开发主要依赖的工具:GitHub 和 Jenkins。GitHub 开发过程中要是是用来做 Code Review 和 issue 跟踪;Jenkins 主要是用来保证测试和部署。

* 工程师从 Trello 拿任务放到 GitHub issue 中

* 开分支,完成后提 PR,同时要 at 至少一名 Reviewer

* 因为我们将 GitHub 和 Jenkins 做了集成,代码的每个提交都会触发 Jenkins 的测试,当 PR 处于测试通过并且可以自动合并的状态下,Reviewer 开始 Review

* Reviewer 通过 Review 最后负责合并分支,issue 会随着 PR 合并自动关闭

* 将代码部署到测试环境,进行功能验收

* 将 Trello 里面的 card 放到 DONE 里面

       开发上,团队坚持 Code Review, 所以每个端的工程师基本是保证由两个以上的人员组成,可以互相 review 并且有 backup。

上线流程不同的端有不同的上线时间点,原则上:

* 前端/后端:每周二周四上线

* iOS:每两周,提交一次审核(目前我们遇到的审核基本是两周可以通过的节奏)

* Android:每两周提交一个新版,因为安卓审核过程可控,所以节奏比较把握

* 桌面端:累积到一定新功能就发

「BearyChat」在产品开发过程中,对于架构的把控和设计是怎样的?


先分享一下产品整体架构 

团队对于架构和设计的一个想法:简单。在技术架构上不做过度设计,但是会保持基本原则:可扩展。

可扩展包括两个方面:

* 横向扩展:监控得当,当发现流量增长的时候,可以及时用**加节点的方式**解决压力问题

* 纵向扩展:对产品发展有预见,设计的协议,结构可以应对未来产品功能的扩展需求

另外就是要尽可能做到模块化,解耦合。队列系统是必须要有的,所有可以异步化的模块都要异步化。

「BearyChat」的主力开发语言用了哪些?为什么要如此选择?

前端是用了 AngularJS 和 LESS,后端是 Clojure 和 Erlang。

* AngularJS: 从语言角度讲,Angular 有一定程度的组件化,容易复用,上手也相对容易;从和项目契合度来讲,AngularJS 搭建实时系统非常方便,双向绑定虽然性能差些,但是 MVC 很清晰;从社区角度讲,Library 非常丰富;不过 JS 框架通常每隔一段时间就出来一个,比如现在的 React, 选择一个当下最合适的就行。唯一一个坑就是 AngularJS 2.0 对下不兼容。

* LESS: 不用说了,模块化,语法糖,节省时间;

Clojure: 基于 JVM 的 Lisp 方言。非常适合做数据处理的事情,尤其适合做 API Server;从语言角度讲,函数式编程,比较纯粹,数据就是代码,代码就是数据,操作起来很方便;社区角度讲,虽然不是很火,但是毕竟有 JVM 的优势,所有 JAVA 的库都能引入;

* Erlang: 古老的语言,但是设计的目的就是解决通信问题,他的语言特性就是用来解决高容错,分布式。Erlang 采用了 Actor 模型,并且有 OTP Library,搭建分布式门槛就低了很多。另外作为一门古老的语言,在消息通信方面有很多代码积累,比如 Ejabberd,应该算是 XMPP 协议下用的比较多的一套开源方案了。网络库方面,有 cow_boy, ranch 等;集群方面,有 riak_core 等;通信协议方面,有国人实现的 MQTT 协议;消息队列方面,有 RabbitMQ;

目前工作上,团队重度依赖工具:

BearyChat:内部沟通,聚合第三方通知信息

GitHub:代码托管,Code Review,issue 跟踪

Jenkins:集成测试,部署

Sentry:异常收集

Grafana+StatsD:数据收集

Trello:项目管理

Skype:远程沟通

FIR.im:App 内测

感谢大家看完了这篇这么长的文章了解我们和我们的产品,有任何问题,都欢迎随时和我们联系哦

加载中
0
OpenIoT
OpenIoT

非常羡慕你们的这套研发流程,工具是次要的。

我们是一家有20研发人员的公司,尝试过很多种研发流程,但总感觉走不通。不知道,是我们研发问题,还是公司管理问题?

返回顶部
顶部