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
Adventures in Umbrella App Design
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Desmond Bowe
September 29, 2017
Programming
1
82
Adventures in Umbrella App Design
An Experience Report on wacky things I've tried when building Umbrella projects.
Desmond Bowe
September 29, 2017
Tweet
Share
More Decks by Desmond Bowe
See All by Desmond Bowe
Parameter Validation in Phoenix Apps
desmondmonster
0
47
Phoenix LiveView
desmondmonster
0
48
How I Deploy at Crevalle
desmondmonster
0
67
Why Elixir?
desmondmonster
2
110
Recurring Tasks in Elixir
desmondmonster
0
640
Other Decks in Programming
See All in Programming
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
260
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
Claude Code Skill入門
mayahoney
0
320
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
370
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.9k
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
450
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1k
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
430
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
910
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
130
20260315 AWSなんもわからん🥲
chiilog
1
140
TipKitTips
ktcryomm
0
160
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
67
37k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
110
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.4k
Why Our Code Smells
bkeepers
PRO
340
58k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
140
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
540
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
170
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Building AI with AI
inesmontani
PRO
1
790
So, you think you're a good person
axbom
PRO
2
2k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
400
Transcript
Adventures in Umbrella App Design Desmond Bowe NYC Elixir Meetup
September 28, 2017
Elixir Training • Basics • OTP • Design / Architecture
EMPEX Founder
☂ "Umbrella projects are used to build applications that run
together in a single repository.” - elixirlang.org
☂ my_app/ _build/ config/ deps/ lib/ my_app/ my_app.ex log/ priv/
test/ mix.exs mix.lock _build/ apps/ my_app/ config/ deps/ lib/ my_app/ my_app.ex log/ priv/ test/ mix.exs mix.lock photo_service/ config/ deps/ mix.exs mix.lock Normal App Umbrella App
☂ Calling Functions Across Apps ☠
Should I Use One?
Experience Report Twig Crevalle
Example 1: Twig Infrastructure • landing site • admin site
• backoffice Needs • share assets across web frontends • web frontends need data from different services
Twig 1st approach • 3 phoenix applications • separate assets
app apps/ admin/ assets/ landing/ mother_brain/
Twig • share js, css, images • assets app is
styleguide • hard to share templates • redundant dependencies • painful upgrades
Twig 2nd approach • all web apps in single OTP
app apps/ mother_brain/ site/ config/ web/ admin/ assets/ landing/ controllers/ views/ endpoint.ex router.ex web.ex
None
Twig • share js, css, images • assets app is
styleguide • easy to share templates • streamlined dependencies • simpler authentication • configuration • file organization is important to reduce cognitive load
Example 2: Crevalle Infrastructure • many distinct user-facing apps with
individual datastore Needs • easily spin up new projects • reuse functionality • bird’s eye view of company
Crevalle Approach • each project is its own app •
shared functionality (e.g. image processing, authentication) is extracted to its own app apps/ chitta/ crux/ oauth/ postfactor/ pulse/ config/ lib/ web/
Crevalle • easy to create/deploy projects • simple integration testing
• deploy entire company platform at once
Crevalle if your entire company is an umbrella app, your
company’s individual services are their own OTP apps • teams work on specific app • apps are individually deployed to appropriate hardware • monolith + services • no more issues of internal API versions, data serialization
Anti-Patterns extracting all services to their own app because Boundaries
Rules of Thumb for OTP apps • it has its
own datastore • it has particular resource needs (eg high CPU load) • shared functionality
successful Elixir application design means thinking in terms of Applications
successful Elixir application design means thinking in terms of Applications
we are still figuring this out.
successful Elixir application design means thinking in terms of Applications
we are still figuring this out. join us at the bar!
thanks. @desmondmonster