Writeup of the DjangoCon Europe 2019 talk »Feeding the Pony: Contributing back to Django & How to make that work for you« by Carlton Gibson
Carlton Gibson: Husband and father of 4. He is a Django Fellow (one of the two), a maintainer Django REST Framework, Django-Filter, Crispy Forms and more. When he's not doing that, I like cooking and hats 🌮.
Django Fellows perform the day-to-day work on Django: triaging tickets, reviewing patches, merging, releasing, taking care of the pipelines leading up to this, dealing with security issues. This is supposed to free up contributors to take care of the exciting and fun things.
The meat grinder
Contributing to Django teaches you about software, about development, about best practices, but it's not trivial at all:
The contributors (or more precisely, the core team) was called "the meat grinder", due to the expectation of burning up people in there in many ways.
One of the problems is that Django is not well-funded: most companies using Django do not choose to financially support the framework(s) they rely on. Part of that is the expectation that you will not, or even must not, support open source software. Part is that there is always a huge outcry when open source tools try to get any funding for their work (see: redis). All things considered, Django and the DSF is not in the worst place, but this attitude is deeply toxic.
Contributors, particularly the core team, is often expected to just be around all the time, no matter the cost, no matter the personal cost. This also contributes to fatigue and burn-out.
Current contributions in Django
Open source development is a matter of personal privilege and resources – think of it as the unpaid internship of the software world.
Contributions to Django are mostly a very small circle of people doing the huge bulk of the work, and then people with very little commits. This is a problem: there's a huge and very constant number of open tickets.
Also, contributors are not very diverse and representative of the community we see here.
Also, there is Django Core, which looks like a big and stable group, but is really pretty inactive, and consists mostly of old guys who heavily contributed in the past, but are inactive now. This group is scheduled to be dissolved this year, and will be replaced by active members of the DSF.
Improving contributions to Django
Contributing to Django improves your code, improves your code's maintainability and your attractiveness as a company when hiring. Make time for this, it's possible – take a day a week. Or a day every two weeks. Even a day a month will help.
Doing this on work time is good, but doing on private time is possible, too – but of course it requires sacrifices. You get to choose what you're bad at, because you can't be good at everything. And choosing to put some time into GitHub instead of Netflix or Fortnite would help you and the community tremendously.
And once you've decided to put time into open source – immediately limit it. Do not allow this choice to take over more time than you have. Self-care is important. You'll do more good in the long run if you don't burn out on open source contributions.
Don't spread yourself too thin: Less packages are better. Working deeply on few packages is better than shallow work on tens of packages. Work on one thing at a time, even. Focus.
Keep a log.
Even if it's only half an hour a week, your time adds up. It's about being prolific, and not this week, but over a year, or five. But if you want or need to present your work at some opportunity, or answer questions during an application process, you can show and prove your work.
You can also use it as a reference – if you contribute, you can just approach maintainers and ask them for a reference!
And this also helps you keep in mind what you learned, to help you from forgetting those lessons a month later. Future you will be thankful.
How to contribute: practical advice
- Join django-developers – you don't have to read everything, but scan over it once a week and look for interesting topics.
- Join the core mentorship list – this is too little advertised. But people are reading that list and are waiting for people to ask for help and are happy to provide it.
- Get set up with the code – clone, start environment, install, run tests. It's not that hard – and people are waiting to help you! There's a virtual machine, too, and a dockerfile, and everything.
- Find a ticket – this is hard. There are 1300 tickets, and only 13 are marked as easy pickings. Please be sure: Most of these issues are not harder than problems you solve in every-day work. Then why haven't they been solved, you asked? Because only half a dozen people regularly contribute to Django, and there are 1300 open tickets. But you can narrow it down by component (most are in the ORM, followed by the admin and the docs, so maybe your are of interest doesn't even have that many tickets). You can also work on improving existing abandoned patches. Look at open PRs.
- Work on the docs – there are a lot of open documentation issues, and open issues marked as "patch needs documentation". You'll learn a lot about Django itself, making follow-up contributions easier, and helping many others, too.
- Find issues yourself – does Django behave in annoying ways in your project? Fix them!
- Contribute to third-party packages – if you use a third-party package, help making it better, fixing bugs, improving Django version compatibility! It's easier, most of the time, because it's a smaller code base.
- Triage tickets – assign correct states to tickets. Have a look at open PRs. Add your opinion. It helps.
- Submit PRs – you'll get a lot of feedback (in time). Please be patient and work with the reviewers. This will happen over and over. It can feel hard, but don't take it personally – it's not meant to put you off, it's just a way to keep Django code up to our standard. You can do this, you are qualified. If in doubt, mention Carlton if you need help.
- Come to the sprints – you'll get help in all of the steps above. Highly recommended if you have the opportunity.
Let's use this opportunity to craft the opportunity of Django.