I was thinking recently about how I look at Django and my place in it, and I found a certain analogy to be very apt: it’s a lot like a kitchen. Bear with me here.
Most people don’t go to the kitchen just to stand there. They have a purpose: to make a meal. The kitchen doesn’t provide the meal, it just provides most of the things you need in order to make the meal. There’s a set of appliances — stove, oven, refridgerator, microwave, etc. &emdsash; and and a pantry full of common ingredients — salt, sugar, flour, etc. — to get you started with most recipes, but it’s up to you to plan the meal and bring the flavors you want in the dish.
Tying it to Django, the appliances are the core features — models, database abstraction, forms, etc. — while the common ingredients are the bundled contrib apps — auth, syndication, admin, etc. — with the rest of the ingredients being your own apps that you add to the mix.
What fascinates me, though, is the plain white door in the corner of the kitchen. It blends in with the wall, drawing little attention to those who don’t look for it. But behind it lies a machine shop, where the ambitious can go and build new appliances. I don’t settle for just bringing flavor to the party, I want to make it easy to do complex things with those flavors.
I’ll probably use this analogy a lot in the future. It fits, and can be extended to accommodate a lot of stuff.