scaling your developer community via plugins · 2018 - 10 - 22 16 provide internal apis provide...
TRANSCRIPT
![Page 1: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/1.jpg)
Scaling Your DeveloperCommunity via Plugins
Greg SutcliffeForeman Community Lead
Red Hat
Mastodon: @[email protected]
![Page 2: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/2.jpg)
2018 - 10 - 22 2
You all know thisalready, right?
![Page 3: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/3.jpg)
2018 - 10 - 22 3
Kohsuke Kawaguchi (KK)Creator, Jenkins
➢ “How we made the Jenkins community”➢ FOSDEM 2013 keynote
https://www.slideshare.net/kohsuke/building-developer-community
![Page 4: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/4.jpg)
2018 - 10 - 22 4
“If you’ve said something 1,000 times, someone is still hearing it for the first time”
➢ political wisdom
![Page 5: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/5.jpg)
2018 - 10 - 22 5
But what do I know?● Contributor to TheForeman for 7 years● Core developer for 4 years● Community manager for 3 years ● Help out in numerous other communities
● But mainly...– I write a lot of plugins
![Page 6: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/6.jpg)
2018 - 10 - 22 6
What do we want?● More contributors!
– Project health– Diversity in decision making
● But developers don’t come from nowhere– Employment– Bug Bounties
● Takes money– Smaller projects can’t do that
![Page 7: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/7.jpg)
2018 - 10 - 22 7
User Developer Funnel
“You don’t see the lost opportunities” - KK
![Page 8: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/8.jpg)
2018 - 10 - 22 8
What do we want?● So we just need more users?
– Marketing– Conference presence– Meetups
● Money again– Still not going to work
![Page 9: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/9.jpg)
2018 - 10 - 22 9
So what can we do?● Focus on the funnel
– Make it “wider”● i.e. easier for people to move down
● Harness desire– Desire to customize– Desire to contribute back
![Page 10: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/10.jpg)
2018 - 10 - 22 10
So what can we do?
![Page 11: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/11.jpg)
2018 - 10 - 22 11
Motivation Recap● We want contributors● Users want to contribute● Growing either community directly
takes money we don’t have
Focus on barriers to entry
![Page 12: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/12.jpg)
2018 - 10 - 22 12
Plugins are a good fit● Assuming someone wants to code...● Help a new coder get used to a project
– Or even a new language● Hides a lot of (messy) internals● Avoids baggage
– Review process– CI / testing infrastructure– Release cadence
(these things are good, but intimidating)
![Page 13: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/13.jpg)
2018 - 10 - 22 13
Have a template● New coders will need as much
hand-holding as you can provide● Make it easy to start
– Get code in front of them● Preferably nicely abstracted using APIs
– Lots of examples● UI changes● Adding attributes● API extensions
DO
![Page 14: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/14.jpg)
2018 - 10 - 22 14
Make it hard to start● New coders want to develop on their sandbox
– Not a true `development setup`– Really a production install
● Quick to set up– Ideally a single `git clone` or similar
● Alternatively, write generators instead– Highly language/framework dependant
DON’T
![Page 15: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/15.jpg)
2018 - 10 - 22 15
Have good documentation● Again, hand-holding● Document what is possible
– You won’t get everything into the template● Code examples
– Lots of them– More than that
● Limitations– Avoid the `gray area`
DO
![Page 16: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/16.jpg)
2018 - 10 - 22 16
Provide internal APIs● Provide `extension points`
– Some languages will mandate this anyway– Others (e.g. Ruby) are more flexible
● See `alias_method_chain` for how this can be bad
● Plugin authors will find a way– Nasty hacks– Breaks at a later release of core– Plugin authors get upset– Users blame core, not the plugin
● Ideally, core uses the same APIs
DO
![Page 17: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/17.jpg)
2018 - 10 - 22 17
Break your promises (APIs)● Once you have APIs, honour them
– Don’t change them on a whim● Deprecation strategy
– Deprecated in X+1 (or more)– Removed in X+2
● Feedback loop to authors is key– If they don’t know about the deprecation
then they’ll have to fix it in a rush at release– More hackery
DON’T
![Page 18: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/18.jpg)
2018 - 10 - 22 18
Succession planning● What happens when an author moves on?● Code
– GitHub / GitLab / etc– Commit access? Forks?– Host it in your organisation
● Packaging– Release access
● RubyGems, PyPi, CPAN, etc
– Have a generic “community account”● Generic account that can be added to any plugin
THINK
![Page 19: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/19.jpg)
2018 - 10 - 22 19
Quality / Curation● How good is a plugin?● How can you ensure plugin quality?
– Should you care? Silos can work– Curation strategy
● Help authors out where possible– Allow them to join in the `baggage`
● at their own pace, as they gain confidence
– Hosting of bug tracker / code / docs / etc– Partitipaction in your CI system– Release cadence
THINK
![Page 20: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/20.jpg)
2018 - 10 - 22 20
Installation methods● How do users get the plugin?
– Not a development question, but important● This is hard to change later● Some options
– Tarball (PHP apps, usually, e.g. NextCloud)● Also common for desktop apps
– Git clone (often in containers, e.g. Discourse)– OS Packages (RPM/DEB/etc, e.g. Foreman)– ?
● Affects other options, such as discoverability
THINK
![Page 21: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/21.jpg)
2018 - 10 - 22 21
Keep communicating● Probably the hardest part● This is not a `once-and-done` task● Core will evolve
– Plugin authors won’t always notice the changes– Documentation needs to keep pace
● Especially all those examples
● Good communication tools helps– Users can get help from the right people– Devs can keep each other up to date– Come to my talk tomorrow about comms tooling!
DO
![Page 22: Scaling Your Developer Community via Plugins · 2018 - 10 - 22 16 Provide internal APIs Provide `extension points` – Some languages will mandate this anyway – Others (e.g. Ruby)](https://reader036.vdocuments.mx/reader036/viewer/2022071007/5fc4eec9ad73fd20c30c9755/html5/thumbnails/22.jpg)
Key Take-awaysFocus on the barriers
“You don’t see the lost opportunities” - KKGood communication channels to authors
Thanks!
Questions?
https://community.theforeman.org