Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
6 lessons learned scaling mobile
Search
Jamie McDonald
March 17, 2016
Programming
1
370
6 lessons learned scaling mobile
Mobile @ Scale London, March 2016
Jamie McDonald
March 17, 2016
Tweet
Share
More Decks by Jamie McDonald
See All by Jamie McDonald
Async Android
jdamcd
10
680
Android Engineering for Scale
jdamcd
13
2.2k
Other Decks in Programming
See All in Programming
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
150
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.3k
Graviton と Nitro と私
maroon1st
0
110
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2.3k
Deno Tunnel を使ってみた話
kamekyame
0
160
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
130
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
360
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
270
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
260
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
150
ゲームの物理 剛体編
fadis
0
360
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
380
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
710
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
0
26
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.4k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
23
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
How STYLIGHT went responsive
nonsquared
100
6k
Reality Check: Gamification 10 Years Later
codingconduct
0
1.9k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
400
Crafting Experiences
bethany
0
19
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Being A Developer After 40
akosma
91
590k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.1k
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