Instagram iOS高级工程师,负责开发高并发的多媒体聊天工具。专注移动前端与通讯类产品。 前Apple员工,负责Apple Store App的零售店功能开发。著有《iPad应用开发实战》一书。 毕业于密歇根理工大学,清华大学,北航,拥有电子工程和核工程的硕士学位。
Instagram iOS高级工程师,负责开发高并发的多媒体聊天工具。专注移动前端与通讯类产品。 前Apple员工,负责Apple Store App的零售店功能开发。著有《iPad应用开发实战》一书。 毕业于密歇根理工大学,清华大学,北航,拥有电子工程和核工程的硕士学位。
随着移动开发团队的扩大和产品功能的增加,代码库也迅速变得臃肿,并带来一系列挑战。代码耦合、代码搜寻和重用变得更难、merge conflict变得更频繁、编译速度变慢、AB试验变得繁多。以上种种,都将导致开发效率大幅降低。Instagram iOS团队为此做了诸多努力,确保工程团队扩大的同时,能产生良好的协同效应。
演讲内容包括:
1、代码模块化解决方案:IGListKit + MVVM。
Instagram产品设计风格是大量的列表。
(1) 早期大量使用了iOS原生UITableView,方便极少数工程师进行快速开发。
(2) 随着列表变得复杂,Instagram开发并开源了IGListKit。
2、大规模AB试验:
AB实验是社交产品快速迭代以及有效测量的核心工具。当团队扩大后,试验数量和相互干扰增多。
(1) Instagram通过对实验组进行空间(用户组)和时间(先后)的分离,确保试验的独立有效性。
(2) 让工程师、产品经理、数据科学家、设计师等共同参与试验决策,防止出现实验结果解读的主观偏差。
3、加快编译速度:Buck + Focus + Focus Project + Phabricator
代码解耦重用了,试验相互分离了,更多工程师能方便地协作了,代码量也增长更快了。这个时候,编译速度就会变得越来越慢——XCode不是为大型代码库所设计的。
(1) Buck:通过并行编译和增量编译,加快编译速度。
(2) Focus:随着代码量进一步增加,Buck编译依然需要大量时间。Focus的解决思路是,在服务器端预先编译好大量组件,生成ipa时直接下载这些组件。工程师只需要专注少量组件的代码,实际操作中只需要编译这部分组件。
(3) Focus Project:每个团队可以定义自己常用的一系列组件,在编译速度和工程师可以快速打开的源代码之间获得平衡。
(4) Focus解决了编译速度的问题,但工程师通过XCode搜寻代码变得困难了。解决方案是采用Phabricator,代码上云,提供便捷的浏览器搜索、代码历史查看工具。
听众收益:
了解热门社交产品如何应对代码库由小到大的挑战,如何在代码量迅速增加时确保团队开发效率,并有效进行AB试验。