I've been a bad BDFL.
As a co-creator and one of the two Benevolent Dictators for Life of Django, my responsibility is to guide the open-source project forward. I did a great job of this for several years: from our open-sourcing in July 2005 (and for about two years prior to that), I was rather obsessed with it, contributing thousands of commits, answering thousands of support questions, participating in hundreds of design discussions, co-writing two editions of a book, writing week in review blog posts and evangelizing the framework at events. Making Django's code and community better is how I spent a significant chunk of my free time.
It grew wonderfully and brought me some of the proudest moments of my life, such as Google's launch of App Engine (with Django support built in!), a full-blown conference devoted to the framework and the consistently mind-blowing experience of being handed a book about Django written in a language other than English: Japanese! Chinese! Italian! Not to mention hearing about all of the incredible applications people around the world are building with the framework.
But then, in July 2007, EveryBlock happened. Running a startup took over my life, and even though EveryBlock is itself a rather complicated Django application, meaning I use the framework daily in non-trivial ways, my contributions to the framework itself basically stopped. And though I'm just one of more than a dozen core contributors, it's fair to say the project has suffered because of my absence. The development process got slower and too bureaucratic, contributors got frustrated by our lack of decision-making, and changes were made to the framework that I would've prevented had I been more involved.
I've felt horribly guilty about this for the past several years, and every few months I'd say to myself, "OK, I'm going to get back into Django development. For real this time." I'd fix a few bugs, make some documentation tweaks or whatever, but then I'd inevitably get distracted by my day job again.
But today, everything changes for the better. I'm excited to share the great news that Adrian's Lost Weekend is over. I've gotten the OK to spend a full workday a week on Django!
This is made possible by the growth at EveryBlock. I recently hired my own boss, after running the show for four years, and we've expanded our development team significantly. We do have some specific needs at EveryBlock that I'll be addressing in Django -- making speed improvements and fixing various pain points -- but I've made it clear that not everything I do on Weekly Django Day will be directly applicable to EveryBlock. Django, and my involvement therein, has yielded great dividends for EveryBlock, and it's time to formally give back.
The one-day-a-week regimen is exactly the kind of structure that will help me get back in the groove. I plan to work on these priorities, to start:
- Release version 1.4.
- Move to Git/GitHub. I want us to move from Subversion to Git, hosted on GitHub. Obviously, this is a large project with many repercussions, not the least of which is how our bug tracker and development process will change. We'll likely end up with some sort of hybrid system with our existing Trac installation, given how much we have invested in it. I predict some pain during this process, but it'll be worth doing for a whole bunch of reasons.
- Reinstate "This Week in Django" blog posts. These were a great, concise way for Django users to stay updated with developments in the framework and community. I'm going to try to get these going again on the official Django blog.
- Implement easy Pjax support. I have some design ideas on how we can easily add intelligent Pjax support to any Django app, with minimal code changes. I'm really excited about this one in particular.
- Speed up template rendering. Armin has repeatedly talked about how much slower Django's template rendering is than Jinja's, and I want to cut out our inefficiencies to bridge the gap.
- Fix transaction management. Not sure yet whether this only affects PostgreSQL, but I'm tired of the "idle in transaction" problem.
- Fix the way
.exclude()works. This one, described here, is getting in the weeds a bit, but it's an important thing to fix.
Look for more discussion on these issues on the django-developers mailing list. (My blog's comment section below is not the place to talk this stuff over. :-) )
I'm officially starting the one-day-a-week thing next week. It's good to be back. Let's get to work.