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 连接了整个自动化系统,非常方便。
我们技术栈是 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 ,我们选用了企业微信,下面我来介绍一下在企业微信里,我们自己的一些应用:
便捷请假:可以非常方便的去请假,而且可以看到自己到底有多少年假;
订餐系统:早餐,晚餐,中餐的;
运维监控:接收运维监控,可以随时看到报警;
会议室预订系统:可以看到每一个会议室使用情况,可以提前预定会议室;
随手赞:给同事点赞。赞 = 积分,可以兑换各种礼品。
可视化是提高效率的利器;
这是一个持续性的工作,随着时间的推移,团队内外部的环境变化,需要必定的重新审视销量情况;
借助外力,站在巨人的肩膀上;
付费工具更便宜;
由于团队小,资源有限,没有专门的效率团队,需要集中力量解决问题,逐个击破,形成链条。
大家一定都知道 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 )供员工随时查看密码。
我的分享就是这些,主要是自己一路走来的感慨和一些故事, 踩了不少坑, 同时很多解决方案并不完美, 欢迎大家拍砖指正。