Show your support for community science. Donate to Public Lab »
Hi all, I'm preparing for a talk with Liz Barry ( @liz) at LibrePlanet 2018 on Sunday at
It'll livestream at https://libreplanet.org/2018/live/
The program is here: https://libreplanet.org/2018/program/
Sharing strategies for welcoming newcomers into FLOSS projects: First-timers-only, list moderation, and more
Room: 32-123 - Time: 15:25-16:10 (Eastern Time)
Since early 2016, Public Lab has worked to make our free software projects more welcoming and inclusive, and to grow our software contributor community in diversity and size. We have learned from and incorporated strategies from other communities like the Hoodie Project, SpinachCon, and FirstTimersOnly.com, and shared our own ideas, and this session will cover a range of principles and strategies that have emerged across a number of separate efforts in different FLOSS projects. Topics will include:
2) Codes of Conduct,
3) first-timers-only issues,
4) welcoming pages,
5) social media outreach,
6) code modularity,
7) ladders of participation,
8) continuous integration,
9) friendly bots, and
Follow related tags:
community presentations event presentation
Just as Summer of Code deadlines are looming, I wanted to write a bit about modularity, as I think it'll be useful for our mentors and students this coming SoC season.
I'm mostly talking about open source software collaboration here, but I really believe that this approach can work for collaboration of all kinds -- from writing projects to hardware prototyping. We're getting better at modularizing things like the new microscope projects, the spectrometer, and of course various datalogging projects.
Modularity may sound kind of boring as a topic -- and it's relationship to outreach and onboarding not immediately apparent. The basic idea is to isolate functionality in smaller chunks of code which are easier to reuse, understand, and maintain.
But this is exactly what newcomers need -- to not have to know a much larger whole system to be able to get your bearings, and to know what a chunk of code will receive as input, and should generate as output. It also makes for very test-able code, and code which has a minimal "entanglement" with other parts of a complex system.
I encourage ANYONE doing open source work to think hard about how their project can be better modularized -- along with the various other strategies we've been covering in this series, it can lead to a major influx of new contributors!
For these reasons, we now require all contributions to work in small pieces which we can scan through quickly, write simple tests for, and publish to our live site within a day or two. This applies to Summer of Code projects as well as any given feature or bug fix on the site.
One big benefit is that you'll see your work published on the live site very quickly! Sometimes even the same day it's written. We ask Summer of Code students to present a new PR at least once per week; many submit several.
When a bug or a feature request is first proposed (even after there's been a consensus on exactly what it should do, which can take a while!) it's rarely something small and self-contained enough to be a good "chunk" for solving -- for either newcomers or long-time contributors. So we ask everyone to try to break bigger projects down into smaller, separately solve-able parts.
It often takes a lot of work to do this -- and it's a bit of a skill! Sometimes it can take some deeper familiarity with the code organization, but not always. Here are some tips:
For an example, check out this beautifully broken-up giant project: https://github.com/publiclab/plots2/issues/1416
What's worked for you, in terms of breaking things up?
Sometimes, for a big enough feature, we've found that it's worth actually spinning out a separate project; we've done this for:
And many more! https://github.com/publiclab
However, this can tend to split your community -- the issues listings aren't shared, and it can be hard to maintain a sense of continuity across projects. We've solved this a bit with our cross-project Community Toolbox welcoming page:
first-timers-only and other issues for all Public Lab projects on GitHub. But we can surely do even better, and experimenting with GitHub "teams" as well.
Although modularity is something fundamental in basically all coding, our first major foray into broader structural came with GSOC 2014 student Justin Manley's (@justinmanley) work on MapKnitter. He pushed us not only to develop clearer welcoming documentation for newcomers, but also to spin out projects like the heart of MapKnitter, Leaflet DistortableImage. We also took major inspiration from the work of the Hoodie project, which champions the "first-timers-only" workflow we use today.
Small modules as a design pattern has been championed by the Node.js community, where the NPM repository of modules has led to people developing tiny programs which, for example, provide formatting for numerals, or can just capitalize words. These tiny modules are interconnected into collections of thousands to form bigger programs, and to do this without constantly breaking, they follow something called Semantic Versioning. This means that the version number of each "release" of a mini-program carries information about what's changed.
These modules do their utmost to "not break" projects they've been used in, and so a version change from
v2.0.0 indicates that some behaviors have been changed -- any lesser change, for example just adding new functionality without breaking old functionality -- would be indicated by a minor version bump, like
v1.2.0. Bug fixes are the last digit. This may seem extraordinarily persnickity, but it provides confidence that a program will be pretty stable -- it's a kind of "agreement" between upstream and downstream programmers in interrelated projects.
We strive for something similar with tests. By accompanying your code with tests, and limiting the size of your changes, you can give other coders the confidence that your code won't break, or if it does, it'll complain by failing some tests! When done right, this can actually give newcomers a lot more confidence that they can make major changes and know (if tests are well-written) that they haven't broken anything.
OK, so what does this mean for you?
If you're part of the PL code reviewers group, and you're there to help people out, try looking at GitHub issues that are too big to be solved in one big chunk, especially for newcomers. We use the tag
break-me-up for these.
In the comments of an issue that could use breaking up, try to develop a checklist of things you can see happening one by one. Checklists can also help you recruit people to take on one or more steps, sharing the work. Do any of the make great first-timers-only issues?
As you complete each item, check it off the list and link to the issue or pull request where it was solved -- and thank the person who solved it!
Finally, if you propose a feature or bug fix, work with others to plan out these steps -- and ask for help! We're eager to pitch in.
Follow related tags:
website software gsoc web
This is part 2 in our Software Outreach series -- and I wanted to note that a lot of things we're doing in software contributor outreach at Public Lab also apply to outreach more broadly across Public Lab.
These topics may seem obvious to some people. But if you poke around the open source world (and the world at large, sadly), they really really aren't. I've seen some terrible things said on public mailing lists, and I'm proud of being part of a community that doesn't allow that kind of behavior. I'm especially proud to be part of a community that is actively nice to one another. Whenever I'm feeling impatient, annoyed, or just didn't eat my oatmeal that morning, I try to remember this and to put my best foot forward.
Codes of Conduct are a good example of something that's not just for our software community -- ours applies across all virtual and in-person spaces where Public Lab is hosting. The past few years have seen a dramatic rise in the use and application of codes of conduct, and Public Lab's was adopted midway through 2016, and has been used as a model for the CoC of other groups since then:
We are coming together with an intent to care for ourselves and one another. We want to nurture a compassionate democratic culture where responsibility is shared. We -- visitors, community members, community moderators, staff, organizers, sponsors, and all others -- hold ourselves accountable to the same values regardless of position or experience. For this to work for everybody, individual decisions will not be allowed to run counter to the welfare of other people. This community aspires to be a respectful place both during online and in-person interactions so that all people are able to fully participate with their dignity intact. This document is a piece of the culture we're creating.
Codes of Conduct directly address the fact that without being assured of being treated respectfully, we cannot expect people to join in, let alone collaborate. They are also an acknowledgement that incidents of poor conduct disproportionally affect those who are already structurally excluded or marginalized, and that affirming -- and working to achieve -- a harassment-free environment is a prerequisite to an inclusive space.
I was impressed in 2015 by the Hoodie project's placement of their Code of Conduct up front and center on Slide 2 of their presentation at a BostonJS meeting. Codes of conduct are now standard in many (but not all!) open source communities, with GitHub even prompting all projects to include one in their project code.
Trumpet your Code of Conduct! It speaks volumes to people.
At the recent Google Summer of Code Mentor Summit, there was a lot of discussion (led by the amazing folks at Systers) of conduct, but also of questions of tone -- and one person mentioned that they have heard people try to excuse unpleasant tone (or worse!) if the guilty party is "technically excellent" -- how utterly awful! If someone is not able to conduct themselves with basic respect, they are simply not welcome in our community, and to be honest, we shouldn't be surprised if they aren't good at collaborating with others.
There's a LOT more that could be written about CoCs -- how they work, what to put in them, how to respond to violations, privacy, and so on. Here I just want to say that they're incredibly important, and you should read more about them:
Ensuring that people will be treated respectfully shouldn't have been such a high bar, and we're seeing more and more communities recognize that this should be a basic right and expectation for anyone. But we can do more! It's extra important to be welcoming and friendly -- it's hard to imagine how you could overdo this. Hoodie writes a lot about their "rolling out the red carpet for newcomers", and they're a real model for us.
At the GSoC summit, in one session, during a discussion about friendly tone, one person noted that they were often a bit afraid to email the community list for their project because some people could be abrasive -- and they were actually one of the maintainer/leaders of the project! That isn't right -- and just think what a newcomer to the project must feel if that's the tone of community discussions.
We take every opportunity to thank people -- you can't be too nice! -- and one thing that really helps is: emoji. No kidding -- use them! Learn them! Hoodie does this really well (and so does their "first timer bot". I particularly like the "red balloon" one for expressing appreciation.
Get out there and make sure people know they're welcome! They're not clairvoyant -- you need to put some work into it!
I was going to write more about First Timers Only -- but there's so much to say about it that I'm going to save it for its own post.
Stay tuned, and remember: broadening participation in your project -- especially from groups who are often excluded -- will make your project stronger -- as well as for inclusivity for its own sake!
Follow related tags:
community outreach organizing wwg
Since early 2016, Public Lab has worked to make our open source software projects more welcoming and inclusive; to grow our software contributor community in diversity and size. This series collects some of those strategies and initiatives.
I've written a bit before about software outreach at Public Lab, but I'm interested in taking a broad overall look at the specific strategies we've developed, borrowed, and built on since around April 2016, when we started this initiative. This will be a series, and I'll be collecting resources on this page. (Above: GitHub profile icons of some of our contributors)
What's this series for? A set of experimental new strategies and patterns for outreach have emerged over the past 2-3 years which are rapidly changing the landscape for newcomer engagement. I'm excited because they hold promise for more welcoming (and technically superior!) project growth which also support more diverse and equitable communities.
We started out pretty "stuck," like many open source projects. From 2010-2016, we had only 16 contributors, total, 6 of whom were part of our Google Summer of Code programs (today we have over 100; we're still a small project, but growing fast). Our code was byzantine -- not because we were terrible coders, but because we were all busy, and we put new feature development before all else. Documentation, code cleanliness, install process, and even updating to the latest versions of our dependencies, all fell by the wayside as we made pragmatic decisions -- after all, I was the only consistent long-term developer, and I had something like 1/3 or 1/4 time devoted to this.
Our first foray into better onboarding was led by @justinmanley, one of our earliest and best GSoC contributors, who wrote this excellent post on how to reform and improve our code and outreach strategy. He did a huge amount to rework our code and systems to set us on the right track. With his help, we were ready for the next step...
Three events led to our completely changing our direction. First, SpinachCon (in 2016), hosted by Shauna Gordon-McKeon and Deb Nicholson, was a great -- and humbling -- opportunity to try to get our code to be installable by newcomers. We'd estimated 30-60 minutes, after much work (even worse, in the past our GSoC students had sometimes taken more than a day to get dependencies installed!). We found several people who couldn't install our code at all over a couple hours. We spent a lot of time after that to get the install process down below 15 minutes, with an install video and a standard install environment in a free VM service, Cloud9, and things have improved a huge amount since then. Without this initial step, none of the following strategies would have worked!
Second, in the spring of 2016 I attended a fantastic set of talks at BostonJS, which highlighted both the need for a wider conception of who contributes (including issue creators, commenters, etc) and, from Gregor Martynus of the Hoodie project, a whole new framework for thinking about building a contributor community. Click the link above to read more, and I'll be writing more about this soon, but I learned about the First-Timers-Only "movement", and really loved Gregor's attitude of "rolling out the red carpet for new contributors."
It really seemed to me that Hoodie might even be more interested in recruiting and welcoming newcomers than in actually writing code! I was game -- writing a first-timers-only issue usually takes longer than solving the issue yourself. It's aimed at inviting someone new into the project, using a small but substantive issue to be solved as your initial point of collaboration, and as the start of a conversation and a relationship.
But I was wrong about one thing; as I learned in the coming months as we adopted this approach, a focus on first-timers really is an investment in the long-term growth of a community, both in size and diversity. It's a commitment to supporting people to take their first steps, but it recognizes that it takes work to do so, and that this work is totally worth it.
And in my mind, it emphasizes equity and diversity as core values, not only because they match our personal values, but because we recognize that they are fundamental to improving our work and ourselves. At the recent Google Summer of Code Mentor Summit, one thing I really appreciated hearing from a few people was that diversity was important to the success and growth of their project -- to incorporate new ideas and perspectives, and to be shaped -- transformed -- by them. It's a relief to hear people acknowledge that they're not just looking for someone to type out some code, but some insight, some human qualities, that they can't achieve without diversity.
So, before we start diving into the actual strategies in subsequent posts, I'll say that one thing I've learned is that doing good software outreach means acknowledging that your own work must change. Not only in shifting from direct coding work to organizing and cultural work, but also in transforming your own coding style and even your project architecture (see Modularity, in an upcoming post) to make it easier for others to enter into your work and work with you. Good outreach will make you a better coder!
So thanks to everyone who's helped make this journey possible! I'm sure I'll be naming a lot of amazing people and projects as this series develops.
Up next: Friendliness, codes of conduct, and first-timers-only. Read more of this series on this page.
Also: do you have ideas or suggestions? We're seeking submissions for this series -- leave a comment or reach out to email@example.com!
Follow related tags:
web-development software outreach development
PublicLab.org and PL's other open source software is written, maintained, and dreamed up by community contributors, just like the techniques you see on PublicLab.org itself. While you can read about our software development projects at https://publiclab.org/wiki/developers, we know not everyone can jump into being a code contributor -- but we also know there are lots of other ways you can help out, even without taking on a coding task.
And with our recent work in recruiting first-timer code contributors generating exciting growth in our software contributor group, we're looking to define clear ways others can get involved in more of a supportive role.
I've looked at some of the ways people have played a valuable supportive (or mentoring) role -- like in our #gsoc program each summer -- and found that some don't take a huge amount of time or commitment, but can really make a difference. Here are a range of different types of involvement -- and keep in mind that many people do a combination of these:
(forgive my slightly corny naming system!)
The key here is that:
For example -- a Reviewer might do a lot of good just by checking in once a week to look over current pull requests, to see if they're missing anything, or make any obvious mistakes. This could be just a calendar reminder at the 15-20m you know you'll have free each Friday, say.
A Connector might check in once daily but only for 10 minutes, just to thank new people for their involvement, or to encourage them to open a pull request with their latest code if they get stuck (so others can check on their work and offer help).
A Community rep can offer their knowledge of how the PL community works (or doesn't!) without having to know anything about coding. They context to a bug or purpose for a feature request.
And so on. What's helpful for me, to match you with a role, is to know:
And keep in mind, this is a bit of an experiment! We'd love to better connect the PL community with our quickly-growing software contributor community, and this is just one way we're hoping to help.
Read on to learn more about each role, and volunteer in the comments if you'd like to get plugged in!
We'll be creating a "team" for each of these on GitHub (https://github.com/orgs/publiclab/teams); on there, you can notify each by typing
@publiclab/teamname in a comment. So please share your GitHub username with us in the comments to sign up!
(Illustrations/mascots sought for each these, haha)
@publiclab/solvers - Everyone gets stuck sometimes, and some people are just good at teasing out what went wrong. If you're particularly familiar with Ruby on Rails, or with a specific portion of our codebase, this could be you! No obligation to actually fix problems, but just to take a look and suggest a way forward, or a way to test assumptions and debug. We especially think writing tests is a great way to debug!
Availability: we'll ping you with a
@publiclab/solvers mention, or you can just look at recent pull requests; maybe once every week or two. Unsubscribe from project-wide notifications!
Variation: Pre-schedule time each week or month to check in on recent pull requests and review code for problems and style/structure. We've told contributors that reviews happen on Tuesdays and Fridays, so these are good times to check i, and look specifically at the "Files changed" tab of each PR to read through submitted code. You can:
For pre-scheduled solving, consider setting your project notifications (see below) to Ignore so that you don't get any emails, and just check in on your own schedule!
@publiclab/connectors - Often, it makes a big difference to newcomers to simply hear some encouragement and thanks, both in response to comments like "Can I try to fix this one?" and after a fix is completed, say, in a tweeted thank-you. To do this, look for newcomers in recently updated issues or subscribe to notifications for the whole project and look out for people asking to get involved. Even if you're just saying hello to people, and offering encouragement, that's a lot of help -- you don't need to code to do this!
If you can help people find documentation, tutorials, or Stack Overflow pages to guide them, that's really helpful too! We've also heard from some contributors that it's really helpful to have a real live person (via chat, for example) there to say hello, even if all they do is be friendly and point people at the right resources.
Availability: this is the most day-to-day kind of work -- it's helpful to reply quickly to newcomers with a welcoming hello -- though the message can be "saved reply" to make this quick (see below). And beware -- the project-wide notifications can be high-volume. You shouldn't have to actually spend lots of time with anyone in particular, but it'd be great if folks already on IRC could just keep an eye out for newcomers asking questions.
@publiclab/community-reps - It's difficult for newcomers to really understand the complexities and context for different site features, so we'd love to have some people just explain why features or systems are important, and how they're used. You don't need to know anything about software for this one -- it's just helpful to link to where on the site a feature would show up, and help new coders understand what their contribution will mean.
Availability: Once a week or so, we'll mention
@publiclab/community-reps to notify you of where you could be of assistance. Unsubscribe from project-wide notifications!
There are some important tools available to help you be a good code mentor or helper:
,@publiclab/@designers`) or just ask me (@jywarren on GitHub)
@name, when you'll get an email notice.
So, again, just leave a comment below with your GitHub name to join a team, and feel free to ask questions or make suggestions!
And finally, if you find it's too much, please don't hesitate to take a break or withdraw! We definitely don't want to overload people and we very much understand that everyone's got a lot going on in their lives!
Follow related tags:
software gsoc web coding