V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BearyChat
V2EX  ›  程序员

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

  •  3
     
  •   BearyChat · 2015-07-31 12:18:51 +08:00 · 7703 次点击
    这是一个创建于 3163 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上周五我司 CTO 唐晓敏同学受邀参加了 CSDN CTO 俱乐部主办的 CTO 讲堂,进行了一次有关于「简说创业公司的技术选型,从 BearyChat 的开发说起 」的访谈。这里把内容列出来再和大家分享一下,或许我们也可以再一起探讨一下里面的一些话题?

    以下 CTO 讲堂现场完整速记来自 CSDN( http://www.csdn.net/article/2015-07-28/2825318-CTO ),略有删改:)

    主持人:今天嘉宾是一熊科技 CTO、联合创始人 唐晓敏,请唐同学做个自我介绍吧。

    唐晓敏:大家好,我叫唐晓敏,今年是在互联网学习的第五年,之前在阿里云做过搜索,主要是 Query 分析和排序;后来跟随丰老师(现在 LeanCloud 的 CTO)加入 AVOS,参与创业,当时参与了 Delicous 改版,国内美味书签,玩拍(短视频)和 LeanCloud,主要负责后端,包括爬虫,API,推送服务等。现在是一熊科技联合创始人/CTO。

    主持人:作为 85 后创业者,唐同学是在何种情况下选择创业的?

    唐晓敏:在阿里的时候,其实技术深度成长还是挺好的,但是大公司的一些通病,我受不了,再加上当时特别葱白丰老师,就跟着出来参与创业了。有幸两年多的时间和国内优秀的团队和国外 youtube 的创始人和早期员工一起工作,其中除了技术增长外,让我体会最深的还是国内外 Saas 环境的差别,国外团队特别注重生产力,会用各种工具,因为每个工具都做的非常棒,而国内工具少,做的又没有那么细致,我就一直想着国内也要又好工具,所以就和同事一起出来捣鼓了。这里宣传一下 LeanCloud,真的是一家工程师文化非常棒的公司,在的时候就说过,如果有一天离开 LeanCloud,唯一的理由就是自己出来捣鼓:)

    主持人:介绍一下一熊科技目前的情况以及团队构成吧。

    唐晓敏:一熊科技是 2014 年 3 月份成立,目前有 12 位全职成员,在北京和深圳都有办公室。团队的成员大部分来自微软,豆瓣,网易和阿里。

    目前,我们做了两款产品: 白板(BearyBoard.com), 主要是解决设计师沟通问题;倍洽(BearyChat.com),主要是解决团队沟通问题。

    主持人:在创业方向上一熊科技是如何选择的?为什么选择这个领域?

    唐晓敏:其实也没有什么特别的,说的老套一点,就是不忘初心。

    在 AVOS 的时候做过用户产品,虽然很喜欢用户产品,但是我们内心还是工程师的内心,想做工具,而且自己的背景也更适合做工具,所以就选择了 Saas 这条路。

    主持人:不忘初心,方得始终哇。介绍下一熊科技的创新产品及重点项目吧。

    唐晓敏:白板是一熊科技的第一个产品,它就是一个减法产品,解决设计师沟通问题:上传设计图,邀请相关人员进入讨论,哪里不明确就可以点哪里进行实时讨论。这个产品刚上线不久就得到不少好评,简单有效。

    公司目前的重点项目是 BearyChat,是为团队打造的一款沟通工具,分组讨论,第三方集成,文件管理和全局搜素是四大核心功能,如果大家知道 Slack 的话,就很容易理解了。我们其实最初的想法是做 HipChat,因为在 AVOS 的时候,从 Gmail -> GTalk -> HipChat -> Flowdock -> HipChat,沟通工具使用了遍,只有在用 HipChat 的时候,我从工程师的心理出发,感觉非常爽,当时就想国内也要有一个(网络不稳定)。后来 Slack 内测,很快就拿到邀请码,使用起来,这个时候的感受除了爽,还多了一种责任,就是要告诉其他所有伙伴,用 Slack。就这样,我们决心打造一款国内的类 Slack 产品。

    主持人: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:每两周提交一个新版,因为安卓审核过程可控,所以节奏比较把握
    • 桌面端:累积到一定新功能就发

    这里有个小故事分享一下,最早的时候,我拍脑袋说我们每周五上线,最后才意识到周五上线之后,第二天出点小问题,就是周末了,就会耽误大家的生活,于是果断切换到周二和周四上线。

    主持人:请介绍一下在产品开发过程中,对于架构的把控和设计是怎样的?

    唐晓敏:嗯,先分享一下我们整体架构。(盗了我们首席前端在深圳 JS 大会上的图)

    其实大家看了一眼,可能觉得没有什么特别的,很简单,没错,不过这就是我对于架构和设计的一个想法:简单。我们在技术架构上不做过度设计,但是会保持基本原则:可扩展。

    可扩展包括两个方面:

    • 横向扩展:监控得当,当发现流量增长的时候,可以及时用加节点的方式解决压力问题
    • 纵向扩展:对产品发展有预见,设计的协议,结构可以应对未来产品功能的扩展需求 另外就是要尽可能做到模块化,解耦合。队列系统是必须要有的,所有可以异步化的模块都要异步化。

    主持人:公司产品的主力开发语言用了哪些?为什么要如此选择?

    唐晓敏:前端是用了 AngularJS 和 LESS,后端是 Clojure 和 Erlang。

    • AngularJS: 从语言角度讲,Angular 有一定程度的组件化,容易复用,上手也相对容易;从和项目契合度来讲,AngularJS 搭建实时系统非常方便,双向绑定虽然性能差些,但是 MVC 很清晰;从社区角度讲,我们在 2014 年 初开始做的,当初社区正式最火的时候,Library 非常丰富;从自身角度讲,前公司有一个 AngularJS 的专家,跟着入了门。

    不过 JS 框架通常每隔一段时间就出来一个,比如现在的 React, 选择一个当下最合适的就行。唯一一个坑就是 AngularJS 2.0 对下不兼容。

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

    • Clojure: 基于 JVM 的 Lisp 方言。我也是在前公司开始接触 Clojure, 至今写三年多,总结来讲,非常适合做数据处理的事情,尤其适合做 API Server;从语言角度讲,函数式编程,比较纯粹,数据就是代码,代码就是数据,操作起来很方便;社区角度讲,虽然不是很火,但是毕竟有 JVM 的优势,所有 JAVA 的库都能引入;从自身角度讲,已经写了两年的 Clojure,已经很快能搭建一套服务,节省时间。

    当然可能大家觉得最大的一个坑就是面临很难招人的问题,然而我觉得这也算是一个优点,一个好的筛选器,我们有同事就因为想写 Clojure 才来我们公司。另外,也想和大家说一下,Clojure 一开始学习曲线可能会稍微抖一点,但是基本上一个月就能上手,而且你会发现另外一个完全不同的世界, 如果你没有接触过 Lisp 的话。

    • Erlang: 古老的语言,但是设计的目的就是解决通信问题,他的语言特性就是用来解决高容错,分布式。Erlang 采用了 Actor 模型,并且有 OTP Library,搭建分布式门槛就低了很多。

    另外作为一门古老的语言,在消息通信方面有很多代码积累,比如 Ejabberd,应该算是 XMPP 协议下用的比较多的一套开源方案了。网络库方面,有 cow_boy, ranch 等;集群方面,有 riak_core 等;通信协议方面,有国人实现的 MQTT 协议;消息队列方面,有 RabbitMQ;

    从产线上来讲,WhatsApp 十几人的团队就能扛住大流量,我相信 Erlang。和 Clojure 一样,可能大家觉得招人不容易,还是那句话,这其实也是一个筛选器。我们期望的技术团队就是一个小而精的团队。

    主持人:一熊科技的技术团队是什么样的氛围?工作模式是怎样的?你们如何保证异地合作的呢?

    唐晓敏:氛围的话,就是轻松愉快。大家每天都会互相黑,在工作上,会互相撕,但是完全不会影响关系,该一起睡还是一起睡。我们不推崇加班,希望大家可以很好的平衡工作和生活。

    目前工作上,我们重度依赖工具:

    BearyChat:内部沟通,聚合第三方通知信息
    GitHub:代码托管,Code Review,issue 跟踪
    Jenkins:集成测试,部署
    Sentry:异常收集
    Grafana+StatsD:数据收集
    Trello:项目管理
    Skype:远程沟通
    FIR.im:App 内测
    远程的话,第一就是信任,人要靠谱,然后只要计划合理,我觉得就没什么问题。

    主持人:据了解,一熊科技团队技术成员均 87 后,这样一支年轻的团队,有怎样的特质?那么管理方式上,有没有不同之处?

    唐晓敏:现在我们是十二个人的团队,就是一帮兄弟,初生牛犊不怕虎,在生活得到一定保障的前提下,大家可以开心的在一起做大家想做的事情。管理?每个人都有远程的自制力,其实不太需要管理,看结果就行。

    主持人:那么你们如何提高团队成员技术竞争力的呢?

    唐晓敏:
    1. 尽可能放权,让成员去独挡一面,允许犯错,跟着公司成长;
    2. 沟通,内部的话,我们主要依靠 Code Review, 这个过程就是充电过程,不论是看还是被看的,都会学习到很多;外部的话,定期参加技术会议,质量高的马拉松,和业内的人讨论,也能开阔眼界。

    主持人:在创业的过程中,是否遇到过发展瓶颈?有无一些经验教训给年轻创业小伙伴们?

    唐晓敏:其实,我也就是自导创业了一年多,踩了很多坑,一下子也说不完,就挑几个分享一下吧:
    1. 拥抱开源,一开始会大大降低技术门槛;
    2. 拥抱工具,该花钱的地方就花,尽可能减少自己维护的成本,现在人最贵;
    3. 耐心,创业的路子远没有想象的那么容易走,要早点学会鼓励自己,内心软弱的话,纵铁甲难护:)

    互动环节:消息队列是用的 RabbitMQ?

    唐晓敏:是的。

    互动环节:市场上也有类似的产品,你们的产品优势是什么?

    唐晓敏:要说产品优势的话,我就不吹了,BearyChat 的用户是这么说的:设计出色,不是照搬,有自己的思考;功能稳定,其他几个产品他们用下来多多少少有问题;服务到位,反馈可以非常及时的回复。

    互动环节:在唐总的刚刚提到的过程中,产品经理或者产品人员担任怎样的角色呢?创业项目的话在真正做大之前,基本上都是在试错再修正,这个过程中,产品经理怎么引导,怎么做到既具有前瞻性又具可执行性?

    唐晓敏:基本是我和 CEO 负责。我们也在摸索,不过数据上涨才是硬道理。

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

    欢迎使用 BearyChat https://bearychat.com/

    35 条回复    2015-11-17 21:12:45 +08:00
    red
        1
    red  
       2015-07-31 12:39:09 +08:00
    BearyChat的用户,为BearyChat点个赞~

    自来水一下:
    1)BearyChat的integrations很多,常见的都有了,并且一直在增加
    2)因为遇到了小BUG,发过两次反馈,相应速度非常OK
    gamecreating
        2
    gamecreating  
       2015-07-31 13:15:11 +08:00
    我会认为这是广告吗
    mingzhi
        3
    mingzhi  
       2015-07-31 14:00:20 +08:00
    @gamecreating 个人感觉有内容的软广
    比每天刷置顶的好多了
    w88975
        4
    w88975  
       2015-07-31 14:04:42 +08:00
    我司也一直在用BearyChat
    giveme168
        5
    giveme168  
       2015-07-31 14:08:44 +08:00
    mark
    ninja911
        6
    ninja911  
       2015-07-31 18:10:13 +08:00
    mark
    holulu
        7
    holulu  
       2015-07-31 18:16:52 +08:00
    后台是玩 clojure 和 erlang 的,超羡慕啊!
    BearyChat
        8
    BearyChat  
    OP
       2015-07-31 18:41:33 +08:00
    @red @mingzhi @w88975 感谢支持呀^^
    虚的就不多说了,还是那句话「随时欢迎联系」,各个反馈渠道我们只要看到了都会及时回复和跟进,所以有任何问题或者需求,都欢迎随时来戳~~

    @holulu 也欢迎一起交流啊~~^^
    w88975
        9
    w88975  
       2015-07-31 20:51:04 +08:00
    @BearyChat 我司所有工作都依赖github,所以你们的github机器人很好用,早已经放弃QQ了.
    Kabie
        10
    Kabie  
       2015-07-31 21:11:20 +08:00
    注册验证码收不到啊。。。
    comver
        11
    comver  
       2015-07-31 23:15:12 +08:00
    刚才注册了你们的服务,感觉很不错。 我们一直使用tower+微信的组合。后来慢慢发现了一些弊端。

    而我们的业务主要是运营和开发两大块,感觉你们很适合我们!!
    Tedko
        12
    Tedko  
       2015-07-31 23:36:18 +08:00
    傍友们我发给你们的魅族 bug 你们搞定了麽))
    我研究了一些觉得那个相当蛋疼……干脆放弃Retrofit,搞一个开源包试试看吧……
    flyme 据我所知应该不会修复这个 bug
    oska874
        13
    oska874  
       2015-08-01 00:49:32 +08:00
    有没有在局域网内用的,搭建服务器,然后网内通信,类似飞鸽,开源的,推荐一下
    alsotang
        14
    alsotang  
       2015-08-01 01:25:12 +08:00
    酷!
    jingwentian
        15
    jingwentian  
       2015-08-01 01:30:53 +08:00
    赞!
    loddit
        16
    loddit  
       2015-08-01 01:32:33 +08:00
    @Kabie 可否告知我邮箱? 我们去查一查,经常有邮箱被邮箱服务商莫名加入黑名单。
    laotaitai
        17
    laotaitai  
       2015-08-01 02:40:31 +08:00
    说得好像用Erlang的都是高手似得. 我照样见过Erlang代码写得一坨屎的人.
    Elethom
        18
    Elethom  
       2015-08-01 03:12:14 +08:00 via iPhone
    原來你們還有 BearyBoard 這東西。
    dcoder
        19
    dcoder  
       2015-08-01 06:04:33 +08:00
    AngularJS, Erlang, Clojure
    好风骚的 tech stach :D
    dcoder
        20
    dcoder  
       2015-08-01 06:05:07 +08:00
    typo: tech stack
    greycell
        21
    greycell  
       2015-08-01 10:31:33 +08:00
    所有国内这样抄的公司,功能都一样,ui都一样,宣传视频都一样,多发帖营销吧
    itommy
        22
    itommy  
       2015-08-01 10:34:41 +08:00
    好文!赞晓敏
    h63542
        23
    h63542  
       2015-08-01 13:00:34 +08:00
    @comver tower+微信的缺点是什么呢? 能分享一下么?
    cloudzhou
        24
    cloudzhou  
       2015-08-01 14:52:38 +08:00
    我比较关注有没有开放 API,能支持监控报警通知
    zongwan
        25
    zongwan  
       2015-08-01 15:19:23 +08:00
    github开源的机器人很酷啊
    用聊天的方式部署之类的

    没想到国内的公司这么快就发布产品了
    有机会想试用下,不过因为保密关系 最终可能会自己再开发一个
    贵公司开源产品 然后卖机器人(SaaS)也是一大杀器

    保密原因,参考很多公司购买OA系统,最后很多信息 资料都被卖给对手或针对性的合作公司了.
    比如说
    1.手下核心员工申请 长假去回老家,这些信息被卖给了对手公司和相同领域公司/猎头公司
    立马在长假途中 根据之前OA得到的升职/调薪信息 做尽可能成功概率高的挖人
    2.更有不良竞争对手,跟随对手业务背后.跟约谈下一步才签约的商家,以更低或欺骗的方式抢夺用户.
    comver
        26
    comver  
       2015-08-01 16:52:40 +08:00
    @h63542

    因为特殊原因,我们团队线下沟通的机会很少,基本上都是在线上沟通。
    tower用来安排日程 布置任务的很方便的。但是小组讨论的时候会很麻烦。虽然提供了免费的视频会议功能,但是免费使用只有30分钟还是60分钟的,很不方便。而提供的“讨论”板块功能,不太适合细致的讨论,只适合把确定的方案,或者讨论的里程碑等信息放在上面存档。

    而微信,非常适合讨论,但是太多的私人信息和工作的信息混在一块,有时候会让人忽视掉一些东西。之前我们的做法是,每一个项目组在微信中都有小的讨论组,然后呢各个部门有大的讨论组。但是后来发现,如果不置顶这些讨论组,不要一天这些讨论组就会被个人消息顶下去。而置顶讨论组又导致整屏都是讨论组。

    而BearyChat看上去能满足我们的需求,将工作和私人信息分开。同时机器人功能也很棒,方便我们及时把相关的信息推送给指定的人。具体功能我还在摸索。
    BearyChat
        27
    BearyChat  
    OP
       2015-08-01 17:18:24 +08:00
    @comver 将工作和私人信息分开的确也是我们想要解决的一个问题。欢迎使用,有问题随时联系:)
    WildCat
        28
    WildCat  
       2015-08-01 18:18:29 +08:00 via iPhone
    hamsik2046
        29
    hamsik2046  
       2015-08-01 19:22:22 +08:00
    “该一起睡还是一起睡”

    所以其实这是招聘贴,也是蛮拼的
    superbear
        30
    superbear  
       2015-08-01 21:06:48 +08:00
    潜规则,周五不上线,哈哈
    Tedko
        31
    Tedko  
       2015-08-01 22:21:38 +08:00
    @Tedko @BearyChat 看下我之前那条咯
    jiyinyiyong
        32
    jiyinyiyong  
       2015-08-07 21:02:30 +08:00
    贴个 Clojure 社区广告 http://clojure-china.org/

    这帖子里在写 Clojure 的同学多吗?
    yuanbohan
        33
    yuanbohan  
       2015-11-17 10:38:23 +08:00
    @jiyinyiyong BearyChat 后端 服务整体都在使用 clojure
    yuanbohan
        34
    yuanbohan  
       2015-11-17 10:45:23 +08:00
    @jiyinyiyong 你们有在 bearychat 上的团队么?我想申请加入以下
    jiyinyiyong
        35
    jiyinyiyong  
       2015-11-17 21:12:45 +08:00
    @yuanbohan 看论坛吧, 我没有留意那上边的团队. 即便有估计人也不多, 主要还是活跃在 QQ 群里.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3692 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 00:13 · PVG 08:13 · LAX 17:13 · JFK 20:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.