On Open-Source Packagement

This post was originally meant to be a talk I was supposed to give at the Black Python Devs Leadership Summit in Durham, NC, in 2024. I was extremely grateful and appreciative that I was invited to talk about my experiences. Unfortunately, I had some flight problems and missed my speaking opportunity. So here it is in written form!

I’d like to talk to you about open source packagement and provide some tips to help your community building. If you’re not sure what “Packagement” means, that’s because it’s a term that Jay and I accidentally coined, meaning to maintain a package beyond the software. I like to think of it as needing to cultivate the community. After all, the community is what sustains us and helps propel us forward. The good vibes from the community can fill our cup to do the tedious tasks involved with software development. I’d like to help you identify paths to be more effective within your communities.

While I’ve been contributing to open source for a while, I’ve only recently begun cultivating community. My knowledge and experience on this topic primarily come from these four organizations in the Django community.

  • Django Debug Toolbar, a popular, small, third-party package that I help maintain.
  • DjangoCon US and the non-profit board that puts the conference on, known as DEFNA.
  • Djangonaut Space, an organization that runs an open source contribution mentorship program in the Django ecosystem.
  • Django Commons, an organization that eases the logistical burden for Python and Django package maintainers.

Common traits for sustainability

With all of these organizations, there’s a community within them. Some of them I’ve helped shape a lot, such as Django Commons and Djangonaut Space, while others I’ve simply found my place within the existing structure. During my time with them, I’ve learned there are common traits that help these communities sustain themselves. They are:

  • Communicate for connection and understanding
  • Align people with positive feedback loops
  • Onboard people quickly

Communicate for connection and understanding

When communicating with your team, try to build relationships with each other. Yes, your work is important, but it’s so much more enjoyable when you have a connection. Share things about yourself and your life. Ask about your colleague’s lives. That said, it’s critical to have boundaries and for those boundaries to be respected.

I find self-deprecating humor to be a good way to forge bonds with others. In the second session of Djangonaut Space, I was the one who created the pairings of mentors and mentees of folks around the globe. It should have been easy enough. We had all the times people were available in their local timezones and their offsets. All I had to do was convert those times to UTC, then find which groupings allowed for the greatest overlap.

Simple, right? Well, it worked perfectly, right up to the point where we realized that rather than subtracting the UTC offset, I added it. This caused confusion and strife, but things worked out, thankfully. Anyway, in our celebration call at the end of the session, I made several self-deprecating jokes about my ineptitude around timezones and date math. The purpose was to show vulnerability and build a stronger connection with everyone.

Once you’ve built up that connection, you’ll find it easier to achieve understanding. This is helpful because, eventually, you will come across disagreements that require compromise. That compromise is much easier to arrive at if you trust that the other person cares about you and your shared goals.

I’ve seen the best outcomes when I give the other person the benefit of the doubt and try to understand the surrounding context of the disagreement. Sometimes it’s that we are operating under a different set of assumptions, or maybe we have different goals. The only way to discover those things is to step back from a disagreement and seek to understand. Once you do that, finding your path to compromise gets much easier.

Align people with positive feedback loops

The next community trait was to align people with positive feedback loops. What I mean is that people should do work that boosts their energy, not drains it. It should provide a dopamine hit or be something you would like to do. When you actively want to do something, you’re way more likely to do it proactively and with at a higher quality. Plus, these boosts provide an emotional return to help fight burnout. For me, I enjoy helping others solve problems. When I can help a fellow community member with a problem, there’s a deep sense of satisfaction for me. But… If I’m being really honest, it might be because I’m a middle child.

Onboard people quickly

The last trait is the ability to onboard people quickly. When you add someone to your organization, their motivation is at its maximum to do things. The difficulty is that they first need to learn how to operate within your organization before they can be productive. If you can help this person make meaningful changes quickly, they are going to feel fantastic about themselves and the organization. They’ll feel confident that they can perform their role. This in turn makes them more willing to tackle the next thing and the next thing and the next thing. Onboarding will always be a challenge, but I feel the returns are worth investing in it.

Onboarding tips for community projects

Knowing that onboarding is never easy, I’d like to propose a few tips. Most of my organizations are small, so they may not work everywhere, but there should be some positive takeaways for everyone.

1. If your organization needs help, let others know

The great thing about the Python and Django communities is that people want to help each other. Though it is difficult since you still need to identify folks who are available and compatible with your project and team.

Which leads me to #2.

2. Set expectations

When bringing someone on, you should be upfront about what you’re expecting them to do and what you don’t expect them to do. You should give them a general sense of the time commitment. Finally, you should tell them why you’re inviting them in and why you think they’d be a good fit. Setting these expectations and agreeing on them goes a long way toward bringing compatible people into your team.

3. Find everyone’s dopamine hits

This requires you to do some self-reflection to understand why you enjoy participating in open-source. If a person isn’t getting personal enjoyment out of their work, they will become demotivated and burn out. Finding those positive feedback loops keeps everyone emotionally healthy and upbeat.

4. Support people’s bursts of inspiration

Everyone knows volunteer time is difficult to come by. When you see a person hitting their stride with work, do what you can to support them. Recently with Django Commons, Daniel, a fellow administrator, suggested switching to file-based management of our GitHub organization. All he required at the time was agreement that it was a good idea, and he was off to create a proof of concept. We now have a much better solution for managing our organization because he capitalized on that inspiration.

I’ve also made the mistake of stifling a person’s inspiration. For another small package I help maintain, a colleague was proposing multiple feature ideas to improve and expand the library. I was overwhelmed and told them that I didn’t have time to review the issues. Almost immediately, the flow of new issues stopped. Because of my poor communication, I made it more challenging for that person to contribute, stifling their inspiration. Now the package is worse off because of it. So when you can, try to find ways to support people’s bursts of inspiration.

General packagement tips

Moving past onboarding, there are some other things you could try to improve your packagement. With all of these, you can start small and add to them as you go.

1. Set regular meetings

I find that well-structured meetings provide people with accountability. They are also a great way to build relationships with each other. But please remember to respect people’s time.

2. Document the things

If you don’t have any documentation, start with your current expectations and processes. Make it easy to find and edit. Then add to it as you go.

3. Keep in mind that something is better than nothing

Large volunteer projects are hard, so make it easy to succeed. Set small goals, achieve them, then iterate.

4. Celebrate everything!

Acknowledging people’s efforts and hard work can rejuvenate them. Plus, public celebrations are a great form of marketing. Remember, the Python and Django communities want to see people succeed. They would love to celebrate you!

5. Optimize for now

It’s easy to get lost in the possibilities of what if. But the unfortunate reality is that we’re volunteering our time, and future availability isn’t guaranteed. Once you have something that works, make it more efficient, easier and repeatable.

Bringing it back to a close

I want to acknowledge that these and the other topics I brought up are full of gray areas. All of them will involve several “it depends” answers. So if you’re feeling overwhelmed, remember that something is better than nothing and that people wish to help you.

So that’s it! I hope you were able to take something away about packagement for your communities, even if it’s just a new word. If you’re interested in collaborating on any of the projects, please let me know!

You can find me on the Fediverse, Django Discord server, or reach me via email.