Your SlideShare is downloading. ×
From 1 to 100
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

From 1 to 100

207
views

Published on

Presentation at Monkeyspace

Presentation at Monkeyspace

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
207
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • 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.
  • And since it already looks like BASIC
  • Transcript

    • 1. From 1 to 100 Building Your Project Community
    • 2. What we’ll cover • The Funnel • Design for Division of Labor • Being Welcoming • Licensing (if needed and time suffices)
    • 3. THE FUNNEL
    • 4. 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.
    • 5. 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.
    • 6. Visitor to User Funnel Users Visitor Visitor Visitor
    • 7. Turn Visitors Into Users • Optimize homepage for new users, not development.
    • 8. Example: Jenkins
    • 9. Turn Visitors Into Users • Make it easy to find the appropriate downloads
    • 10. Simplify Downloading Example: OpenLP
    • 11. Turn Visitors Into Users • Make it easy to find the appropriate downloads – Pro tip: Put on NuGet Gallery, Microsoft WPI, Xamarin Component Store, etc.
    • 12. Turn Visitors Into Users • Simplify setup – If it’s three steps, make it two. If it’s two, make it one.
    • 13. User to Contributor Funnel Contributors User User User
    • 14. Turn Users into Contributors • Recruit them to do user support, particularly new users – New users often have similar issues
    • 15. Turn Users into Contributors • Mark bugs for new contributors – Should not take more than two hours TOTAL
    • 16. Example: Mozilla
    • 17. Turn Users into Contributors • Tag bugs with a specific mentor for new contributor
    • 18. Example: Mozilla
    • 19. Example: Mozilla
    • 20. Turn Users into Contributors • Simplify (developer) Setup – If it’s three steps make it two, if it’s two steps make it one.
    • 21. 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
    • 22. 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
    • 23. Turn Users into Contributors • Design for division of labor
    • 24. DESIGN FOR DIVISION OF LABOR
    • 25. Two types of productivity • Individual productivity • Community productivity
    • 26. Individual vs. community productivity • Tools for one don’t necessarily help with the other
    • 27. 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?
    • 28. The Problem of Explaining Code • There’s only one of you! • People will have the same questions.
    • 29. You’re a Finite Resource public Answer GetAnswer (Question q) { lock (you) { return you.Answer(q); } }
    • 30. 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
    • 31. 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
    • 32. 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
    • 33. 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
    • 34. Example: Orchard • Uses dependency injection through Autofac IoC
    • 35. Example: Orchard 1. Create an interface inheriting IDependency
    • 36. Example: Orchard 2. Implement your interface, using other IDependency-inheriting interfaces
    • 37. Example: Orchard • Other interfaces: – ISingletonDependency – IUnitOfWorkDependency – ITransientDependency
    • 38. “If core can do something plugins can’t, that’s a bug.” - Kohsuke Kawaguchi (creator of Jenkins)
    • 39. Example: Orchard
    • 40. 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
    • 41. BEING WELCOMING
    • 42. BEING WELCOMING “Don’t Be An Asshole”
    • 43. Don’t be an asshole • How many positive interactions does it take to offset a negative one?
    • 44. • It takes 5 positive interactions just to offset 1 negative interaction
    • 45. • 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.
    • 46. So how many people really quit? • 25% of targets quit • 20% of witnesses quit
    • 47. What isn’t an asshole? • Someone who respectfully disagrees on technical changes
    • 48. 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)
    • 49. Ways You (and Your Community) Can Be Welcoming • Be positive towards people in public – If you MUST be negative, do that in private.
    • 50. Ways You (and Your Community) Can Be Welcoming • Be positive towards people in public • Have a way of reporting assholes
    • 51. 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.
    • 52. 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
    • 53. 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
    • 54. LICENSING
    • 55. 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…
    • 56. 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.
    • 57. 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
    • 58. You need a license* *Public Domain will suffice as well
    • 59. Questions? @EricOutercurve eschultz@outercurve.org
    • 60. This work is licensed under a Creative Commons Attribution 3.0 Unported License.

    ×