1. ===========================
    
  2. Advice for new contributors
    
  3. ===========================
    
  4. 
    
  5. New contributor and not sure what to do? Want to help but just don't know how
    
  6. to get started? This is the section for you.
    
  7. 
    
  8. .. admonition:: Get up and running!
    
  9. 
    
  10.     If you are new to contributing to Django, the :doc:`/intro/contributing`
    
  11.     tutorial will give you an introduction to the tools and the workflow.
    
  12. 
    
  13. This page contains more general advice on ways you can contribute to Django,
    
  14. and how to approach that.
    
  15. 
    
  16. If you are looking for a reference on the details of making code contributions,
    
  17. see the :doc:`/internals/contributing/writing-code/index` documentation.
    
  18. 
    
  19. First steps
    
  20. ===========
    
  21. 
    
  22. Start with these steps to discover Django's development process.
    
  23. 
    
  24. * **Triage tickets**
    
  25. 
    
  26.   If an `unreviewed ticket`_ reports a bug, try and reproduce it. If you
    
  27.   can reproduce it and it seems valid, make a note that you confirmed the bug
    
  28.   and accept the ticket. Make sure the ticket is filed under the correct
    
  29.   component area. Consider writing a patch that adds a test for the bug's
    
  30.   behavior, even if you don't fix the bug itself. See more at
    
  31.   :ref:`how-can-i-help-with-triaging`
    
  32. 
    
  33. * **Look for tickets that are accepted and review patches to build familiarity
    
  34.   with the codebase and the process**
    
  35. 
    
  36.   Mark the appropriate flags if a patch needs docs or tests. Look through the
    
  37.   changes a patch makes, and keep an eye out for syntax that is incompatible
    
  38.   with older but still supported versions of Python. :doc:`Run the tests
    
  39.   </internals/contributing/writing-code/unit-tests>` and make sure they pass.
    
  40.   Where possible and relevant, try them out on a database other than SQLite.
    
  41.   Leave comments and feedback!
    
  42. 
    
  43. * **Keep old patches up to date**
    
  44. 
    
  45.   Oftentimes the codebase will change between a patch being submitted and the
    
  46.   time it gets reviewed. Make sure it still applies cleanly and functions as
    
  47.   expected. Updating a patch is both useful and important! See more on
    
  48.   :doc:`writing-code/submitting-patches`.
    
  49. 
    
  50. * **Write some documentation**
    
  51. 
    
  52.   Django's documentation is great but it can always be improved. Did you find
    
  53.   a typo? Do you think that something should be clarified? Go ahead and
    
  54.   suggest a documentation patch! See also the guide on
    
  55.   :doc:`writing-documentation`.
    
  56. 
    
  57.   .. note::
    
  58. 
    
  59.       The `reports page`_ contains links to many useful Trac queries, including
    
  60.       several that are useful for triaging tickets and reviewing patches as
    
  61.       suggested above.
    
  62. 
    
  63.       .. _reports page: https://code.djangoproject.com/wiki/Reports
    
  64. 
    
  65. * **Sign the Contributor License Agreement**
    
  66. 
    
  67.   The code that you write belongs to you or your employer. If your
    
  68.   contribution is more than one or two lines of code, you need to sign the
    
  69.   `CLA`_. See the `Contributor License Agreement FAQ`_ for a more thorough
    
  70.   explanation.
    
  71. 
    
  72. .. _CLA: https://www.djangoproject.com/foundation/cla/
    
  73. .. _Contributor License Agreement FAQ: https://www.djangoproject.com/foundation/cla/faq/
    
  74. .. _unreviewed ticket: https://code.djangoproject.com/query?status=!closed&stage=Unreviewed
    
  75. 
    
  76. 
    
  77. Guidelines
    
  78. ==========
    
  79. 
    
  80. As a newcomer on a large project, it's easy to experience frustration. Here's
    
  81. some advice to make your work on Django more useful and rewarding.
    
  82. 
    
  83. * **Pick a subject area that you care about, that you are familiar with, or
    
  84.   that you want to learn about**
    
  85. 
    
  86.   You don't already have to be an expert on the area you want to work on; you
    
  87.   become an expert through your ongoing contributions to the code.
    
  88. 
    
  89. * **Analyze tickets' context and history**
    
  90. 
    
  91.   Trac isn't an absolute; the context is just as important as the words.
    
  92.   When reading Trac, you need to take into account who says things, and when
    
  93.   they were said. Support for an idea two years ago doesn't necessarily mean
    
  94.   that the idea will still have support. You also need to pay attention to who
    
  95.   *hasn't* spoken -- for example, if an experienced contributor hasn't been
    
  96.   recently involved in a discussion, then a ticket may not have the support
    
  97.   required to get into Django.
    
  98. 
    
  99. * **Start small**
    
  100. 
    
  101.   It's easier to get feedback on a little issue than on a big one. See the
    
  102.   `easy pickings`_.
    
  103. 
    
  104. * **If you're going to engage in a big task, make sure that your idea has
    
  105.   support first**
    
  106. 
    
  107.   This means getting someone else to confirm that a bug is real before you fix
    
  108.   the issue, and ensuring that there's consensus on a proposed feature before
    
  109.   you go implementing it.
    
  110. 
    
  111. * **Be bold! Leave feedback!**
    
  112. 
    
  113.   Sometimes it can be scary to put your opinion out to the world and say "this
    
  114.   ticket is correct" or "this patch needs work", but it's the only way the
    
  115.   project moves forward. The contributions of the broad Django community
    
  116.   ultimately have a much greater impact than that of any one person. We can't
    
  117.   do it without **you**!
    
  118. 
    
  119. * **Err on the side of caution when marking things Ready For Check-in**
    
  120. 
    
  121.   If you're really not certain if a ticket is ready, don't mark it as
    
  122.   such. Leave a comment instead, letting others know your thoughts.  If you're
    
  123.   mostly certain, but not completely certain, you might also try asking on IRC
    
  124.   to see if someone else can confirm your suspicions.
    
  125. 
    
  126. * **Wait for feedback, and respond to feedback that you receive**
    
  127. 
    
  128.   Focus on one or two tickets, see them through from start to finish, and
    
  129.   repeat. The shotgun approach of taking on lots of tickets and letting some
    
  130.   fall by the wayside ends up doing more harm than good.
    
  131. 
    
  132. * **Be rigorous**
    
  133. 
    
  134.   When we say ":pep:`8`, and must have docs and tests", we mean it. If a patch
    
  135.   doesn't have docs and tests, there had better be a good reason. Arguments
    
  136.   like "I couldn't find any existing tests of this feature" don't carry much
    
  137.   weight--while it may be true, that means you have the extra-important job of
    
  138.   writing the very first tests for that feature, not that you get a pass from
    
  139.   writing tests altogether.
    
  140. 
    
  141. * **Be patient**
    
  142. 
    
  143.   It's not always easy for your ticket or your patch to be reviewed quickly.
    
  144.   This isn't personal. There are a lot of tickets and pull requests to get
    
  145.   through.
    
  146. 
    
  147.   Keeping your patch up to date is important. Review the ticket on Trac to
    
  148.   ensure that the *Needs tests*, *Needs documentation*, and *Patch needs
    
  149.   improvement* flags are unchecked once you've addressed all review comments.
    
  150. 
    
  151.   Remember that Django has an eight-month release cycle, so there's plenty of
    
  152.   time for your patch to be reviewed.
    
  153. 
    
  154.   Finally, a well-timed reminder can help. See :ref:`contributing code FAQ
    
  155.   <new-contributors-faq>` for ideas here.
    
  156. 
    
  157. .. _easy pickings: https://code.djangoproject.com/query?status=!closed&easy=1