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
400
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
380
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
270
Python on the move: The state of Mobile Python
freakboy3742
0
310
I am a doctor...
freakboy3742
0
150
Professional Yak Coiffure
freakboy3742
0
91
Other Decks in Programming
See All in Programming
Serena MCPのすすめ
wadakatu
4
900
NetworkXとGNNで学ぶグラフデータ分析入門〜複雑な関係性を解き明かすPythonの力〜
mhrtech
3
1k
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
a_okui
0
190
フロントエンド開発に役立つクライアントプログラム共通のノウハウ / Universal client-side programming best practices for frontend development
nrslib
7
3.9k
私はどうやって技術力を上げたのか
yusukebe
43
17k
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
410
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
490
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
240
XP, Testing and ninja testing ZOZ5
m_seki
3
320
クラシルを支える技術と組織
rakutek
0
190
なぜGoのジェネリクスはこの形なのか? Featherweight Goが明かす設計の核心
ryotaros
7
1k
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
230
Featured
See All Featured
A designer walks into a library…
pauljervisheath
209
24k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
960
Automating Front-end Workflow
addyosmani
1371
200k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Mobile First: as difficult as doing things right
swwweet
224
10k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
The Invisible Side of Design
smashingmag
301
51k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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