Django's issue tracker
Django's issue tracker is hosted at code.djangoproject.com. This contains the entire history of ticket's opened for Django. At time of writing this is some 18 years ago! This is a valuable resource when working on Django as you are able to research previous decisions.
From the summary page clicking "View Tickets" will show a listing of Django's tickets which are not closed. As of November 2023 Django currently has 996 open tickets. This is alot! Luckily, Trac (the software which Django's issue tracker uses) has a number of filtering options to help this down.
Filter to accepted tickets
Django's triaging process means that not all open tickets are currently accepted. Some may be marked to be reviewed in the future, for example a ticket may be proposed to use a feature in a new release of Python. However, this will only be possible to achieve in the future once that feature is in all versions of Python which Django currently supports.
To do this click on the filter category box and select triage stage:
This option will then appear in the filter box. Then select "Accepted" from the choice of options. You'll need to click the "Update" button to apply this filter selection.
Filter by component
This'll bring the number of tickets down to ~930 tickets. Better, but we're not there yet.
The next filter I reach for is component. This is used to categorise tickets into which area of Django they relate to. Here's a chart which shows the number of tickets by component.
This chart shows around 40% of tickets are for Django's ORM or Admin. Choosing any other component than these means the tickets will be reduced to a more manageable number. At this point I suggest reviewing the list of components and trying to find one that you're interested in.
Ticket Investigation
Say you chose the "Template System" as the component. This reduces the number of tickets down to just 24. This is a more manageable number to have a more detailed review of. At this point I would suggest starting to look through tickets. In particular:
- Ignore tickets which are actively being worked on. I'd judge actively as meaning anything in the last ~3 months.
- Review the tickets for descriptions of things I have any knowledge on.
- Bear in mind that tickets with higher numbers are more recent. It's likely that ticket #34981 (Opened Nov 2023), is likely easier to solve than #373 (Opened 18 Years ago).
Standing on the shoulders of giants
At this point you'll start to get a feeling of the types of tickets there are to be tackled. Clicking on the description will take you to the ticket page giving a summary of the issue and the previous discussion that's taken place.
My tip here is to look for tickets that have entries against "Pull Requests". There are many tickets which have had previous Pull Requests opened and reviewed. Some of these may just need updating for review comments, additional documentation or adding additional test coverage.
Finding something where previous work has been conducted can ease your contribution as you can build upon previous work. The task may be less daunting than a ticket where it may be slightly unclear what the required bug or fix is.
Assign a ticket to yourself
At this point you are very knowledgeable about a certain ticket or category of tickets. Once you have selected a ticket, do assign it to yourself. To do this you'll need to register / log in and complete the "Action" form at the bottom of the page.
Next Steps
I'd start with referring to Django's contribution guide in the documentation. In addition Django's forum and Discord (see invite link on the community page) are channels where there are folk who will be willing to help you.
How to ask for help
Something that took me a long time to learn is that other folk won't know the answer, or even be familiar with an issue. You will be the expert. What is helpful is if you can summarise the issue and your thoughts on what is required. Specific questions are more likely to get a response than general ones. General questions about tickets are tricky to answer as it's highly likely no one yet knows the answer, otherwise it would have been fixed all ready!
Good luck in your contribution to Django 💚