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
Backend-Driven UI: Making Screens Dynamic
Search
yhkaplan
October 16, 2020
Programming
1.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Backend-Driven UI: Making Screens Dynamic
yhkaplan
October 16, 2020
More Decks by yhkaplan
See All by yhkaplan
Using the latest UICollectionView APIs
yhkaplan
0
3.7k
Swift and Concurrency: The Plan for World Domination
yhkaplan
0
240
Migrating from UIKit to SwiftUI efficiently
yhkaplan
4
4k
Property Wrappers
yhkaplan
0
630
Parser Combinators
yhkaplan
0
340
The Great Swift Migration
yhkaplan
1
4.3k
Speeding Up Your CI
yhkaplan
0
530
Automate All the Things
yhkaplan
4
2.7k
Other Decks in Programming
See All in Programming
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.2k
はじめてのPLATEAU
nokonoko1203
1
570
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
180
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
300
Crash Auto Pipelines
veronikapj
1
380
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
300
AI Augmentation Techniques with Liberty
ivargrimstad
1
390
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
170
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
14
11k
Distance field of Julia set
kinakomoti321
0
290
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
140
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
280
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
510
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Fireside Chat
paigeccino
43
4.1k
Designing Experiences People Love
moore
143
24k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
350
Technical Leadership for Architectural Decision Making
baasie
3
640
Un-Boring Meetings
codingconduct
0
490
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
520
Transcript
Backend-Driven UI: Making Screens Dynamic 1
Self-intro — Name: Joshua Kaplan (@yhkaplan) — Work: minne @
GMO Pepabo — Interests: ! CI/CD, " frameworks, and more — Hobbies: # bread, $ history, and running 2
What is a backend driven UI? — Extreme end: every
individual view defined by backend — Less extreme: order of and type of view defined by backend — Why JSON? 3
Purpose — Change content for each customer — A/B testing
— Feature flags — Less work to make changes 4
Demo 5
How I made it — Prototype in sample app —
Use compositional layout and diffable data sources — Define each section type as JSON w/ a title and subtitle — Firebase Remote Config 6
Code Example let homeReducer = Reducer<HomeState, HomeAction, HomeEnvironment> { state,
action, environment in switch action { case .loadSectionData: state.isSectionLoading = true return environment.homeService.homeContentPublisher() .replaceError(with: []) .receive(on: DispatchQueue.main) .map { HomeAction.loadItemData(sections: $0) } .eraseToEffect() case let .loadItemData(sections): state.isSectionLoading = true return environment.homeService.sectionItemsPublisher(sections: sections) .replaceError(with: [:]) .receive(on: DispatchQueue.main) .map { HomeAction.setSections(sections: $0) } .eraseToEffect() } return .none } 7
Challenges/risks — App Review risks (AKA don’t pull a Fortnite)
— Server unavailable 8
Other possible approaches — Defining more in JSON — microsoft/AdaptiveCards
— spotify/HubFramework — Web views 9
Conclusion — Easy to strike a balance w/ compositional layout
— Think of important, frequently changing screens — Worth it for minne — Try it out in a prototype! — yhkaplan/Shop 10