写点什么

圆桌讨论:大规模移动开发

  • 2021-10-06
  • 本文字数:5145 字

    阅读完需:约 17 分钟

圆桌讨论:大规模移动开发

本文最初发表于 Increment 杂志,经 Increment 官方授权,InfoQ 中文站翻译并分享。


阿迪达斯(Adidas)Runtastic、Eventbrite 和 Citymapper 的工程负责人讨论了应用程序的性能、移动端如何融入其组织结构以及原生与跨平台开发。

嘉宾介绍

Christian Orgler,阿迪达斯 Runtastic 产品工程副总裁。现有 62000 多名员工,43 名移动工程师。


Natlia Gatti,Eventbrite 工程经理。现有 600 多名员工,20 名移动工程师。


Jogre Cohen,Citymapper 产品工程主管。现有 60 多名员工,10 名移动工程师。

贵司如何看待移动业务?

  • 阿迪达斯 Runtasic,Chrisian Orgler:


我们认为,移动是我们业务的核心,也就是创造吸引人的运动体验。说到底,你是不可能带着笔记本电脑跑步的。但是,将移动设备与正确的平台结合起来,会使你获得最佳的体验。举例来说,你可以使用我们的应用程序和 Facebook 门户网站,在你的客厅里进行快速锻炼。


随着我们的成长,我们经历了几个阶段,从发布和维护超过 30 个应用程序,到缩减为 4 个伴随网络平台的应用程序,再到 2015 年被阿迪达斯收购后,只专注于两个应用程序,即 adidas Running 和 adidas Training。


  • Eventbrite,Natalia Gatti:


我们的原生应用程序使我们能够将用户与全球各地的有趣活动联系起来,并通过利用位置信息、通知、数字钱包等等,提供更加个性化、无缝的体验。移动设备是我们用户的首选平台,大量的参与度、转换率、保留率和登录率等都证明了这一点。


  • Citymapper,Jorge Cohen:


Citymapper 的宗旨是帮助人们在城市中导航,因此我们需要高度移动化。这些特性是从移动端开始的,随后适应于 Web。尽管我们能够快速适应新技术,但是我们通常不会采用新的框架,因为新的框架对用户并没有明显的好处。并非每个人都买得起最新的设备,因此我们歇尽全力支持旧的操作系统,让我们的 API 向后兼容,这样,更多的人就可以从我们的服务中获益。五、六年前的 Citymapper 版本现在还可以用!

贵司在移动开发中使用了哪些工具和技术?

  • 阿迪达斯 Runtasic,Chrisian Orgler:


我们的构建基础设施使用 fastlane 和 Jenkins 等开源工具,这些都与我们的代码管理系统 Bitbucket 相连。我们的监控工具包括标准的苹果和谷歌控制台仪表板,以及我们自己更为定制的应用性能监控(App Performance Monitoring,APM)工具 New Relic,它与我们的后端服务相连。


发布任何变更前,我们都要经过 alpha 测试(与员工一起)和 beta 测试(与真实用户池),通过 App Center、TestFlight 或 Google Play 根据测试阶段进行分发。由于有数以百万计的活跃用户,我们有时会观察到一些问题,这些问题要求我们在模拟器不够用的情况下重新创建用户的确切硬件和数据环境,所以我们目前正在测试一个第三方远程访问工具,该工具将允许我们选择任何物理设备,并重新创建一个出现问题的确切硬件。在应用程序中,我们把它与 QA 工程师使用的内部调试功能结合起来。


  • Eventbrite,Natalia Gatti:


对于 iOS,我们使用苹果自己的开发者工具,比如 Xcode,因为它们减少了与 iOS 更新的摩擦。我们使用 XCTest 框架编写测试,并选择了诸如 fastlane 和 SwiftLint 等社区标准来促进应用程序平台之间的统一。对于 Android,我们使用 Android Studio 和 Kotlin 进行开发,使用 Firebase Test Labs 进行集成测试。为了在 iOS 和 Android 应用程序中共享业务逻辑和工具,我们也建立了仓库。我们依靠 Sentry 来追踪问题和崩溃,依靠 Google Analytics 来追踪应用的使用情况。CircleCI 是我们的持续集成管道,我们使用 Code Climate 来审查代码质量,包括代码覆盖率。


  • Citymapper,Jorge Cohen:


基于 Github Actions 和 Bitrise CI,我们使用 fastlane 进行构建和部署,利用 Mixpanel 和 Crashlytics 进行客户端监控,使用定制的 Grafana 仪表板对后端进行监控。我们的 Android 团队 Firebase Test Labs 用于对设备进行测试。近期,我们也开始使用 Point-Free 的 swift-snapshot-testing、Airbnb 的 Showkase 和 Cash App 的 paparazzi 等开源工具进行快照测试组件。通过 Phabricator,我们进行所有的代码审查,并使用特性标志来避免交付未完成的特性。此外,我们也使用了各种工具进行配对编程,主要是 Pop。

移动工程师如何融入贵司的团队结构?

  • 阿迪达斯 Runtasic,Chrisian Orgler:


我们的产品工程团队是跨职能设立的,包括移动、后端和 QA 工程师,以及一名产品设计师和经理。受 Spotify 模式的启发,聚集在一起的团队组成一个“部落”,专注于我们的两个应用,或者两个应用中的总体社交体验。我们的部落领导团队由首席设计师和产品、营销和工程负责人组成,负责部落成功实现我们公司的目标。


这种结构有助于支持团队的自主性,并在更广泛的组织内创造一种归属感,但是,当面对的是一些特性或需求,比如单点登录,这些不能由一个部落独立完成,这就可能成为一个挑战。现在,我们关注于以体验为中心,而非单一的应用来调整部落和团队的目标,以便我们能从这种团队结构中获益,同时也能作为工程组织变得更加独立于应用,以体验为导向。


  • Eventbrite,Natalia Gatti:


我们的移动工程师分属两个团队,即 iOS 和 Android,他们还包括专门的产品经理和产品设计师。这种结构的优点是更多地关注内部知识共享和支持,允许两个应用程序之间的相互交流以及跨团队的指导。这种结构也使产品团队受益,因为它向他们提供了对每个应用程序的整体视图。但是,这的确需要与拥有后端服务的特性团队进行高度协作和协调,这可能会导致在协调发布和调整路线图时作出妥协和权衡。


  • Citymapper,Jorge Cohen:


我们所有的移动工程师都在一个团队中,每个平台都有一个子团队。任何工程师都可以在应用程序的任何部分工作,从而使不同的特性和产品之间能够共享背景。这也意味着我们能够更加灵活地处理优先事项,因为任何工程师都可以跳到任何任务上。有时,当有多个高优先级的项目需求时,这会使项目管理更加困难。如果出现这样的情况,我们可以把一些工程师分配给某些任务,或者重新评估我们的优先事项。


很少有这样的情况,我们会建立临时的特性团队,来帮助我们专注于一个特别具有挑战性的项目,或者快速启动一个新产品。近来我们在 B2B SDK 上做过类似的工作。这些团队是临时性质的,一旦我们解决了这个挑战就会解散。随后,我们通过文档和内部讨论,与团队的其他成员分享关于新特性的知识。

你的移动团队是原生开发还是使用跨平台框架?

  • 阿迪达斯 Runtasic,Chrisian Orgler:


虽然我们的开发主要是基于原生平台,但是我们偶尔也会探索、测试和验证针对特定需求的跨平台框架。举例来说,我们使用 React Native 开发了我们的社交媒体源,但是出于几个原因,其中包括稳定性、所需的领域知识以及我们必须采用的变通方法来实现与原生代码的正确互操作性,我们决定过渡回原生开发的社交媒体源。


每个季度,在全公司的“新想法日”上,我们的工程师有时会用诸如 Flutter 这样的跨平台框架来开发内部应用,然后确定这种技术是否适合我们当前的企业规模需求。当前,我们正在对 Kotlin Multiplatform Mobile 进行评估,以共享平台之间的某些特定业务逻辑。


  • Eventbrite,Natalia Gatti:


我们的移动团队进行原生开发,因此我们可以提供最好的用户体验,并跟上最新的 iOS 和 Android 更新。尽管这样做会导致工作上的重复,但是我们发现,我们在设计和用户体验方面必须做出的让步,比使用非原生平台要少得多。它还能让我们更快地采用特定于平台的新特性。虽然我们在同一平台的应用程序之间共享了代码,但是我们也在 iOS 和 Android 应用程序之间使用了嵌入式 Web 视图,以提供相同的特性,当特性太难构建或无法产生投资回报时,就会进行原生开发。


  • Citymapper,Jorge Cohen:


我们的消费者应用程序是完全原生的,因此我们可以利用每个操作系统的最新特性,iOS 是用 Objective-C 和 Swift 编写的,Android 是用 Java 和 Kotlin 编写的。虽然我们有些屏幕是使用基于 Web 的技术构建的,但是我们通过结合设计、CSS 和 JavaScript,来确保这些屏幕尽可能地具有原生感。我们研究过 Kotlin 多平台和 Swift,用于我们的 B2B SDK 中的跨平台逻辑,但它们感觉还不够成熟。为了应对客户项目结构的不可预测性,我们希望使 SDK 技术尽可能接近平台供应商所使用的技术。

你如何衡量移动应用的性能?

  • 阿迪达斯 Runtasic,Chrisian Orgler:


在团队层面上,我们衡量与我们的经验相关的具体性能指标,例如我们的 GPS 跟踪算法需要多长时间调整准确性和速度,并删除异常值以补偿硬件传感器。在应用层面上,我们研究常见的指标,如崩溃和“应用程序无响应”(ANR)率,并将其转化为以用户为中心的指标,如“恼怒用户率”和“无崩溃用户率”,或根据用户发生的时间进行分类,如在跑步或完成锻炼时。我们还测量用户界面的时间、启动速度、应用程序的大小等等,包括新兴市场的一些关键指标,如蜂窝数据的使用和连接速度。


  • Eventbrite,Natalia Gatti:


为保证发布后每一个应用程序都能保持稳定,我们使用 Sentry 来监控无崩溃用户会话率,我们的目标是将这个比率控制在 99.6% 以上。对于我们的 iOS 应用程序,我们使用 MetricKit 来监控启动时间和挂起率。对于 Android 系统,我们在 Google Play Console 中测量 ANR 和崩溃率等核心指标。我们的重点是防止流量高峰期出现性能和网络问题。


  • Citymapper,Jorge Cohen:


我们主要使用定制的工具来衡量应用程序的启动时间。工程师们每天都在使用这个应用程序,而且我们发现,对缓慢的屏幕感到厌烦是激励我们解决问题的最好方式。我们的应用程序是要在地下、地铁中等场合使用的,网络连接不可靠,所以我们从一开始就针对不太稳定的连接进行优化,缓存相关数据,以确保应用程序可以离线运行。我们的团队还确保让旧版本的应用程序可靠地运行,而且我们几乎从不废弃旧的 API。

在产品开发过程中,你的移动团队如何优先考虑无障碍环境?

  • 阿迪达斯 Runtasic,Chrisian Orgler:


我们的 UI/UX 设计师和产品经理通过设计将无障碍环境纳入产品特性开发。近三年来,我们在应用程序的基础方面做了一些改进,比如为屏幕阅读器标注了按钮等用户界面组件,并创建了“轮椅”等专用运动类型,作为参与挑战或虚拟比赛的选项。


  • Eventbrite,Natalia Gatti:


我们成立了一个委员会,由 Web 和原生应用程序专家组成,收集用户对无障碍环境问题的反馈意见,并为更大的团队起草指导方针。此外,我们使用 iOS 上的 Accessibility Inspector 和 Android 上的 Accessibility Scanner 来衡量当前的无障碍环境问题。最近,我们专注于解决我们的登录流程,以解决对比度、动态字体和链接等问题。我们现在正计划在我们的持续集成环境中建立无障碍环境测试,这样我们就可以确信我们开发的新特性是无障碍环境。


  • Citymapper,Jorge Cohen:


2019 年,我们在一些城市(已有此类数据)增加了无障碍坡道,以支持轮椅使用者。由于我们希望进一步帮助有视觉障碍的人,所以改善 VoiceOver 支持也在我们的产品路线图上。

在移动开发过程或工作流中,有什么出乎意料或独特的东西让你觉得特别有效?

  • 阿迪达斯 Runtasic,Chrisian Orgler:


在产品开发团队中,我们给工程师们定义了额外的角色,让他们有机会发展领导能力。举例来说,我们有一个兴趣小组,称为公会,由指定的公会负责人领导,成员通过每周会议和演讲进行知识交流和学习。另外,我们也有一组轮流的发布经理,他们在各开发团队中协作并管理我们两周的发布周期。有了专门的发布经理,使我们的发布过程更加顺畅,提高了我们满足目标发布日期的能力。这已经成为我们工作方式的一个基础部分。


  • Eventbrite,Natalia Gatti:


苹果和安卓产品以不同的比例出现在世界各地。了解这些变化有助于我们作为一个全球组织来确定特性和集成的优先次序,并给予我们为每个平台开发的自由,满足我们客户的需求。例如,我们为活动组织者提供的销售点和票据扫描应用程序与一些第三方条码扫描仪、刷卡器和票据打印机集成,这些设备在全球范围的可用性不同。在我们需要优先为这些外设提供平台支持的时候,我们可以根据我们所要支持的地区内移动平台的产品市场匹配来开发集成。


  • Citymapper,Jorge Cohen:


许多移动应用程序至少有一个屏幕的广告内容需要经常更换,Citymapper 也不例外。为了在不涉及开发者的情况下保持内容的更新,我们使用了一个定制的 Sketch 插件,使我们的设计师和产品经理能够在不需要编程的情况下构建整个特性屏幕。转移到这个系统后,加快了信息和设计的实验速度,并使移动团队得以专注于更优先的工作。我们的应用程序目前有超过 10 个屏幕是用这个工具建立的。


作者介绍:


Increment 是一本关于团队如何大规模构建和操作软件系统的杂志,该杂志拥有印刷版和数字版。


原文链接:


https://increment.com/mobile/mobile-development-at-scale/

2021-10-06 08:006956

评论

发布
暂无评论
发现更多内容

Kubernetes 安全专家(CKS)考试技巧

HummerCloud

Kubernetes 云原生 考试经验 CKS 10月月更

软件测试 | 测试开发 | 校招面试真题 | 面试官必问面试题之你有什么想问我的?

测吧(北京)科技有限公司

测试

分布式事务-什么是分布式事务

zarmnosaj

10月月更

报告发布|“双轮驱动”重磅升级,天猫联合瓴羊、罗兰贝格发布《天猫DTC企业经营指南 :以人为本,品牌致胜》

瓴羊企业智能服务

云管理工具是干什么的?有哪些?哪个品牌好?

行云管家

云计算 云管理 云工具

【云安全】云安全产品有哪些?哪个品牌好?

行云管家

云计算 网络安全 安全 云安全

软件测试校招面试真题 | 面试官必问面试题之你有什么想问我的?

测试人

OpenYurt v1.0 正式发布!一文了解三大社区 SIG 重点更新

阿里巴巴云原生

阿里云 开源 云原生 openyurt 版本升级

技术贴 | 走进 PostgreSQL 行级安全策略

KaiwuDB

时序 #数据库

Qt | QList的removeAt、takeAt的区别

YOLO.

qt 10月月更 C++

Linux 各个Namespace 的作用

忙着长大#

linux namespace

数据结构学习,稀疏矩阵(三元组和十字链)

IC00

学习 数据结构 算法 学习笔记 10月月更

CEF | CEF浏览器客户端功能扩展:实现与JS交互的功能

YOLO.

qt 10月月更 C++

以开发之名|斗罗大陆:创造一个尽情探险的开放式游戏世界

HarmonyOS SDK

华为 HMS Core

如何在 SAP Business Application Studio 里创建 SAP UI5 应用并部署到 BTP 平台上

汪子熙

云原生 云平台 SAP 10月月更

基金营销存量博弈时代,数字内容小程序化助力破局

Speedoooo

小程序 基金 数字内容 小程序容器 买方投顾

MASA MAUI Plugin (四)条形码、二维码扫描功能

MASA技术团队

MASA MAUI MASA Blazor

如何利用Java在Word中创建表格

Geek_249eec

Java word 表格

Windows Server 2008 R2将tomcat添加进系统服务

我爱娃哈哈😍

tomcat windows 服务器运维

区服分析丨更透彻的游戏营运数据解读,助力高效增长

HarmonyOS SDK

分析

峰会回顾 | 基于StarRocks,百草味如何通过数据赋能快消品行业

StarRocks

#数据库

C# TreeView控件方法属性学习

IC00

C# 学习 程序员 上位机 10月月更

uniapp实现国际化多语言切换

源字节1号

软件开发

校招面试真题 | 和面试官聊的很 high,但就是拿不到 offer,怎么办?

测试人

【原创】k8s 微服务滚动发布(服务持续可用)实践笔记

车江毅

k8s 不停机发布 滚动发布

校招面试真题 | 和面试官聊的很 high,但就是拿不到 offer,怎么办?

霍格沃兹测试开发学社

观测云获亚马逊云科技年度 DevOps 合作伙伴奖

观测云

探究线程与进程的区别这一问题

C++后台开发

线程 多线程 进程 linux开发 C++开发

训练营 | 如何成为一名开源社区贡献者?

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

StartDT奇点云邀您参加2022云栖大会,11月3-5日杭州见

奇点云

云栖大会 奇点云

圆桌讨论:大规模移动开发_语言 & 开发_Increment Staff_InfoQ精选文章