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
Reclaim your architecture @ sbonrails
Search
shagemann
February 12, 2014
Technology
1
96
Reclaim your architecture @ sbonrails
The slides of my February 12, 2014 talk at Santa Barbara on Rails
shagemann
February 12, 2014
Tweet
Share
More Decks by shagemann
See All by shagemann
Gradually Modularizing your Monolith with Ruby Packs and Packwerk
shagemann
0
760
Structural Engineering in Ruby
shagemann
0
960
Productize Your Services! @ springone 2017
shagemann
0
990
Software Components @ RUG-B
shagemann
0
1k
Boulder Ruby Group Beginner's Track - What to Do Next?
shagemann
0
77
GET STARTED WITH COMPONENT-BASED RAILS APPLICATIONS! @ Rocky Mountain Ruby 2015
shagemann
1
130
Get started with Component-Based Rails @ RailsConf 2015
shagemann
3
1.3k
Refactoring towards Component-based Rails Architectures @ RailsConf 2014
shagemann
5
1.4k
The Rich, Flowers, and Piles of Sh%#t - And What To Do About It
shagemann
0
60
Other Decks in Technology
See All in Technology
ゆめみのアクセシビリティの現在地と今後
ryokatsuse
3
290
コンテナ・K8s研修 - 後半 Kubernetes 基礎&ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
1
120
MySQLのロックの種類とその競合
yoku0825
6
1.6k
サービス開発を前に進めるために 新米リードエンジニアが 取り組んだこと / Steps Taken by a Novice Lead Engineer to Advance Service Development
nologyance
0
180
[I/O Extended Android 2024] What`s new in Android 2024
kyeongwan
0
220
20240717_イケコパ代表Copilot_in_Teams会社でこう使ってます
ponponmikankan
2
430
GoとアクターモデルでES+CQRSを実践! / proto_actor_es_cqrs
ytake
1
160
Datadog Cloud SIEMを使ってAWS環境の脅威を可視化した話/lifeistech-datadog-cloud-siem
gidajun
0
480
AWS IAMのアンチパターン/AWSが考える最低権限実現へのアプローチ概略(JAWS-UG朝会#59資料改修20分版)
htan
0
330
クラウド利用者の「責任」をどう果たす?AWSセキュリティ対策のススメ #AWSSummit
hiashisan
0
280
技術負債による事業の失敗はなぜ起こるのか / Why do business failures due to technical debt occur?
i35_267
0
190
Classmethod流のPlatform Engineering / classmethod-platform-engineering-devio2024
tomoki10
0
480
Featured
See All Featured
A designer walks into a library…
pauljervisheath
201
24k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
Atom: Resistance is Futile
akmur
261
25k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
34
1.9k
GraphQLの誤解/rethinking-graphql
sonatard
59
9.6k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
105
6.8k
Ruby is Unlike a Banana
tanoku
96
10k
Build your cross-platform service in a week with App Engine
jlugia
227
17k
KATA
mclloyd
20
13k
Producing Creativity
orderedlist
PRO
340
39k
In The Pink: A Labor of Love
frogandcode
139
22k
Optimising Largest Contentful Paint
csswizardry
18
2.6k
Transcript
Reclaim your architecture Stephan Hagemann
Rails developers?
STEPHAN GERMAN GERMANY BOULDER ROCK CLIMBING WHITE MALE NETHERLANDS CYCLING
DIVING CONSULTANT RUBY RAILS GO XING PIVOTAL LABS
None
None
Labeling in Software development
No Rails app starts with a namespace
All gems start with a namespace
Rails Gems
AEH FACE Rails Gems
! ! ! ! ! ! ! ! ! +
active record + active support + action controller Rails Gems
How can you tell what still belongs?
None
Try this! ! Namespace everything in your next app
Give yourself a box so you can start thinking outside
of it
Can you prove small chunks?
Growing size
Exploding complexity SIZE POSSIBLE INTERACTIONS
Effect of structure VS
SIZE POSSIBLE INTERACTIONS Reduced exploding complexity
Slashing complexity SIZE COMPLEXITY SPLIT!
Making chunks early SIZE COMPLEXITY SPLIT!
Net win? SIZE COMPLEXITY SPLIT! $ $
You’re going to do it often SIZE DOUBLE SPLIT! COMPLEXITY
NEW CODE IN ENGINE NEW CODE IN ENGINE
Never build large apps to build large apps
github.com/shageman/ the_next_big_thing
5 looser coupling 3 gems 1 one app 4 engines
8 HTTP SOA 2 modules 7 eco-system 6 services
1 The one app
HTTP://WWW.FLICKR.COM/PHOTOS/WIDNR/6589525327/
Examples ! diaspora, CF CC, canvas
If you are in the situation where you’re reading some
text, investigating, trying to figure out what is going on... That is a very good property of a detective novel and a very bad property of code. ! Martin Fowler
ANNOYANCE ENTRY STRUCTURE
2 The modularized app
HTTP://EECUE.COM/P/31426/METAL-RECYCLING-YARD.HTML
+ A higher level structure
ANNOYANCE EMAIL SIGNUP STRUCTURE
3 The gem component app
None
+ Provable independence
Choose modules that tell the story of the system and
contain a cohesive set of concepts Eric Evans
None
HTTP://WWW.SMASHINGMAGAZINE.COM/INFORMATION-AND-INSTRUCTIONAL-SIGNS-PART-1/
ANNOYANCE EMAIL SIGNUP STRUCTURE
4 The Rails component app
None
+ Provable independence for Rails
Rails Engines
EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE
5 The loosely-coupled app
None
+ Clearer responsibilities
EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE EVENT COUNTER
6 The service-oriented app
None
+ Reduced surface area
588 194 LOGGER::COUNT EVENTCOUNTER::*.METHODS.COUNT LOGGER 361 115
588 194 LOGGER::COUNT EVENTCOUNTER::*.METHODS.COUNT LOGGER 361 115 - OBJECT.METHODS LOGGER::COUNT
LOGGER 394 0 247 1
EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE EVENT COUNTER
7 The eco-system app
None
gem build event_counter..
gem push event_counter..
None
EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE EVENT COUNTER
8 The HTTP SOA app
PICTURE HERE
STRUCTURE EMAIL SIGNUP TEASER ANNOYANCE EVENT COUNTER
5 looser coupling 3 gems 1 one app 4 engines
8 HTTP SOA 2 modules 7 eco-system 6 services
5 looser coupling 3 gems 1 one app 4 engines
8 HTTP SOA 2 modules 7 eco-system 6 services
9 Architecture the reclaimed years
None
HTTP://WWW.CONFREAKS.COM/VIDEOS/759-RUBYMIDWEST2011-KEYNOTE- ARCHITECTURE-THE-LOST-YEARS
None
None
None
None
well, we just did that
EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE EVENT COUNTER
Thanks! Stephan Hagemann @shageman
[email protected]