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
So you want to write a framework? Accidental lessons from a successful project
Search
Russell Keith-Magee
February 22, 2014
Programming
0
100
So you want to write a framework? Accidental lessons from a successful project
Opening keynote from PyCon PH 2014
Russell Keith-Magee
February 22, 2014
Tweet
Share
More Decks by Russell Keith-Magee
See All by Russell Keith-Magee
Python All The Things!
freakboy3742
2
300
Snakes in a browser
freakboy3742
1
110
Making a splash with your open source project
freakboy3742
0
350
Things your parents didn't teach you about sharing your toys
freakboy3742
0
360
A tale of two cellphones: Python on Android and iOS
freakboy3742
0
220
Beyond Web 2.0 - Django and Python in the modern web ecosystem
freakboy3742
0
250
Python on the move: The state of Mobile Python
freakboy3742
0
270
I am a doctor...
freakboy3742
0
140
Professional Yak Coiffure
freakboy3742
0
83
Other Decks in Programming
See All in Programming
puregoの活用例
aethiopicuschan
0
220
ONE WEDGE_company_guide
1wedge_one
0
390
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
250
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
110
StreamlitとTerraformでデータカタログを作った話
gussan0223
0
310
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
930
脱・初心者!脱・マネコン!AWS CDKを使ってみませんか!?
har1101
0
300
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
130
Elm Form Validation
bkuhlmann
0
510
Git Lint
bkuhlmann
4
740
Folding Cheat Sheet #3
philipschwarz
PRO
0
120
コードレビューで学ぶ!Kotlinオブジェクト指向デザインパターン
akkie76
2
180
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
The Power of CSS Pseudo Elements
geoffreycrofte
59
5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
12
1.5k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Designing for Performance
lara
601
67k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
29
6k
Statistics for Hackers
jakevdp
789
220k
How to train your dragon (web standard)
notwaldorf
72
5.1k
Building Applications with DynamoDB
mza
88
5.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
15
2.6k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.9k
Become a Pro
speakerdeck
PRO
10
4.5k
Transcript
So you want to write a framework? Accidental lessons from
a successful project Dr Russell Keith-Magee PyCon PH 2014
None
None
None
I've got fingerprints elsewhere.
This isn't about Python.
This isn't about web frameworks.
Best of Breed vs Batteries Included
"Batteries Included" Frameworks "Everything comes in the box" One package
to download/install Minimal dependencies No decisions to make Documentation on the parts
"Best of Breed" Frameworks Pick from existing selection of libraries
Glue logic to tie them together Many dependencies Multiple decisions may be required Documentation on integration
None
Hybrids are possible.
Why pick one over the other?
History matters.
It's hard to be best of breed when the breed
doesn't exist yet.
Ian Bicking and SQLObject http://bit.ly/bicking-goodbye
Picking "best of breed" early can be detrimental.
History matters.
Backwards compatibility
Time is relative.
“ A rule of thumb that has worked for me
is that if I'm excited to play around with something it probably doesn't belong in production ” Maciej Ceglowski (Pinboard)
Backwards compatibility has a price.
Batteries Included can still be backwards incompatible.
Best of breed encourages you to pick and choose.
Is a choice of batteries really what is required?
"Batteries included" doesn't mean "Can't use other batteries".
Messaging matters.
Timing matters.
The 90% framework.
Out of the box experience matters.
http://goo.gl/Epzms
None
Implicit documentation
Models and Forms class MyUser(models.Model): name = models.CharField(max_length=100) age =
models.IntegerField() date_of_birth = models.DateField() class MyForm(forms.Form): name = forms.CharField(max_length=100) age = forms.IntegerField() date_of_birth = forms.DateField()
Tools vs ecosystems
Jacob's Tractor
Tools vs ecosystems
Metcalfe's Law: The utility of a network increases with the
square of it's participants.
Ecosystems
Microframeworks
Remember to share with the other children.
Sending the wrong signals.
Packaging systems matter.
Community matters.
Outreach is important.
Absent friends
http://bit.ly/malcolm-monkey-hat
http://bit.ly/malcolm-plays-spassky
Requiem in pace
“ A society grows great when old men plant trees
whose shade they know they shall never sit in. ” Greek proverb
Kid, you can move mountains. (98 and ¾ percent guaranteed)
He's not the messiah....
Thanks!
[email protected]
@freakboy3742 cecinestpasun.com djangoproject.com