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
Re-Architecting Applications (Without a Rewrite!)
Search
Daniel Lew
February 10, 2018
Programming
8
2.6k
Re-Architecting Applications (Without a Rewrite!)
Talk given at DevFestMN 2018 & MinneBar 13.
Recording here:
https://youtu.be/dKm7MKoxVIg
Daniel Lew
February 10, 2018
Tweet
Share
More Decks by Daniel Lew
See All by Daniel Lew
Finding Meaningful, Mission-Driven Work
dlew
0
53
Things Maybe You Don't Know as a Newer Developer
dlew
1
90
Maintaining Software Correctness
dlew
4
810
Grokking Coroutines (MinneBar)
dlew
5
520
ClimateChangeTech.pdf
dlew
0
89
What Tech Can Do About Climate Change
dlew
0
470
Grokking Coroutines
dlew
5
1k
Automated Tests Aren't Enough
dlew
0
450
The Importance of Developer Communities
dlew
0
83
Other Decks in Programming
See All in Programming
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
1.9k
英語
s_shimotori
1
220
Introduction to GitOps
hwchiu
0
110
AHC035解説
terryu16
0
710
Namespace on read
tagomoris
2
370
Composing an API the *right* way (Droidcon Berlin 2024)
zsmb
1
450
Webエディタライブラリ 「CodeMirror」から学ぶ Webアプリ開発のテクニック
ryosukeigarashi
0
250
Temporalを取り巻く仕様を整理する
sajikix
0
110
【Go言語】ジェネリクス
tomo1227
0
170
スクラムマスターって孤独じゃないですか?
yoshitaroyoyo
1
140
DDDを志して3年経ったら「DDDの皮を被ったクリーンアーキテクチャ」になった話【デブサミ2024夏】
texmeijin
1
620
CSC307 Lecture 14
javiergs
PRO
0
220
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
59
9.6k
Designing Experiences People Love
moore
136
23k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.8k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
17
8.7k
Into the Great Unknown - MozCon
thekraken
20
1.3k
Building Flexible Design Systems
yeseniaperezcruz
323
37k
YesSQL, Process and Tooling at Scale
rocio
166
14k
Writing Fast Ruby
sferik
623
60k
Leading Effective Engineering Teams 2024
addyosmani
3
300
Build The Right Thing And Hit Your Dates
maggiecrowley
28
2.2k
Transcript
Re-architecting Applications (Without a Rewrite!) @danlew42
architecture: the structure and design of a system or product
None
None
None
None
None
“Model-View- Controller is the best thing since sliced bread.” ~Evil
Dan Lew
“OMG, I’m switching to MVC ASAP!” ~You Stability Some New
Architecture
Danger • Pure architectures require fresh code • Rewrites always
take longer than expected • Old code == battle tested • Expectations may not match reality
Goals • Introduce new architectures to existing codebase • Push
releases while re-architecting codebase
None
</Housing Metaphors>
Goal #1: Introduce new architectures to existing codebase
Re-Architecting Safely • Prevent overly ambitious rewrites • Prevent regrettable
architecture choices • Steps • Explore • Experiment • Expand • Embrace
Explore • What is the problem? • Define goals •
Define constraints • What are the solutions? • Brainstorm • Research
Experiment • Pick a project • Minimize work • Small
project • Simplified implementations • Minimize damage • Self-contained project • Unimportant project
Expand • Run more experiments • Pick projects wisely •
Use architecture in new ways • Pick hardest problems • Stretch architecture to limits
Embrace • Write all new code with new architecture •
Deprecate old architecture • Delete old code (optional)
Disclaimer Not an exact science
Goal #2: Push releases while re-architecting codebase
Can’t simultaneously use old and new architecture Can’t keep releasing
Old New Old + New
Parallel Development
Decouple Code BAD GOOD
Feature Flags
Shims
Shims
Offline Mode A parallel development success story
Online Only Offline Enabled
Decoupling Services Before After
Feature Flags
Shims Before After
Offline Mode • Project length: 1.5 years • Never stopped
releasing • Minimal UI changes • Gradual experimentation via flags • Switched over without anyone noticing • https://tech.trello.com/sync-architecture/
Failures With real life examples!
Explore Failures • Architecting with no purpose • Navi •
Choosing new and shiny without understanding • RxJava
Experiment Failures • Making the experiment too large • JavaScript:
The Good Parts • Not recognizing a failed experiment • Operations
Expand Failures • Choosing only easy problems • Identifiers •
Not recognizing a failed corner case • RxLifecycle
Embrace Failures • Continuing to expend effort on old architecture
• Fresh boards
Pet Peeve Telling everyone about an architecture before proving it
out!
Current Architecture Thoughts
Omni Models • Single model • Deserialized from JSON •
Written to ORM • Used by UI • Problems • Which fields are present? • How do we avoid mutability issues?
Domain-specific models • ApiModel • Only used when talking to
server • DbModel • Mutable, flexible • UiModel • Immutable, guarantees values • ApiModel <-> DbModel <-> UiModel
Unidirectional Architecture
Thanks for listening! @danlew42