Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
6 lessons learned scaling mobile
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Jamie McDonald
March 17, 2016
Programming
390
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
6 lessons learned scaling mobile
Mobile @ Scale London, March 2016
Jamie McDonald
March 17, 2016
More Decks by Jamie McDonald
See All by Jamie McDonald
Async Android
jdamcd
10
700
Android Engineering for Scale
jdamcd
13
2.2k
Other Decks in Programming
See All in Programming
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
620
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
250
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
180
XHTMLが残したもの
yosuke_furukawa
PRO
2
800
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
710
Heart of Swift Concurrency
koher
0
760
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
210
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
460
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
240
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
570
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
1k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
110
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Visualization
eitanlees
152
17k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
840
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
850
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Thoughts on Productivity
jonyablonski
76
5.4k
Embracing the Ebb and Flow
colly
88
5.2k
Accessibility Awareness
sabderemane
1
210
YesSQL, Process and Tooling at Scale
rocio
174
15k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
We Have a Design System, Now What?
morganepeng
55
8.3k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
None
6 lessons learned scaling mobile Jamie McDonald & Matej Balantič
175M+ monthly unique listeners ~20 mobile engineers
1 Product over platform
SoundCloud Pulse
Aligned experience
None
2 Find opportunities to share
BFFs
Android iOS Mobile API Skippy Skippy Through the stack
More • Values • Practices • Knowledge
3 Confront technical debt
Brand new app Alternate approaches Modernise by vertical
Android • Legacy code • Small, incremental improvements • Re-build
vertical slices
Successive, well intentioned, changes to architecture throughout the lifetime of
a project can lead to a fragmented and hard-to-maintain code base Lava layers
Rewrite by abstraction
Rewrite by abstraction
None
• Legacy project by an external agency • Decision to
start from scratch • Big bang release* * except iPad which got delayed iOS
None
• Fresh start with code architecture • Away with legacy
code once and for all • Innovation on hold for a while • Might need to sacrifice existing features → angry users Rewrite aftermath
Positive side effect User complaints about iOS app crashes
4 Avoid premature reorganisation
The challenge Scaling the team
How we thought we’ll solve it Scaling the team
How it was in practice Scaling the team
Expectations Path to feature teams
Reality Path to feature teams
Current transitional structure Scaling the team
5 Empower teams
iOS/Android team Search Stations Sign-in Creators ... Traditional release model
Search Stations Sign-in Creators ... Relase train model
Empower teams • Everyone can ship to master* • Put
the code behind a feature flag • Enable the feature once ready to ship * Pairing required. When working alone you need 2x on your pull request.
Release train Feature development & QA Review / Public Beta
Feature freeze Feature freeze Feature freeze
Build time configuration "release": { "inherits_from": "adhoc", "dev_always_skippy": { "enabled":
false } } "release": { "inherits_from": "adhoc", "dev_always_skippy": { "enabled": true } }
Run time configuration
Behind the feature flag - (void)registerAppShortcuts { if ([FTSFlipTheSwitch isDevAppShortcutsEnabled])
{ [self registerInitialActions]; } }
“You break it, you buy fix it” • Continuous integration
allows us to trust that we’re not breaking features • Good unit and acceptance tests as an insurance policy
6 Invest in solid patterns and tools
Android • Reactive programming (RxJava) • Release pipeline • Architecture
& testability
LightCycle @Inject @LightCycle ActionBarUtil actionBarUtil; @Inject @LightCycle PlayerController playerController; public
MainActivity() { [...] }
iOS • Reactive programming (ReactiveCoca) • Stable CoreData stack •
Dependency inversion
None
Thank you, London! soundcloud.com/jobs Jamie McDonald -- @jdamcd Matej Balantič
-- @skavt
Mobile BFF: https://www.thoughtworks.com/insights/blog/bff-soundcloud Lava layer anti-pattern: http://mikehadlow.blogspot.de/2014/12/the-lava-layer-anti-pattern.html Branch by abstraction:
http://martinfowler.com/bliki/BranchByAbstraction.html Android architecture: https://realm.io/news/gotocph-mattias-kappler-reactive-architecture-android Mobile CI @ SoundCloud: https://www.youtube.com/watch?v=Rq721qtKKNk Dependency Inversion principle: http://martinfowler.com/articles/dipInTheWild.html References