Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
So you want to write a framework? Accidental le...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Russell Keith-Magee
February 22, 2014
Programming
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
Transcript
53 slides
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
More Decks by Russell Keith-Magee
See All by Russell Keith-Magee
Python All The Things!
freakboy3742
2
430
Snakes in a browser
freakboy3742
1
160
Making a splash with your open source project
freakboy3742
0
420
Things your parents didn't teach you about sharing your toys
freakboy3742
0
420
A tale of two cellphones: Python on Android and iOS
freakboy3742
0
300
Beyond Web 2.0 - Django and Python in the modern web ecosystem
freakboy3742
0
300
Python on the move: The state of Mobile Python
freakboy3742
0
370
I am a doctor...
freakboy3742
0
190
Professional Yak Coiffure
freakboy3742
0
130
Other Decks in Programming
See All in Programming
オーケストレーション記述言語 Katari
yukikurage
0
260
エラーチャンネルのボールを拾い続けて鍛えるエンジニアの地力 / phpcon-niigata2026
meihei3
1
140
AI-Powered Domain-Driven Design
ziobrando
0
450
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
210
コード生成時代のAPI定義を支えるRequest Spec移行
pvcresin
0
130
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.2k
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
250
Getting Started with Vibe Coding
miccheng
0
220
どうしても Eloquent でリポジトリパターンをやりたいんだ #phpcon_niigata / phpcon-niigata-2026
shogogg
0
250
Engineering Biometric UX Across Android Versions | DroidKnights 2026
ryunen344
1
210
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.3k
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
980
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
143
7.9k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
The Curse of the Amulet
leimatthew05
4
17k
エンジニアに許された特別な時間の終わり
watany
109
250k
Utilizing Notion as your number one productivity tool
mfonobong
4
640
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Designing Experiences People Love
moore
143
24k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k