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
130
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
410
Snakes in a browser
freakboy3742
1
130
Making a splash with your open source project
freakboy3742
0
390
Things your parents didn't teach you about sharing your toys
freakboy3742
0
390
A tale of two cellphones: Python on Android and iOS
freakboy3742
0
250
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
330
I am a doctor...
freakboy3742
0
160
Professional Yak Coiffure
freakboy3742
0
100
Other Decks in Programming
See All in Programming
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
250
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.5k
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
190
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
550
rack-attack gemによるリクエスト制限の失敗と学び
pndcat
0
230
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
120
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
490
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
0
240
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
3
3.4k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2.3k
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
170
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
150
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
54
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
48k
Believing is Seeing
oripsolob
1
33
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
150
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
100k
Mind Mapping
helmedeiros
PRO
0
53
Color Theory Basics | Prateek | Gurzu
gurzu
0
180
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Designing Experiences People Love
moore
143
24k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.8k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
750
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