5. Categories
• Defines levels of community involvement
• People can move from one category to
another, including in reverse.
• Typical Categories are:
– Users
– Contributors
– Committers
– LeadersPMC membersetc.
6. Categories
• Defines levels of community involvement
• People can move from one category to another,
including in reverse.
• Typical Categories are:
– VisitorsPotential Members!
– Users
– Contributors
– Committers
– LeadersPMC membersetc.
12. Turn Visitors Into Users
• Make it easy to find the appropriate
downloads
– Pro tip: Put on NuGet Gallery, Microsoft WPI,
Xamarin Component Store, etc.
13. Turn Visitors Into Users
• Simplify setup
– If it’s three steps, make it two. If it’s two, make it
one.
21. Turn Users into Contributors
• Simplify (developer) Setup
– If it’s three steps make it two, if it’s two steps
make it one.
22. Example: Outercurve’s Signing Service
• “ServiceStack based web service and client
tools for performing remote Authenticode and
.NET Assembly Strong Name signing”
• A single Powershell command or MSBuild
tasks can sign PE files, Powershell scripts,
MSIs, or OPC files
23. Example: Outercurve’s Signing Service
• Source is designed for hacking by default, NOT
production
• ASP.net Signing Service
– Defaults to a sample signing certificate
– Defaults to using the Azure Storage Emulator
• Cmdlet DLL
– Has a debug command set in .csproj
– Debug command starts new Powershell session,
removes installed Cmdlet version and imports the
debug module
28. Does LINQ help community productivity that
much?
var max = list.Select(i =>
i.SomeProperty).GroupBy(i=>
_service.Call(i.MethodCall())).Max(i =>
i.AnotherProperty)
• Side effects of Select? SomeProperty? Call?
MethodCall? AnotherProperty/?
• Side effects to any side effects?
• How does this line fit into the other 1000?
10000? 100000?
29. The Problem of Explaining Code
• There’s only one of you!
• People will have the same questions.
30. You’re a Finite Resource
public Answer GetAnswer (Question q)
{
lock (you)
{
return you.Answer(q);
}
}
31. Collaboration is hard!
• Multi-lingual communication is hard
• Working in different time zones is hard
• Not everyone looks at code or even life in the
same way
• People in OSS projects are often faceless
32. Modularity
• Don’t design for a few developers.
– How most software development on teams occurs
• Design for a radically large number of
developers
– 50? 100? 500? More?
• Very, very clearly document your interfaces
• Require only the minimal amount of
knowledge to complete a development task
33. Example: NuGet
• NuGet has 14,233 packages (7/15)
– Almost all created by non-NuGet team members
• Why so successful?
– Package creators don’t need to know how NuGet
is constructed
• Simple, straightforward interface that hides
the details
34. Plugins
• “Modularity taken to it’s logical
consequences”
• True extensibility doesn’t begin with external
interface!
• Extensibility starts at root of the core
• If core can do it, plugins can do it
41. GREAT Way to Recruit Long Term Contributors
• New contributors can accomplish tasks with
minimal time and effort
• Contributors are now invested
• More likely to look into other parts of the
system
44. Don’t be an asshole
• How many positive interactions does it take to
offset a negative one?
45.
46.
47.
48.
49.
50. • It takes 5 positive interactions just to offset 1
negative interaction
51. • It takes 5 positive interactions just to offset 1
negative interaction
• In workplace, 66% of targets of assholes had
decreased performance by and 38% dropped
their quality.
52. So how many people really quit?
• 25% of targets quit
• 20% of witnesses quit
53. What isn’t an asshole?
• Someone who respectfully disagrees on
technical changes
54. What is an asshole? A simple test
“After talking to the asshole, does the target feel
oppressed, humiliated, de-energized, or
belittled?”
- Donnie Berkholz (Gentoo Linux leader)
55. Ways You (and Your Community) Can Be
Welcoming
• Be positive towards people in public
– If you MUST be negative, do that in private.
56. Ways You (and Your Community) Can Be
Welcoming
• Be positive towards people in public
• Have a way of reporting assholes
57. Ways You (and Your Community) Can Be
Welcoming
• Be positive towards people in public
• Have a way of reporting assholes
• Believe people when they say something hurts
them AND fix the problem.
58. Ways You (and Your Community) Can Be
Welcoming
• Be positive towards people in public
• Have a way of reporting assholes
• Believe people when they say something hurts
them AND fix the problem.
• Be flexible on technical and coding standards
at first
59. Ways You (and Your Community) Can Be
Welcoming
• Be positive towards people in public
• Have a way of reporting assholes
• Believe people when they say something hurts
them AND fix the problem
• Be flexible on technical and coding standards
at first
• Create a Code of Conduct
61. You need a license*
• If Companies can’t use your code without a
license on it And Full time employees working
on your project is really good
• Then…
62. You need a license*
• If Companies can’t use your code without a
license on it And Full time employees working
on your project is really good
• Then you need a license on your code.
63. You need a license*
• If Companies can’t use your code without a
license on it And Full time employees working
on your project is really good
• Then you need a license on your code.
• EndIf
64. You need a license*
*Public Domain will suffice as well
66. This work is licensed under a Creative Commons Attribution 3.0 Unported License.
Notas do Editor
Welcome peopleIf you have any questions just raise your hand or shout it outIntroduce myself and explain what I doI am not an expert, I don’t claim to be an expert.
We provide governance and licensing support to just under 30 projects.
Typical categorization of open source communitiesDescribe what each category doesThere’s one group that’s missing
I’m going to go through converting Visitors to Users and from Users to Contributors.When you have regular contributors, committers often just naturally rise to the top
Kohsuke Kawaguchi of Jenkins refers to this as the funnelI’ve heard estimates ranging from one out of every 100 visitors become users to one out of every five. I’m not sure there’s an answer but suffice it to say, most visitors do not become users.
The previous Jenkins page was a pretty good example of making appropriate downloads easy to find but here’s another.
Download button is VERY prominent.Defaults to proper platformPlatforms are provided by icon, not name
Setup needs to be
Two hours is about the max people will spend to try to get something to work in their free time.If you go above that, many people will give up and do something else.
Or there’s a simplified version
Now developer set up includes things like getting the code, setting up your development environment, etc.
It can sign anything that CryptoAPI can sign and OPC files
What the heck is design for division of labor?I’m going to go off and describe this in more detail because I think it’s one of the most profound insights about open source development
Two types of productivity you can measure in open source software development
Yes, programming language features and tools can help individual productivity productivity but they do they scale?
(Almost) EVERY line requires domain knowledge that a new user doesn’t have. You’re more productive but
You’re a finite resourceThe experts are finite resources
This slide is almost directly from Kohsuke Kawaguchi who created Jenkins but really, he described it better than I ever couldIf you look at all the problems mentioned, they relate back to the problem of how to be more productiveIt’s the Mythical Man Month all over again
“But Eric, that’s just basic software design” No, it’s not really. We design systems for a limited number of developers or a few teams.We design them for You design
Now, you’re probably thinking “Eric, NuGet packages are mostly just inputs, that’s different from working together on code for an open source project.”
This is almost directly from Kohsuke Kawaguchi’s slides at OuterConf but he summarized it really well.
ISingletonDependencyservices that are instantiated only once per program run (more or less)IUnitOfWorkDependency prevents its use in an ISingletonDependencyITransientDependencyservices that are instantiated per usage.
Remember how we talked about
On the first point, people can jump in and with a limited amount of knowledge of the entire system, add a feature to solve their particular problem.
Or in franker terms:
Much of this comes from a presentation at OuterConf by DonnieBerkholz, a leader in the Gentoo Linux community and a researcher on open source software
You might be thinking “Eric, so we get a little snarky once and a while and sometimes people feel hurt by it, so what?”
Think about what this means for your project. Think about the fact that your quality will go down. Think about the fact that you’ll fewer contributions. But let’s get back to the topic of the day: growing your project community.
First part: these are the targets of the assholes quit. That’s 25%. But that’s not all the damage caused by the assholes.Second part: These are the witnesses of others being targeted. That’s 20%.Note that this are employees, not volunteers. They have a financial reason to NOT leave. It’s very likely that some of the 55% who stayed wanted to quit but couldn’t financially. Assholes will have a much larger effect on volunteers to open source projects
Conflict is not bad
Notice: it’s how the target feels, not what you intended.Your intent MAY mitigate how negatively it effects the target but it might not.Even if it does, it probably won’t change it into a neutral or positive experience for them.
N
This is an interesting topic, some project do this differently. I’ve heard of projects having people file bug reports on assholes. I’m not sure that’s a great idea because it violates my first point up there.Either way have someone responding and dealing with the problem.NEEDS to be someone who cares about issues of inclusion and diversity. It’s best if this person is from a traditionally marginalized group.
Don’t blame the victim
This is really important. Most pull-requests are pretty small for first time contributors. People need immediate gratification.Accept them as is and fix them yourself, most of them are pretty minor. After praising them, then you can gently encourage them to look at your coding and technical standards
A lot of larger communities are creating codes of conduct. It makes sense that if you want to address assholes, you need to clarify what is and is not an asshole.It’s often best that this code not be a list of prohibited behaviorsA lot of times there are a list of non-exclusively protected groups and then a list of positive expectations: such as treating people with respect and so forth
I am not a lawyer, this is not legal advice, talk to a lawyer about which license to pick.