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 le...
Search
Russell Keith-Magee
February 22, 2014
Programming
0
110
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
390
Snakes in a browser
freakboy3742
1
130
Making a splash with your open source project
freakboy3742
0
370
Things your parents didn't teach you about sharing your toys
freakboy3742
0
370
A tale of two cellphones: Python on Android and iOS
freakboy3742
0
240
Beyond Web 2.0 - Django and Python in the modern web ecosystem
freakboy3742
0
260
Python on the move: The state of Mobile Python
freakboy3742
0
300
I am a doctor...
freakboy3742
0
150
Professional Yak Coiffure
freakboy3742
0
91
Other Decks in Programming
See All in Programming
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
550
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
780
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
220
Gleamという選択肢
comamoca
6
740
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
300
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
760
Cline指示通りに動かない? AI小説エージェントで学ぶ指示書の書き方と自動アップデートの仕組み
kamomeashizawa
1
560
TypeScript LSP の今までとこれから
quramy
1
510
Using AI Tools Around Software Development
inouehi
0
1.2k
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
250
社内での開発コミュニティ活動とモジュラーモノリス標準化事例のご紹介/xPalette and Introduction of Modular monolith standardization
m4maruyama
1
130
複数アプリケーションを育てていくための共通化戦略
irof
10
4k
Featured
See All Featured
Visualization
eitanlees
146
16k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Balancing Empowerment & Direction
lara
1
340
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.8k
Documentation Writing (for coders)
carmenintech
71
4.9k
4 Signs Your Business is Dying
shpigford
184
22k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
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