Camera360 技术 VP 刘宏伟:研发和协作效率提升之道(文末有彩蛋)

1 月 11 日,EGO 成都分会服务委员、Camera 360 技术 VP 刘宏伟作为 EGO 线上分享第五季的嘉宾,以直播的形式分享了 Camera360 团队从不足 10 人到 300 人组织变革和效率提升历程 。本文根据当天直播内容整理。

口述 | 刘宏伟
整理 | 李雨侬

本次分享的主题是《研发和协作效率之道》。从公司不足 10 人,到目前接近 300 人,经历了公司发展壮大的完整历程, 期间在效率方面,踩了很多坑,也有一些收获,希望和大家分享交流。

效率只是目标的一部分

无论对于整个团队也好、个人也好,做了多少东西、有多少输出才是最核心的。上图的公式里有功率和时间两部分:在单位时间内,谁做的功越多,谁的输出也最多。

个人工作效率

对我个人影响较深的是《高效能人士的七个习惯》这本书以及四象限法则。我认为,在四象限法中,第一象限是最不应该有的,我们应该把事情都移到第二象限和第四象限里。如果事情在第一象限,就是亡羊补牢;如果在第二象限和第四象限,就是未雨绸缪。

组织的工作效率

百度上对于“团队效率提升”问题的答案多如牛毛,但我觉得作为一个技术领导者来说,总结出具有个人特色的组织效率提升办法是非常重要的。这个办法和思想是你特有的,能够完全理解和掌控的。

组织效率有一个关键词叫工作流( Workflow )—— 你是如何工作的,是如何把一件事情干成的。

磨刀不误砍柴工

随着整个 Camera360团队的成长、效率工具的演变,总结了几个演变过程:

石器时代

在我刚加入 Camera360 的时候,只有几个人,沟通用 QQ 、G-mail ,文件传输用 QQ 、文档用 Excel / Word ,团队里最常见的一种沟通方式就是吼,但我认为时候那个时候效率是最好的。

青铜时代

此前我们参加过一个微软的比赛,获得了微软所有产品的免费使用权。但是当 Gmail 容量不够、需要花钱的时候,就被我们弃用了,转而搭建自己的 Exchange 加 LDAP 授权系统,因为我们并不是 Exchange专家, 在使用过程中出现了以下种种问题:

  • 办公区停电会影响可用性 ;

  • 因为域名解析问题会导致极少数 Email收不到,合作阻塞;

  • 发出的邮件进了人家的垃圾邮箱;

  • 花费大量精力维护。

所以即使有 Exchange ,但如果没有这方面专家,还是不要轻易的自己搭建,尽量使用第三方企业级邮箱服务。

在沙滩上上线

在团队迅速发展,人员迅速增长时, 我认为团队需要具备一种能力 —— “在沙滩上晒太阳的时候也能把系统上线”。具备这个能力之后我们就有的选择,是使用还是不使用这个能力。我几乎花了一整年的时间去规划和策划,通过先打点后连线的方式, 在这一年多的时间里,我们完成了几件事情:

  • 实时日志系统;

  • 监控告警;

  • 上线系统;

  • 打包系统;

  • 开发环境 Docker化。

实时日志系统

我们用的系统是子系统相互调用。系统 A 会依赖于系统 B 和 C ,系统 B 依赖于系统 D 和 E 。我们会分很多模块,每一个模都是通过 API 调用。

当时我们面临的问题就是出现了异常后很难追踪,迫切需要一套系统实施日志系统 —— 只要拿到一个 LogID ,就能够反查到这个 LogID 调用了哪些 API ,调用了哪些依赖,这些依赖又调用了哪些依赖,以及调用的顺序、上传的参数等。

上线系统

我们整个流程是 GitHub + Jenkins + PHPMD + PHPUnit + Apollo(分布式的上线系统)。

我们用 GitHub 来管理所有代码,用 PHPMD 、PHPunit 对代码进行检查,如果代码不符合团队的统一规定,是无法提交的。在整个代码风格统一后,代码的质量也提高了一个新的档次。

打包系统

上线系统解决的是服务端 / 云端的问题,打包系统解决的是客户端打包的问题。让客户端每一次 commit 都打包,随时体验产品的最新功能,以及最新研发进度。它的流程和刚才自动化上线系统差不多,唯一不同的在于编译的过程。

在这里我想给大家介绍一下工具链,它其实是个 APP ,可以随时下载最新的产品包。同时我们把它和粉丝群联络起来,粉丝群的成员很快就能下载到最新版,如果有 bug 也可以很快解决,对组织效率有了一个非常大的提升。

上图就是 Jenkins 实际的打包情况。大家可以看到在 Jenkins 里有不同的支持,不同的平台,我们挂载了 4个 Mac mini 。基本上 Jenkins 连接了整个自动化系统,非常方便。

开发环境的 Docker 化

我们技术栈是 PHP,开发环境方面比 Java 坑多。在 Mac 、Windows 、Ubuntu 系统上配置细节有很多差异, 我们在本地完成配置后,部署的时候就会出现不一致的问题。

其实这种低级错误是不应该有的,但是还是无法避免。2014 年初的时候我们发现可以在 Docker 上安装 Nginx 、PHP-FPM 、Redis 以及 Mongdb 。保持细节配置、编译参数,和线上保持一致。

因为大家已经有了一套自己可以使用的开发环境,所以刚开始的时候推广 Docker 开发环境并不容易。为了方便,我们开发了 build.sh ,可以让不同 Docker 以及线上配置的新员工在新入职的时候,在 30 分钟内把项目跑起来。可以说,Build.sh 实现了自动生成 Dockerfile 并编译启动 Container ,同时保持所有配置都是最新版。

在我们做了 Docker 之后,PHP 的版本也就标准化了。在这个基础上,我们就以低成本的方式把现有的 5.6 的 PHP 项目全部移植到了 PHP 7.x 上,我觉得这一块的话对我们帮助是非常大的,是意外的收获。

白银时代

进入白银时代后,我们使用了企业 QQ 和企业邮箱,同时使用 IMAP 作为认证。基于 IMAP 认证系统,我们研发了访客系统、订餐系统、会议室预订、运营后台、证件照的生产线、Doku wiki 等 20 多个子系统。

只需要用公司的邮箱和账号,就可以登陆。在开通企业微信后,我们还实现了通过绑定手机号的形式,用微信扫一扫安全登录,且无需账号密码。

私有同步盘

强烈的推荐大家使用 OwnCloud 或者 Seafile 建立自有同步盘。一旦建立同步盘关联目录,项目经理、产品、设计,只管往里面拷文件就行了, 拷完文件后会自动地同步到目标文件夹里。就等于你直接把文件拷到了我的文件夹里面去,我随时可以看。再也不用使用 QQ 或者文件共享来传输 / 管理资料了。

黄金时代

在研发子系统的过程中你会发现,维护这些子系统非常消耗人力,可以说是划不来的。无论钉钉也好、企业微信也好,他们都引入了很多第三方的工具,同时价格很便宜。在 Camera360 ,我们选用了企业微信,下面我来介绍一下在企业微信里,我们自己的一些应用:

  • 便捷请假:可以非常方便的去请假,而且可以看到自己到底有多少年假;

  • 订餐系统:早餐,晚餐,中餐的;

  • 运维监控:接收运维监控,可以随时看到报警;

  • 会议室预订系统:可以看到每一个会议室使用情况,可以提前预定会议室;

  • 随手赞:给同事点赞。赞 = 积分,可以兑换各种礼品。

总结
  1. 可视化是提高效率的利器;

  2. 这是一个持续性的工作,随着时间的推移,团队内外部的环境变化,需要必定的重新审视销量情况;

  3. 借助外力,站在巨人的肩膀上;

  4. 付费工具更便宜;

  5. 由于团队小,资源有限,没有专门的效率团队,需要集中力量解决问题,逐个击破,形成链条。

彩蛋

大家一定都知道 Wi-Fi 万能钥匙,内网的 Wi-Fi 密码很容易泄露,由此而引发的内网安全是各个公司的重大隐患。我们也一直在想办法解决这个问题,在这里想跟大家分享一下我们的解决方法,希望对大家有用:

我们用 WAP2 + Free Radius 来解决企业的 Wi-Fi 安全,让每个人有自己的 Wi-Fi 账号密码,就算有人安装了 Wi-Fi 万能钥匙,他也只能破解一个账号密码。同时,我们能够监测出每个 Wi-Fi 连接的总设备数,一旦发现某个连接设备数过多,我们就会自动重置密码,员工再去微信中查询新的密码即可。

虽然这个方法不能说是 100% 的完美解决,但基本上解决了 80% 因为 Wi-Fi 万能钥匙导致我们 Wi-Fi 内网不够安全的问题。

下面是连接教程:首先我们选择自己的 Wi-Fi 时会弹出一个特殊的窗口,不只要填密玛,还要填写你的账户名和密码。另外,我们也有自己的私有的证书,点击信任证书,你就连上了属于自己的 Wi-Fi 。

它的部署其实也很简单:

  • 配置路由器使用服务器做 WAP2 授权;

  • 安装配置 Free Radius Docker 环境;

  • 建立一个 WebServer 与 Free Radius 共用一个数据库(如果是私有的 LDAP 认证系统,只要把账号密码同步给 Free Radius 即可);

  • 在企业微信中设置一个网页界面(上面的 WebServer )供员工随时查看密码。

我的分享就是这些,主要是自己一路走来的感慨和一些故事, 踩了不少坑, 同时很多解决方案并不完美, 欢迎大家拍砖指正。

(0)

相关推荐