{"title":"Advice for new contributors","version":"dev","locale":"en","docname":"internals/contributing/new-contributors","url":"/en/dev/internals/contributing/new-contributors/","canonical":"https://djangodocs.dev/en/dev/internals/contributing/new-contributors/","summary":"New contributor and not sure what to do? Want to help but just don’t know how to get started? This is the section for you. Get up and running! If you are new to…","html":"<h1>Advice for new contributors<a class=\"heading-anchor\" href=\"#advice-for-new-contributors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>New contributor and not sure what to do? Want to help but just don’t know how\nto get started? This is the section for you.</p>\n<aside class=\"admonition-get-up-and-running admonition\">\n<p class=\"admonition-title\">Get up and running!</p>\n<p>If you are new to contributing to Django, the <a class=\"reference internal\" href=\"/en/dev/intro/contributing/\"><span class=\"doc\">Writing your first contribution for Django</span></a>\ntutorial will give you an introduction to the tools and the workflow.</p>\n</aside>\n<p>This page contains more general advice on ways you can contribute to Django,\nand how to approach that.</p>\n<p>If you are looking for a reference on the details of making code contributions,\nsee the <a class=\"reference internal\" href=\"/en/dev/internals/contributing/writing-code/\"><span class=\"doc\">Contributing code</span></a> documentation.</p>\n<section id=\"first-steps\">\n<h2>First steps<a class=\"heading-anchor\" href=\"#first-steps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Start with these steps to discover Django’s development process.</p>\n<section id=\"triage-tickets\">\n<h3>Triage tickets<a class=\"heading-anchor\" href=\"#triage-tickets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If an <a class=\"reference external\" href=\"https://code.djangoproject.com/query?status=!closed&amp;stage=Unreviewed\">unreviewed ticket</a> reports a bug, try and reproduce it. If you can\nreproduce it and it seems valid, make a note that you confirmed the bug and\naccept the ticket. Make sure the ticket is filed under the correct component\narea. Consider writing a patch that adds a test for the bug’s behavior, even if\nyou don’t fix the bug itself. See more at <a class=\"reference internal\" href=\"/en/dev/internals/contributing/triaging-tickets/#how-can-i-help-with-triaging\"><span class=\"std std-ref\">How can I help with development?</span></a>.</p>\n</section>\n<section id=\"review-patches-of-accepted-tickets\">\n<h3>Review patches of accepted tickets<a class=\"heading-anchor\" href=\"#review-patches-of-accepted-tickets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>This will help you build familiarity with the codebase and processes. Mark the\nappropriate flags if a patch needs docs or tests. Look through the changes a\npatch makes, and keep an eye out for syntax that is incompatible with older but\nstill supported versions of Python. <a class=\"reference internal\" href=\"/en/dev/internals/contributing/writing-code/unit-tests/\"><span class=\"doc\">Run the tests</span></a> and make sure they pass.\nWhere possible and relevant, try them out on a database other than SQLite.\nLeave comments and feedback!</p>\n</section>\n<section id=\"keep-old-patches-up-to-date\">\n<h3>Keep old patches up-to-date<a class=\"heading-anchor\" href=\"#keep-old-patches-up-to-date\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Oftentimes the codebase will change between a patch being submitted and the\ntime it gets reviewed. Make sure it still applies cleanly and functions as\nexpected. Updating a patch is both useful and important! See more on\n<a class=\"reference internal\" href=\"/en/dev/internals/contributing/writing-code/submitting-patches/#patch-review-checklist\"><span class=\"std std-ref\">Contribution checklist</span></a>.</p>\n</section>\n<section id=\"write-some-documentation\">\n<h3>Write some documentation<a class=\"heading-anchor\" href=\"#write-some-documentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django’s documentation is great but it can always be improved. Did you find a\ntypo? Do you think that something should be clarified? Go ahead and suggest a\ndocumentation patch! See also the guide on\n<a class=\"reference internal\" href=\"/en/dev/internals/contributing/writing-documentation/\"><span class=\"doc\">Writing documentation</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>The <a class=\"reference external\" href=\"https://code.djangoproject.com/wiki/Reports\">reports page</a> contains links to many useful Trac queries, including\nseveral that are useful for triaging tickets and reviewing patches as\nsuggested above.</p>\n</aside>\n</section>\n<section id=\"sign-the-contributor-license-agreement\">\n<h3>Sign the Contributor License Agreement<a class=\"heading-anchor\" href=\"#sign-the-contributor-license-agreement\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The code that you write belongs to you or your employer. If your contribution\nis more than one or two lines of code, you have the option to sign the <a class=\"reference external\" href=\"https://www.djangoproject.com/foundation/cla/\">CLA</a>.\nSee the <a class=\"reference external\" href=\"https://www.djangoproject.com/foundation/cla/faq/\">Contributor License Agreement FAQ</a> for a more thorough explanation.</p>\n</section>\n</section>\n<section id=\"guidelines\">\n<h2>Guidelines<a class=\"heading-anchor\" href=\"#guidelines\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>As a newcomer on a large project, it’s easy to experience frustration. Here’s\nsome advice to make your work on Django more useful and rewarding.</p>\n<section id=\"pick-a-subject-area\">\n<h3>Pick a subject area<a class=\"heading-anchor\" href=\"#pick-a-subject-area\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>This should be something that you care about, that you are familiar with or\nthat you want to learn about. You don’t already have to be an expert on the\narea you want to work on; you become an expert through your ongoing\ncontributions to the code.</p>\n</section>\n<section id=\"analyze-tickets-context-and-history\">\n<h3>Analyze tickets’ context and history<a class=\"heading-anchor\" href=\"#analyze-tickets-context-and-history\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Trac isn’t an absolute; the context is just as important as the words. When\nreading Trac, you need to take into account who says things, and when they were\nsaid. Support for an idea two years ago doesn’t necessarily mean that the idea\nwill still have support. You also need to pay attention to who <em>hasn’t</em> spoken\n– for example, if an experienced contributor hasn’t been recently involved in\na discussion, then a ticket may not have the support required to get into\nDjango.</p>\n</section>\n<section id=\"start-small\">\n<h3>Start small<a class=\"heading-anchor\" href=\"#start-small\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>It’s easier to get feedback on a little issue than on a big one. See the\n<a class=\"reference external\" href=\"https://code.djangoproject.com/query?status=!closed&amp;easy=1\">easy pickings</a>.</p>\n</section>\n<section id=\"confirm-support-before-engaging-in-a-big-task\">\n<h3>Confirm support before engaging in a big task<a class=\"heading-anchor\" href=\"#confirm-support-before-engaging-in-a-big-task\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>This means getting someone else to confirm that a bug is real before you fix\nthe issue, and ensuring that there’s consensus on a proposed feature before you\ngo implementing it.</p>\n</section>\n<section id=\"be-bold-leave-feedback\">\n<h3>Be bold! Leave feedback!<a class=\"heading-anchor\" href=\"#be-bold-leave-feedback\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sometimes it can be scary to put your opinion out to the world and say “this\nticket is correct” or “this patch needs work”, but it’s the only way the\nproject moves forward. The contributions of the broad Django community\nultimately have a much greater impact than that of any one person. We can’t do\nit without <strong>you</strong>!</p>\n</section>\n<section id=\"be-cautious-when-marking-things-ready-for-check-in\">\n<h3>Be cautious when marking things “Ready For Check-in”<a class=\"heading-anchor\" href=\"#be-cautious-when-marking-things-ready-for-check-in\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you’re really not certain if a ticket is ready, don’t mark it as such. Leave\na comment instead, letting others know your thoughts. If you’re mostly certain,\nbut not completely certain, you might also try asking on the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">#contributing-getting-started</span></code> channel in the <a class=\"reference external\" href=\"https://chat.djangoproject.com\">Django Discord server</a> to\nsee if someone else can confirm your suspicions.</p>\n</section>\n<section id=\"wait-for-feedback-and-respond-to-feedback-that-you-receive\">\n<h3>Wait for feedback, and respond to feedback that you receive<a class=\"heading-anchor\" href=\"#wait-for-feedback-and-respond-to-feedback-that-you-receive\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Focus on one or two tickets, see them through from start to finish, and repeat.\nThe shotgun approach of taking on lots of tickets and letting some fall by the\nwayside ends up doing more harm than good.</p>\n</section>\n<section id=\"be-rigorous\">\n<h3>Be rigorous<a class=\"heading-anchor\" href=\"#be-rigorous\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When we say “<span class=\"target\" id=\"index-0\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a>, and must have docs and tests”, we mean it. If a patch\ndoesn’t have docs and tests, there had better be a good reason. Arguments like\n“I couldn’t find any existing tests of this feature” don’t carry much weight.\nWhile it may be true, that means you have the extra-important job of writing\nthe very first tests for that feature, not that you get a pass from writing\ntests altogether.</p>\n</section>\n<section id=\"be-patient\">\n<h3>Be patient<a class=\"heading-anchor\" href=\"#be-patient\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>It’s not always easy for your ticket or your patch to be reviewed quickly. This\nisn’t personal. There are a lot of tickets and pull requests to get through.</p>\n<p>Keeping your patch up to date is important. Review the ticket on Trac to ensure\nthat the <em>Needs tests</em>, <em>Needs documentation</em>, and <em>Patch needs improvement</em>\nflags are unchecked once you’ve addressed all review comments.</p>\n<p>Remember that Django has an eight-month release cycle, so there’s plenty of\ntime for your patch to be reviewed.</p>\n<p>Finally, a well-timed reminder can help. See <a class=\"reference internal\" href=\"/en/dev/faq/contributing/#new-contributors-faq\"><span class=\"std std-ref\">contributing code FAQ</span></a> for ideas here.</p>\n</section>\n</section>","rootId":"advice-for-new-contributors","toc":[{"title":"First steps","anchor":"first-steps","children":[{"title":"Triage tickets","anchor":"triage-tickets","children":[]},{"title":"Review patches of accepted tickets","anchor":"review-patches-of-accepted-tickets","children":[]},{"title":"Keep old patches up-to-date","anchor":"keep-old-patches-up-to-date","children":[]},{"title":"Write some documentation","anchor":"write-some-documentation","children":[]},{"title":"Sign the Contributor License Agreement","anchor":"sign-the-contributor-license-agreement","children":[]}]},{"title":"Guidelines","anchor":"guidelines","children":[{"title":"Pick a subject area","anchor":"pick-a-subject-area","children":[]},{"title":"Analyze tickets’ context and history","anchor":"analyze-tickets-context-and-history","children":[]},{"title":"Start small","anchor":"start-small","children":[]},{"title":"Confirm support before engaging in a big task","anchor":"confirm-support-before-engaging-in-a-big-task","children":[]},{"title":"Be bold! Leave feedback!","anchor":"be-bold-leave-feedback","children":[]},{"title":"Be cautious when marking things “Ready For Check-in”","anchor":"be-cautious-when-marking-things-ready-for-check-in","children":[]},{"title":"Wait for feedback, and respond to feedback that you receive","anchor":"wait-for-feedback-and-respond-to-feedback-that-you-receive","children":[]},{"title":"Be rigorous","anchor":"be-rigorous","children":[]},{"title":"Be patient","anchor":"be-patient","children":[]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Django internals","url":"/en/dev/internals/"},{"docname":"internals/contributing/index","title":"Contributing to Django","url":"/en/dev/internals/contributing/"}],"prev":{"docname":"internals/contributing/index","title":"Contributing to Django","url":"/en/dev/internals/contributing/"},"next":{"docname":"internals/contributing/sprint-quickstart","title":"Sprint quickstart guide","url":"/en/dev/internals/contributing/sprint-quickstart/"},"formats":{"html":"/en/dev/internals/contributing/new-contributors/","markdown":"/en/dev/internals/contributing/new-contributors.md","json":"/en/dev/internals/contributing/new-contributors.json"},"source":"https://github.com/django/django/blob/main/docs/internals/contributing/new-contributors.txt","official":"https://docs.djangoproject.com/en/dev/internals/contributing/new-contributors/","inVersions":["dev","6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9","1.8"],"inLocales":["en"]}