Creating an Inclusive Django Community with Kenya Phelps
Published July 15, 2026
This video features Sage Sharp at DjangoCon US 2018 in San Diego, California, USA.
DjangoCon US 2018 - Herding Cats with Django: Technical and social tools to incentivize participation by Sage Sharp
This talk will provide a practical look at how Outreachy used a combination of technical and social tools to motivate participants to complete our internship application process. Web developers who work on websites that encourage people to complete tasks will benefit from understanding the social incentive tools presented in this talk. Parts of the talk will be suitable for Django beginners who have completed one Django tutorial and are familiar with the basic concepts of models, objects, views, and templates. Everyone will appreciate the cat photos.
This talk was presented at: https://2018.djangocon.us/talk/herding-cats-with-django-technical-and/
LINKS:
Follow Sage Sharp 👇
On Twitter: https://twitter.com/_sagesharp_
Official homepage: https://outreachy.org
Follow DjangCon US 👇
https://twitter.com/djangocon
Follow DEFNA 👇
https://twitter.com/defnado
https://www.defna.org/
Sage Sharp explains how Outreachy used Django and social incentives to manage a complex application process involving more than 1,200 applicants, 20 open-source communities, and 60 mentors, while selecting about 40 interns. They argue that technical problems should be investigated through empathy: applicants asking for Python projects were often not struggling to search, but were worried they were not qualified because project descriptions were intimidating and unclear. Outreachy responded by centralising project listings and requiring mentors to describe each skill as required, preferred, or merely useful, along with the experience level expected; Django models, inline formsets, and permission checks supported this workflow. The broader lesson is to identify participants’ real pain points, find people who can help scale the work, incentivise them, and then build tools that address the underlying need rather than the first apparent problem.
Summarised automatically from the transcript.
Automatically transcribed, so expect mistakes in names and technical terms.
Hello. Thank you for coming in. I'm Sage Sharp. I use they them pronouns and this talk is Herding Cats with Django. So I actually have a small confession to make. I have only been using Django since December of last year, and that's when I decided to build Outreachy a new website. And so what is Outreachy? Outreachy is a three-month internship program and it's designed to support and increase the diversity in free and open source software. It's a completely remote internship program. We're international, and we pay our interns, which is very important. The Outreachy program itself We have five
organizers who are involved in running the program. We just recently hired two part-time staff members to help us with the internship application. And each round, because we run twice a year, we run May to August and December to March for our internship periods. So each round we have about 20 different free and open source communities that are involved in Outreachy, and we have 60 different mentors. that are involved. And so at the the last round, which was the May to August round, which is the first time we really measured how many people were interested in applying for Outreachy we actually got 1,200 applicants that applied to the program. So that's a lot of applicants.
And these applicants have to go through a pretty complex application process. They need to fill out an initial application, which includes things like checking their time eligibility. There's a couple essay questions, and then once they've been approved, they have to go through the list of projects that mentors submit. So mentors have said, you know, these are the projects, this is the three-month project I want to work with someone on, and they need to pick a project. Interact with the mentor and then actually make a contribution to that open source project. So our application process actually involves people making a contribution to a free and open source project. And then finally submitting a final application. So that's a thousand plus people that we have to get to go through this somewhat complex
application process. So how do we get those applicants moving in the right direction? There's a lot of cat herding that goes on in this process. And so our um our solution to this was to actually use a combination of Django and social incentives to try to get people to participate in our application process. So as part of this new website that I was making, one of the first things I did was to identify some user personas. But since this talk is called herding cats with Django, I will refer to them as per sonas. So this is our our first persona.
This is uh an outreachy applicant, and her name is Trisha Gupta. Um, she's a college student in India. She really wants to get an internship and Get a job in tech, and she's um interested in outreachy, but she's a little nervous. Um, and that's because she experiences imposter syndrome. An imposter syndrome is a combination of unrelenting standards for yourself and with compared with the fear of asking questions, especially in a public way. For fear of being seen as less knowledgeable. And we find that people who are un from groups underrepresented in tech, they often face imposter syndrome because they face discrimination.
They have to work twice as hard to get their um their achievements recognized. And so that means that they internalize that and they think that they're not good enough even when they are. The other thing that they face is that because they're from a group that's underrepresented in tech They often feel like they're representing everyone who shares their gender identity, who shares their race, and that leads to the stereotype threat of if I fail, am I failing my entire group And so there's a lot of pressure that applicants feel when they come into our program and try to get started So our second persona is a mentor. This is Harry. Harry is really excited about being involved in Outreachy, and he has a sense of purpose because
he wants to increase diversity in free and open source software. And he really wants to connect with someone who is enthusiastic about his project, you know, really soak in the excitement and energy from someone who is new to open source and new to his community. And the the last person we'll talk about is me. So I'm an organizer for Outreachy. My goal is to make sure that the program is viable long-term. And sometimes that means I have to make tough decisions to prevent mentor burnout. Because if a mentor works with an applicant who's not going to put in a full-time effort into their internship, then they may burn out and decide not to come back. So I'm really trying to make sure that the program
is viable long term. And I also have to keep everyone on track. So we've got a six-week application process where people have to make their contributions. um to these open source projects. And it's a very tight schedule, very tight deadline. And it's actually happening right now. So I have some tasks while I'm at at DjangoCon. Um so for me, a lot of the times what I feel is I feel overwhelmed. And that's mostly because of the scale of people who are involved in this program. So there's There's me that's the main person who's helping run outreachy, and there's 60 mentors. Even networking with 60 mentors is a challenge. But also answering questions from a thousand plus applicants and getting them on the right track is an additional challenge.
I can't do it all myself. So my my process has been really trying to build technical tools and build our website's documentation so that people can find the help they need, connect with mentors. um and and actually get going. So if you apply um a little bit of uh marketing theory We've got this giant amount of applicants who are interested in applying for Outreach E. And and then it kind of narrows down into finally we accept 40 interns. So we have uh a thousand plus people who are eligible to apply, and we only end up accepting 40 of them. We don't have good statistics about some of the parts of our application process, like
Did people find not find the project they wanted? Were they not able to find a mentor? We don't have good statistics about that. But we know that that's where most people drop off. And so for me, what I really wanted to figure out was for that first process of picking a project, how can we make things better? And the first step for that is to really understand what the applicant's needs are when they're trying to pick a project. And so a lot of them had worries about projects and they would email the outreach to organizers or the mentors' mailing list personally and say things like, um, do you have any Python projects? And so as a technical person, my first instinct was to problem solve. I thought, oh, these people can't find our projects, they can't find the project that, you know, meets
the um meets what they're interested in. So my first instinct was, hey, let's build like a search tool and and have you know maybe a tagging system and help them out But when I started asking those people and digging more into their questions about why they were asking that particular question, they had actually found the project listing. And their next question was, but do I need to be an expert in this particular skill to apply So again, it goes back to that imposter syndrome that they were experiencing of saying, thinking to themselves, am I good enough to apply to this project? And the other thing that we did was we looked at, you know, what what sorts of experiences, what are their pain points when they're trying to pick a project?
So one of the pain points was that before we had the new Outreachy Django website, the projects were actually spread across all the different community websites and wikis. So people would have to go through 20 different wikis to try to find the project listings. They were all in different formats. Sometimes the mentors would not even list what skills were needed for this particular project. They just have a title that would have a lot of jargon in it. Even if they listed the skills, oftentimes it was like the mentor's wish list of the perfect candidate. And there was really no indication of whether a skill was required or optional. So that imposter syndrome again was getting triggered by how the projects were laid out.
So the next step for me was to try to figure out How do I do this? I tried to do it manually for one round where I asked mentors to update their project listings and it would take weeks. It would take far, far too long for me to talk with those 60 mentors. So I had to really figure out tools to get the mentors to put their projects in the right kind of listing. So the next step, as Mr. Rogers likes to say, is to look for the helpers. And so the mentors really know what skills are required versus optional for their project. They know what skills they're willing to teach people who are applying. And they also know how much
experience the applicant really has in that particular skill. And so these are people who they know their project deeply and we just need to get them to provide more information. But especially technical folks, especially folks in the free and open source software community, it's hard for to get them to fill out paperwork. And so sometimes it takes a little incentive to be able to get someone to put their project in the right form. And so what we really did was we went back to that user persona of the mentor, and we knew that the mentor really wanted to work with an enthusiastic intern. We wanted them to list their project skills in a very particular fashion. And so what we did was we said, okay, we're gonna build this new website.
You're going to have to list your project through our website and list the skills out in this particular fashion before you can actually select an intern from the applicant's web. applied. So basically a little bit of carrot to say no you really have to get your your project into the right format And then finally, you know, after we've gone through this whole step of trying to understand our participants, you know, going through who can help so we can scale the program and how to incentivize those people to help. Finally, we got the step where we got to build some tools. So this is actually a um a listing of uh a project with Outreachy and It's a Mozilla
community project. We've got the project title, we've got the the deadline to apply because some of the projects actually have an extended deadline. And then we've got that skill listing where we really you know, expand on what it means to have this skill. And I think that um, you know, people, especially if you're looking to hire into your teams, Putting skills into this format is going to make it so that people who are from groups underrepresented in tech will apply to your jobs more. And so what we have here is we have the skill and how what impact it has on the intern selection. So is it required that the applicant have that particular skill? Is it a hard requirement?
Are they not going to get selected if they don't have that skill? Would mentors prefer that applicants have that that skill. So there's always a preference towards you know the intern, but um but you would still accept someone who didn't have that skill skill. And then finally, is it a nice to have? Like is it unlikely that someone would have this skill? But if they had it, it would be amazing. And then the last part of it is the experience level. How experienced do you have to be in each of those skills? So this is what the view of the project and the project skills looks like. So let's dig a little into the actual Django parts of it. So we've got the in our model, we've got a project skill class, and in the help text, we really call out that we just want one skill, just one, not a list, just one skill.
Um and we try to make sure, you know, ensure that by saying the skill description shouldn't be longer than like a sentence. And the next part is we have options for what is the impact on the skill on intern selection. Is it required? Is it nice to have? Or is it like a preference for the mentor? And then once we take those those choices, we can put them into a a char field and um we actually in the help text call out to the mentors hey be very careful when you select this because if you say that a skill is required then um the intern may not apply unless they meet a hundred
percent of your skills. So be very, very careful in this And the other part of this model is the choices of how experienced do you have to be in the skills? So are the mentors willing to teach you the skill? You don't have to know anything at all. Should you have read about the basic concepts of this skill? Like like know it a little bit but not have like used it. And the next step is like you've used it in a class or maybe a small personal project. And then finally, you should, you know, are you familiar with this skill, but you're willing to help expand your knowledge with the help of a mentor? And then finally, is this going to be a challenge?
Because some of the Autreachy projects are really challenging. And so, you know, calling out that you're going to have to expand your skills, maybe even without your mentors' help. And so this is a little bit of the template, what it looks like to actually enter the project skill. We've got the small, you know, text field for the project skill. name, we have the drop down for whether what experience level you need for the skill and what's required. And so finally digging into a little bit of the view, we've got a parent class that we're subclassing here, which I'll get back to. But this is also in inline form set. So basically what that means is we allow mentors to put in multiple skills
at the same time. And that sort of cuts down on the them giving like a giant list of skills instead of just one. So the inline form set, you know, that from the mentor, it ends up looking a bit like this. It's a little long. But it allows the mentor to you know add those three fields and then um delete or or modify it later. And then later we hook it up through URLs. py and what we pass in is we pass in the community ID. So which community is this project associated with? The free and open source community. And what is the the project ID? And in that parent class, what we actually do is we do some permissions checking because there are lots of people that are logged into the Outreachy website, but not everyone should be allowed to edit the projects.
And so what we do is we make sure that this project is participating in the most current round. So we grab the most current round by looking for um the object that has uh the latest date uh when the intern is going to start their internship. So that's the most current round. And then we look up, you know, based on that project ID and the community ID, and is it participating in this round to make sure that the mentor can edit that project? And then the last part is that permissions checking, of making sure that this is a mentor who has submitted this project or that it's a co-mentor who has been approved to edit the project, because sometimes there's more than one mentor on a project.
So that's a little bit about the code, the Django code, very, very pretty simple code. But it ended up meeting this need of trying to help our applicants. With their imposter syndrome and help them pick a project faster. So there are some pitfalls when you start to make technical tools. And I talked a little bit about that of you know F the first question that I encountered was, you know, do how do what do you have projects that are are Python related And my first inclination was to build that like search tool, that tagging tool, but that wouldn't have fixed the problem. The root problem was that our applicants were uh intimidated by looking at our project list and we really needed to get it into a different
a different format in order to support the imposter syndrome that they were experiencing. So when you start to face that of you know coming across someone's confused in your project, someone's not using your website right. I really encourage you to ask questions and to dig deeper so that you can figure out how to actually solve people's root needs. And so that's a lot of what this talk is about, just using empathy to understand what are your participants' needs. What are their pain points? And then especially if you've got a project where there's a lot of people involved, you need to identify who can help, who can help you scale, and how do you incentivize them to help.
and then finally build tools to motivate them, encourage them to help other people. So speaking of help, you can actually help outreachy out. So we have two uh git repos. One is a repository that has creative materials and promotional things. Especially if you speak another language. We would love for you to translate our promotional materials. And then we also have a Django repository. And if you're looking for some easy fixes, I'm actually going to be at the sprints on Thursday. I would love to sprint with folks. There's a tag, you know, help wanted that you can go look at in our repo. And especially if you're new to Django, I would encourage you to check out the newcomer's welcome tag because that's got
Some pretty simple fixes that should be easy to solve if you've gone through like a really small tutorial. If you know CSS or you know JavaScript, we would love to have you help because I'm I'm not an expert in that. I'm good at Python, not those two. And so one of the things that we want to do is we want to actually, for the next round, have mentors be able to declare what languages they speak. Because we get interns from around the world that it's their English is not their native language. And so if they could find a mentor that spoke their native language, they'd be able to progress so much faster. But we initially had a Django package that we pulled in that had all of the world's languages, but it was two
megabytes. So every time you load a page, it was two megabytes. which is not great for people with with bad internet connection. So we'd like to do some sort of autocompletion on the mentor languages, but as I said, I don't know JavaScript or anything like that, so help would be wanted. So thank you for coming to my talk. I hope that you can take some of the lessons around applying empathy and finding ways to motivate other people to help and building tools to motivate them. Thank you.
Outreachy is a paid, three-month, fully remote internship program that supports and increases diversity in free and open source software. It runs internationally and accepts applicants from groups underrepresented in tech.
Discussed at 0:16Applicants complete an initial eligibility and essay application, choose a mentor-proposed project, interact with the mentor, make a contribution to the project, and submit a final application. The process runs over six weeks and narrows more than 1,000 applicants down to about 40 interns.
Discussed at 1:48Put all projects in a consistent format and clearly distinguish required, preferred, and nice-to-have skills, along with the experience level expected for each one. This helps applicants understand that they do not need to be an expert in every listed skill.
Discussed at 11:58Outreachy used a Django `ProjectSkill` model with one skill per entry, choices for its impact on intern selection, and choices for the required experience level. An inline formset lets mentors add, edit, or delete multiple skills, while the view checks that only authorized mentors can edit current projects.
Discussed at 13:33Ask follow-up questions instead of immediately building the requested search or tagging feature. In Outreachy’s case, applicants had already found the projects; the underlying problem was that the listings intimidated them, so changing the presentation solved the root problem better than adding search.
Discussed at 17:30Use empathy to understand participants’ pain points, identify the people who can help, and give those people incentives and tools to contribute. For Outreachy, this meant making mentors responsible for entering structured project information and building documentation and Django tools so organizers did not have to handle everything manually.
Discussed at 18:17Note: We understand that names change, people change, and bodies change. We respect each individual's journey and privacy. If you have any concerns about a video or need us to remove content, please don't hesitate to contact us. We will handle your request with care and promptly address any issues.
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 14, 2026