Let's Talk! πŸ“’

Communication and Consensus Building in Open-Source


Presented by:

Travis Hathaway

For:

EuroPython 2025

Who am I?


  • First time EuroPython Presenter! πŸš€ 🀘 😝
  • Long time Python programmer (10+ years) 🐍
  • Open-source enthusiast πŸ§™β€β™‚οΈ
  • Wannabe rock star 🎸 🎢 🎀
  • Aspiring German citizen πŸ‡©πŸ‡ͺ...
Travis Hathaway

Travis Hathaway

(a.k.a. pretty chill guy)

Employed by:

Anaconda logo

Works on:

Conda logo

What we'll cover...

Communication


Asynchronous
  • issue trackers
  • forums
  • chat servers
Synchronous
  • community calls
  • in-person meetings

Consensus


Standards

  • Project enhancement proposals
  • Project governance

Why do I want to present this?


  • Managing OSS projects is just as important as the code
  • I want to share my experiences with working on conda and in OSS

To illustrate how these all fit together, we follow the story of Jack and how he utilized these tools to build a community of open-source developers.

Who is Jack?


  • He's a cat
  • Works for a B2B SaaS in the laser pointer industry
  • Loves to nap in the sun β˜€οΈ
  • Has just written an amazing open-source project
Jack

Jack Catterson

(a.k.a. pretty chill cat)

Photo by Jae Park on Unsplash

ArgPaws Logo

Features

  • Framework for writing CLI applications
  • Configuration management
  • Logging integrations
  • Extensible with plugins

Jack's first steps...

GitHub Logo

1. Create a GitHub repository

Cutting a release

2. Cut a release

PyPI Logo

3. Upload to PyPI

Jack's B2B SaaS employer writes a blog post about his project and it goes viral! πŸš€ More and more users are discovering his project πŸ“ˆ.

Jack is excited 😝

Jack's employer realizes this project is a great source of publicity, so they decide to let him and few other co-workers work on it full-time.

Jack's first dilemma...

Now that his project is live on GitHub, he keeps getting new issues and pull requests from users. On one hand, this is great but on the other hand, he feels overwhelmed.

Jack is nervous 😬

"Hey Jack! What's up?"

"Hey Travis! I need some help! I know you help manage a popular open-source project, and I need some advice on how to handle all these issues and pull requests."

"I know it can feel overwhelming, but this is a great opportunity to communicate with your users, so be sure to find out how you can stay responsive by incorporating answering issues and pull requests into your daily routine."

"How much time should my team dedicate to this?"

"This will depend on the project, but a good rule of thumb would be 20% of your team's time."

"That sounds reasonable! We can always adjust later if needed and as we add more maintainers."

Jack and his fellow maintainers follow through on Travis' advice and start responding to issues and pull request and begin learning more and more about their users.

But as the number of issues and pull requests grows, they realize how unorganized everything is...

Keeping things tidy 🧹


  • Use labels to categorize issues (bug, feature request, support, documentation, etc.)
  • Use milestones to track progress (v1.0, v1.1, etc.)
  • Use templates to standardize issues and pull requests(e.g., steps to reproduce for bug reports)

Labels

GitHub Issue Example 1 GitHub Issue Example 2

Milestones

GitHub Milestones GitHub Milestones

Even tidier 🧼


  • Keep related issues grouped in other issues (e.g. epics)
  • Use a project board to track progress (e.g. Kanban board)
  • Use a changelog/release notes to track changes (e.g. published with every release)

Grouping related issues

GitHub Epic 1 GitHub Epic 2

Release Notes

GitHub Release Notes

Jack and his maintainers now have an organized approach to communicating with their users via issues and pull requests, but Jack still feels like something is missing...

"Hey Travis! Thanks for the advice so far, but I feel like we're missing out on opportunities to connect and communicate better with our users. Do you have any other tools to recommend?"

"Definitely, one other way to not only communicate better with your users but allow them to communicate with each other is to host a chat server instance."

"A cat server! Oh hell yeah, sign me up!"

"No Jack! A chat server! Like Discord, Slack or Matrix"

Meow, Meow, Meow


Cat... ehem chat servers...

  • Provide a place for informal communication
  • Allow users to ask questions and get help
  • A place where would-be volunteers can reach out to maintainers

Discord

Discord Example

"One more thing Jack, you might also consider setting a forum website for ArgPaws. This gives you one more place to have conversations with your community and can be a bit more organized than a chat server."

"Awesome! Just one more place for cool cats to connect!"

All for one and one forum


Dedicated πŸ§™β€β™‚οΈ

  • Discourse
  • Zulip

Usual suspects πŸ₯Έ

  • StackOverflow
  • Reddit

Zulip

Zulip Example

StackOverflow

StackOverflow Example

Jack decides to setup a Discord and Zulip server for ArgPaws and keeps an eye on StackOverflow for questions about ArgPaws there.

He's getting more and more engagement and feels a real connection with everyone he's writing his software for and his fellow maintainers 🫢.

"Jeez Travis, so many great tools! But, I still feel like something is missing... What if I want to meet members of my community face-to-face?"

"Yes Jack, it can actually be pretty depressing never to meet anyone, especially those that dedicate so much of their time to your project. My first recommendation is setting up a regularly recurring community calls."

"To make sure the most people can attend, I would use a video conferencing tool and pick a time where the most people can attend. If you have a community that's spread out across the globe, consider rotating time slots."

"Great idea! We can pick a single time that works for most people and see how it goes. Looking forward to meeting everyone!"

More on community calls


  • Take notes during the call for those who can't attend
  • Encourage people to propose topics beforehand for discussion
  • Pick a cadence that works for your community (e.g. weekly, every other week, monthly)
  • Publish meeting notes where everyone can access them

Community calls

Community Call Example

Jack sets up his community call and slowly starts making connections with ArgPaws contributors and users from all over the world 🌍 😸.

Zoom Call with Cats

Image generated with ChatGPT

Some time has passed and ArgPaws continues to gain adoption beyond the laser pointer industry...

ArgPaws Logo

Impressive growth!

  • Over 1k stars on GitHub ⭐️
  • Over 500k daily downloads on PyPI
  • Now has three primary corporate sponsors

Jack reaches out once more to his ol' pal Travis for some more advice...

"Hey Travis! Everything with ArgPaws is going very well. But, while the community calls are a great way to keep us organized on maintenance and feature work, I feel like we may need even more time with each other. Do you have any advice for how we can achieve this?"

"Sure thing Jack! While meeting virtually can help us achieve a lot, sometimes it's important for us to meet in person!"

Face-to-face: it's the place


Where?

  • Local meetups
  • Regional conferences

What?

  • Workshops
  • Hackathons
  • Summits

Jack and his community of developer began meeting in person. And while they were able to achieve a lot, they soon came across the last problem we'll discuss today...

"Travis, our meet ups are going well, but we having a hard time making decisions and keeping track of what they are. Can you help us out?"

"Ahh yes, this is perhaps one of the trickiest parts of managing an open-source project: consensus. It's important that you have a clear way to make decisions and record what they are."

Enhancement proposals and RFCs

Examples in the wild


  • Python Enhancement Proposals (PEPs)
  • Rust RFCs
  • Django Enhancement Proposals (DEPs)
  • Conda Enhancement Proposals (CEPs)

It's time for a comic!

Standards Comic Part One
standards comic part two
standards comic part three
standards comic part four
standards comic part five
standards comic part six

Okay, what does this process actually look like? πŸ˜…

Propose

Standards Actual Process 1

Vote

Standards Actual Process 2

Tally

Standards Actual Process 3

Recorded

Standards Actual Process 4

"Thanks for the great explanation on how this stuff works! I just have one more question: who actually sits on the steering councils?"

"Great question Jack! The steering council membership is normally determined by your project's governance model. In conda's case, we restrict membership to a maximum of two people per major funding source to make sure one funding source doesn't dominate the decision-making process."

A little more on governance 🏒


  • Governs decision making process
  • Openly published
  • Can be amended and changed

"Jeez Travis, that governance stuff sounds super boring! But, I guess it's important!"

"Yep Jack, it is definitely boring! But, it's important that everyone has clear expectations during the decision making process, so we can avoid conflict and confusion."

Epilogue

Two years have passed since Jack's last conversation with Travis. He decides to call him once more to check in...

"It's nice to talk to you again!

ArgPaws now has:

  • A governance document
  • APEPs (Arg Paws Enhancement Proposals)
  • Regularly occurring in-person and digital meetups
  • Chat servers and forums
  • Well labeled and organized GitHub projects
  • Milestones and release notes πŸš€

"Nice ☝️ 😌"

Thus concludes our story of Jack and his adventures in communication and consensus building in the world of open-source.

Fin 🀌