Good Conduct: How Django Modernized it's Code of Conduct

  • Good Conduct: How Django Modernized its Code of Conduct

    Dan Ryan, DjangoCon US 2026

  • Why now?

  • Get it wrong, and you break the trust the document exists to protect.

  • Why use the Contributor Covenant?

  • We stand on the shoulders of those who stand on our shoulders.

    Ada Initiative → PyCon 2013 → CC3 → PSF, OpenJS, Mozilla, Microsoft

  • Step 1 was define a process for proposing changes

  • We're coders, use coding tools. Public, transparent, and versioned.

    • Proposing changes by opening issues
    • Working group then reviews, discusses, and iterates on the proposal
    • Sufficiently large changes will be announced to the community for feedback
    • Changes to documentation are approved by the working group; changes to the CoC itself require board approval
    • Announce changes publicly
  • “Trust us” becomes
    “here's the commit history”

  • Our guiding principles

    • Protect reporters first, always
    • Anonymize everything
    • Trauma-informed, person-first language
    • Consensus when possible, or two-thirds if not
  • Our shared values

    1. Respecting the purpose of our community, our activities, and our ways of gathering.
    2. Engaging kindly and honestly with others.
    3. Respecting different viewpoints and experiences.
    4. Taking responsibility for our actions and contributions.
    5. Gracefully giving and accepting constructive feedback.
    6. Committing to repairing harm when it occurs.
    7. Behaving in other ways that promote and sustain the well-being of our community.
  • What changed?

    • Clearer language of who and what the CoC protects
    • Examples of good and bad behavior
    • Explicit consent and impact language
    • Explicit AI-generated content language
    • A clear ladder of enforcement
    • Tons of related documentation and process improvements
  • “We pledge to make our community welcoming, safe, and equitable for all.”

  • Then & now

    This includes, but is not limited to members of any race, ethnicity, culture, national origin, colour, immigration status, social and economic class, educational level, sex, sexual orientation, gender identity and expression, age, size, family status, political belief, religion, and mental and physical ability.

    2014
  • Then & now

    all individuals, regardless of characteristics including race, ethnicity, caste, color, age, physical characteristics, neurodiversity, disability, sex or gender, gender identity or expression, sexual orientation, language, philosophy or religion, national or social origin, socio-economic position, level of education, or other status

    2026
  • Then & now

    We cannot allow that frustration to turn into a personal attack.

    2014

    Character attacks. Making insulting, demeaning, or pejorative comments directed at a community member or group of people.

    2026
  • Then & now

    Harassment and other exclusionary behavior aren't acceptable.

    2014

    Harassment. Violating explicitly expressed boundaries or engaging in unnecessary personal attention after any clear request to stop. This includes persistent unwanted questioning (sea-lioning), coordinated harassment or brigading, tone policing, and other patterns of behavior designed to exhaust, intimidate, or silence community members.

    2026
  • Then & now

    Disagreement is no excuse for poor behavior and poor manners.

    2014

    Impact matters more than intent. Even when harm is unintentional, we are all responsible for the impact of our words and actions.

    2026
  • Then & now

    In general, if someone asks you to stop, then stop.

    2014

    If someone says 'no,' asks you to stop, or sets a boundary, respect it immediately and without debate.

    2026
  • The ladder of enforcement

    1. Warning
    2. Suspension — 30-90 days
    3. Suspension — 90+ days
    4. Permanent ban
  • AI-generated content

    Own your contributions, review them before you post, apply your own expertise — misuse of AI-generated content is a Code of Conduct violation.

  • The process

    • 13 pull requests
    • +2,715/-946 lines changed
    • PR #91 did the heavy lifting of updating our process docs
    • PR #97 — just +217/-90 — closed it out
  • This was my first real contribution to Django. Code isn't the only way in.

  • The process of updating the text is over. The process of building trust in that document will never stop.

  • Lessons we learned

    • Start earlier than feels necessary
    • Timebox aggressively
    • Borrow trust instead of re-litigating first principles
    • Know what needs consensus vs just needs a decision vs what needs a conversation
    • Protect the humans doing the work
  • Fork the process, not just the text. The mechanics are in the blog post.

  • Questions?