Django Built to Last
I recently reread “Built to Last: Successful Habits of Visionary Companies” by Jim Collins and Jerry I. Porras. While I read it in the context of my day job, it was hard not to try to apply it elsewhere in my life. Heck, the authors specifically call this out.
What follows is my opinion for the future of the Django community as a whole. I certainly don’t speak for the thousands of people involved. My hope is that this will motivate others to contemplate and share. I’d love to see how everyone else perceives the community and what we should be doing.
If you end up crafting your own core values, purpose and BHAG (definition below), share it with me! I would love to know what you think.
“Built to Last” identifies a series of visionary companies that are “premier institutions - the crown jewels - in their industries”. A common trait of these companies is that they act in accordance with their core values, pursue a purpose and have Big Hairy Audacious Goals. Through these, the visionary companies “preserve the core and stimulate progress.”
According to the book, “core values are the organization’s essential and enduring tenets, not to be compromised for financial gain or short-term expediency.” However, I prefer the following more:
In a visionary company, the core values need no rational or external justification. Nor do they sway with the trends and fads of the day. Nor even do they shift in response to changing market conditions.
It defines purpose as “the organization’s fundamental reasons for existence beyond just making money - a perpetual guiding star on the horizon; not to be confused with specific goals or business strategies.”
The book describes a BHAG as “commitment to challenging, audacious - and often risky - goals and projects towards which a visionary company channels its efforts.”
Applying them to Django
These definitions are a bit difficult to apply to a non-profit. They are even more difficult to apply to an organization with an amorphous structure and varying goals throughout the community.
BUT. I do think there’s value in this exercise. After all, how can we grow successfully if we don’t know who we are and where we want to end up? Plus this will help us understand what about Django is important to us as individuals. Here is where Django’s organizational structure1 (I hesitate to say anarchistic, but only just) comes in handy. If you think that developer experience (DX) is what’s most important to our community, you’re encouraged to go do what you can to make it amazing. The community will cheer you on each step of the way and celebrate everything you learn. At the end, we’re all better off from your efforts.
The difficulty with our organizational structure is that it’s hard to both identify our core ideology (values + purpose) and act consistently throughout the community. This is due to the same reason why you can venture off on your own to improve Django, there’s nobody to tell you how to do it2.
As Tim Allen said out in his 2022 talk, “it’s a miracle anything works at all.”
Django is amazing and it’s entirely due to the hard work and contributions people and organizations over the past 20-ish years. The more involved I get with the community the more unsung contributors I find.
It’s inspiring, impressive and a bit scary. Why do we all do this? To what end are we investing hours of our freetime? How many contributors do we need to sustain our future? I don’t have these answers.
What I do know is that more communication within the community would be beneficial. So let me start.
Django’s Core Ideology
Note: These are all “I think” statements that I’m writing in a definitive style.
There are two core values for Django community:
Our core purpose is to make creating web apps a better experience.
Our big, hairy, audacious goal is to be the most used web framework.
That goal probably caused a few people to drop off. Given my readership peaks in the single digits it’s time to shout out the returning reader, “hi mom!”
Community is a core value because Django is still around due to the community’s efforts rather than solely the creators of the framework. Yes, there is a significant amount of work done by a small group of people, but that doesn’t cover everything. In particular the DSF Board is extremely important. They provide the space, funding and logistics for the larger tasks. Interestingly enough Chaim Kirby was on Django Chat yesterday talking about both the DSF Board and the Django community. I highly recommend listening to it. That episode highlights a number of opportunities for contribution and points out some of the difficulties we face.
At the other end of the spectrum we have our support channels. The new Django developers asking and answering questions in our support channels contribute greatly to the community’s tone. Anyone can hop in and make a difference. Being empathetic and caring when someone is struggling can change a person’s day. Those moments are carved into a person’s memory. Eventually those experiences convince a person to pay it forward.
And it doesn’t have to be programming related. It can be any type of effort to advance Django. Jason Judkins and Metta Rolando come to mind. I believe they’re both relatively new to Django (<= 2 years), and both are on the organizing team for DjangoCon US 2023. I don’t know either of their stories well, but I’m excited to be working with them.
Ultimately community is what makes Django great and what will make it last. People who care want to work with other people who care. As long as we can nurture and grow our sense of community, more folks will join.
Reliability is a core value for Django because we’re still a technically oriented organization. As our numbers grow we need to be consistent. This is largely in place with the release schedule for the core library, the DSF, the steering council and the Django Enhancement Proposals (DEP). I should clarify, it’s largely handled today. Again, check out the Django Chat episode with Chaim.
I don’t know what tomorrow holds nor am I closely in tune with the previously mentioned groups. Regardless, the concept of reliability extends beyond those groups. It goes to being a technology that people know what their going to get. It means having redundancies in staffing core infrastructure. It means having a consistently enforced code of conduct policy across the community. It means highlighting new contributors and acknowledging the work of everyone involved. Reliability certainly means having stable software, but it goes well beyond it.
Make creating web applications a better experience.
As per “Built to Last”, our core purpose should be something unattainable. It’s something to be pursued into the warm embrace of the heat death of the universe. I will concede the concept of a web application makes this purpose a little shaky. We may need a slight pivot at some point, but if future Djangonauts are looking to this blog post for direction in a web-less future, something has gone horribly wrong.
What I am particularly proud of with this statement is the double meaning. “A better experience” means both more enjoyable to work with technically as a developer, but also more enjoyable to do as a person. Software for a period of time was seen as something white men did. There’s still a lot of this, but we are improving. Unfortunately, it facilitated a specific culture that excluded other groups. I like to think that Django is doing a good job of excluding that mentality, but it’s not gone entirely.
My point here is that there’s a heck of a lot more to Django than the code and documentation. It’s also the people that make Django what it is. So while we continuously strive to make our software better, let’s also make the experience of being a Djangonaut better.
Big hairy audacious goal
Finally we have our audacious goal, to be the most used framework. From some cursory searches, we’re sitting about number 7 to 10 depending on which survey used. That’s pretty good, but let’s aim for the top! I get it. This is a really ambitious goal, perhaps too much so. A large swath of the web uses WordPress and another significant chunk uses React. Surpassing both of those would require a paradigm shift. One that’s been discussed for a while.
Django would need a simpler deployment story.
cue mild groaning
But you didn’t even let me say the controversial part! We’d need to solve our Python packaging problem.
Both of these are barriers to entry for developers. I literally saw a quote on the Django Discord server recently that said: “never realized hosting a django app would be more frustrating then makin da app 😭” This is what drives people to other languages and frameworks. It’s what helps fuel impostor syndrome for new developers. And more simply, it’s what prevents people from building the crap that’s interesting and fun.
I don’t know what the solution is. There isn’t a magic elixir. It’s likely going to be solved by a series of advances in a variety of areas which all coalesce into a Django-megazord-like3 offering.
What I do know is that sharing our goals as a collective gives shape to the problems and opportunities we face. That identification creates a space for others to contribute. Sometimes all a person needs is to see a problem and be encouraged to solve it.