Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Reclaim your architecture @ sbonrails
shagemann
February 12, 2014
Technology
1
77
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
Structural Engineering in Ruby
shagemann
0
350
Productize Your Services! @ springone 2017
shagemann
0
390
Software Components @ RUG-B
shagemann
0
420
Boulder Ruby Group Beginner's Track - What to Do Next?
shagemann
0
62
GET STARTED WITH COMPONENT-BASED RAILS APPLICATIONS! @ Rocky Mountain Ruby 2015
shagemann
1
97
Get started with Component-Based Rails @ RailsConf 2015
shagemann
3
640
Refactoring towards Component-based Rails Architectures @ RailsConf 2014
shagemann
5
770
The Rich, Flowers, and Piles of Sh%#t - And What To Do About It
shagemann
0
46
Active Record Model Dependencies
shagemann
0
91
Other Decks in Technology
See All in Technology
[SRE NEXT 2022]メルカリグループにおけるSREs
srenext
0
240
プロダクション環境の信頼性を損ねず観測する技術
egmc
4
580
Who owns the Service Level?
chaspy
5
1.1k
Embedded SRE at Mercari
tcnksm
0
850
エンタープライズにおけるSRE立ち上げとNew Relic選定に至った背景とは / SRE Startup and New Relic in the Enterprise
tomoyakitaura
2
160
ニフティでSRE推進活動を始めて取り組んできたこと
niftycorp
2
470
A Conditional Point Diffusion-Refinement Paradigm for 3D Point Cloud Completion
takmin
0
220
toilを解消した話
asumaywy
0
210
キャッチアップ Android 13 / Catch up Android 13
yanzm
2
1.2k
testing journey / テストが嫌いでIT業界を離れるはずだったのに〜テスト嫌いが現場で品質改善を実施するまでの物語〜
aki_moon
1
350
次期LTSに備えよ!AOS 6.1 HCI Core 編
smzksts
0
180
Adopting Kafka for the #1 job site in the world
ymyzk
1
520
Featured
See All Featured
Designing with Data
zakiwarfel
91
3.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
For a Future-Friendly Web
brad_frost
164
7.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1M
Pencils Down: Stop Designing & Start Developing
hursman
112
9.8k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
212
11k
A Tale of Four Properties
chriscoyier
149
20k
How to Ace a Technical Interview
jacobian
265
21k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
29
4.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
337
17k
How GitHub (no longer) Works
holman
296
140k
Automating Front-end Workflow
addyosmani
1351
200k
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 stephan@pivotallabs.com