简说创业公司的技术选型,从 BearyChat 的开发说起 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
BearyChat
V2EX    程序员

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

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

    上周五我司 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     Solana     823 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 21:29 PVG 05:29 LAX 14:29 JFK 17:29
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86