Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
6 lessons learned scaling mobile
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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エージェントで 変わるAndroid開発環境
takahirom
2
770
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
数百円から始めるRuby電子工作
tarosay
0
130
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
440
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1.1k
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
4
1.3k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
230
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.5k
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
570
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
400
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Faster Mobile Websites
deanohume
310
32k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
240
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
440
Skip the Path - Find Your Career Trail
mkilby
1
180
Mobile First: as difficult as doing things right
swwweet
225
10k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
200
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
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