Upgrade to Pro — share decks privately, control downloads, hide ads and more …

So you want to write a framework? Accidental lessons from a successful project

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


  1. So you want to write a framework? Accidental lessons from

    a successful project Dr Russell Keith-Magee PyCon PH 2014
  2. None
  3. None
  4. None
  5. I've got fingerprints elsewhere.

  6. This isn't about Python.

  7. This isn't about web frameworks.

  8. Best of Breed vs Batteries Included

  9. "Batteries Included" Frameworks "Everything comes in the box" One package

    to download/install Minimal dependencies No decisions to make Documentation on the parts
  10. "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
  11. None
  12. Hybrids are possible.

  13. Why pick one over the other?

  14. History matters.

  15. It's hard to be best of breed when the breed

    doesn't exist yet.
  16. Ian Bicking and SQLObject http://bit.ly/bicking-goodbye

  17. Picking "best of breed" early can be detrimental.

  18. History matters.

  19. Backwards compatibility

  20. Time is relative.

  21. “ 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)
  22. Backwards compatibility has a price.

  23. Batteries Included can still be backwards incompatible.

  24. Best of breed encourages you to pick and choose.

  25. Is a choice of batteries really what is required?

  26. "Batteries included" doesn't mean "Can't use other batteries".

  27. Messaging matters.

  28. Timing matters.

  29. The 90% framework.

  30. Out of the box experience matters.

  31. http://goo.gl/Epzms

  32. None
  33. Implicit documentation

  34. 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()
  35. Tools vs ecosystems

  36. Jacob's Tractor

  37. Tools vs ecosystems

  38. Metcalfe's Law: The utility of a network increases with the

    square of it's participants.
  39. Ecosystems

  40. Microframeworks

  41. Remember to share with the other children.

  42. Sending the wrong signals.

  43. Packaging systems matter.

  44. Community matters.

  45. Outreach is important.

  46. Absent friends

  47. http://bit.ly/malcolm-monkey-hat

  48. http://bit.ly/malcolm-plays-spassky

  49. Requiem in pace

  50. “ A society grows great when old men plant trees

    whose shade they know they shall never sit in. ” Greek proverb
  51. Kid, you can move mountains. (98 and ¾ percent guaranteed)

  52. He's not the messiah....

  53. Thanks! russell@keith-magee.com @freakboy3742 cecinestpasun.com djangoproject.com