Slide 1

Slide 1 text

making open source projects thrive … As narrated by @shazow (Andrey Petrov)

Slide 2

Slide 2 text

Bit about me... ● Open Sourcing things since ~2007 ● Mildly popular on Github… ● I like doing startuppy things ○ Y-Combinator ○ Google Acquihiree ○ Bootstrapping Briefmetrics and other things

Slide 3

Slide 3 text

https://twitter.com/shazow/status/572832261650952192 Open source lessons

Slide 4

Slide 4 text

First Why and how to get started with open source Second What to do once you already have a project and want it to thrive

Slide 5

Slide 5 text

What’s Open Source?

Slide 6

Slide 6 text

Why open source your code?

Slide 7

Slide 7 text

Why open source your code? ● Mechanism for reducing sunk cost

Slide 8

Slide 8 text

Why open source your code? ● Mechanism for reducing sunk cost ● Free replicated backups

Slide 9

Slide 9 text

Why open source your code? ● Mechanism for reducing sunk cost ● Free replicated backups ● Easy to link to and ask for help

Slide 10

Slide 10 text

Why open source your code? ● Mechanism for reducing sunk cost ● Free replicated backups ● Easy to link to and ask for help ● Even more emails from recruiters

Slide 11

Slide 11 text

https://twitter.com/shazow/status/482660776788774913

Slide 12

Slide 12 text

Why open source your code? ● Mechanism for reducing sunk cost ● Free replicated backups ● Easy to link to and ask for help ● Even more emails from recruiters ● That smug feeling of being better than other people

Slide 13

Slide 13 text

Bad reasons for not open sourcing ● “Somebody might see my terrible code!”

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Bad reasons for not open sourcing ● “Somebody might see my terrible code!” ● “It’s not ready yet.”

Slide 16

Slide 16 text

Bad reasons for not open sourcing ● “Somebody might see my terrible code!” ● “It’s not ready yet.” ● “It’s just one file.”

Slide 17

Slide 17 text

Bad reasons for not open sourcing ● “Somebody might see my terrible code!” ● “It’s not ready yet.” ● “It’s just one file.” ● “I don’t want to write docs for it.”

Slide 18

Slide 18 text

Bad reasons for not open sourcing “I don’t have enough time”

Slide 19

Slide 19 text

Quick survey! ● Who here uses Python?

Slide 20

Slide 20 text

Quick survey! ● Who here uses Python? ● … do you use urllib3?

Slide 21

Slide 21 text

Quick survey! ● Who here uses Python? ● … urllib3? ● … requests?

Slide 22

Slide 22 text

Quick survey! ● Who here uses Python? ● … urllib3? ● … requests? ● … pip?

Slide 23

Slide 23 text

TRICK QUESTION!! pip ⊃ requests ⊃ urllib3 Which brings me to...

Slide 24

Slide 24 text

What is success?

Slide 25

Slide 25 text

What is success? ● github.com/shazow/urllib3 ○ Published in 2008 ○ Used by millions today ○ 785 stars on Github ○ Slow, steady, calculated growth

Slide 26

Slide 26 text

https://twitter.com/shazow/status/492842650534293504

Slide 27

Slide 27 text

https://twitter.com/shazow/status/497483182854242304

Slide 28

Slide 28 text

What is success? ● github.com/shazow/ssh-chat ○ Fun weekend project a few months ago ○ Used by like 15 people today ○ 1560 stars on Github ○ Huge burst of early growth, but mostly abandoned

Slide 29

Slide 29 text

https://twitter.com/shazow/status/543852069417787392

Slide 30

Slide 30 text

What is success? ● github.com/shazow/dotfiles ○ Lovingly maintained for years ○ Used by me, often linked to others ○ 7 stars on Github

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

What is success? ● github.com/shazow/dotfiles ○ Lovingly maintained for years ○ Used by me, often linked to others ○ 7 stars on Github ○ Intrinsically motivated, never going away

Slide 33

Slide 33 text

Step 1. What do you really want? ● Users?

Slide 34

Slide 34 text

Step 1. What do you really want? ● Users? ● Contributors?

Slide 35

Slide 35 text

Step 1. What do you really want? ● Users? ● Contributors? ● Praise?

Slide 36

Slide 36 text

Step 1. What do you really want? ● Users? ● Contributors? ● Praise? ● Talk opportunities?

Slide 37

Slide 37 text

Step 1. What do you really want? ● Users? ● Contributors? ● Praise? ● Talk opportunities? ● Dolla dolla billz?

Slide 38

Slide 38 text

Step 1. What do you really want? ● Users? ● Contributors? ● Praise? ● Talk opportunities? ● Dolla dolla billz? ● More recruiter emails?

Slide 39

Slide 39 text

Step 2. Figure out what to build

Slide 40

Slide 40 text

Step 2. Figure out what to build ● Contribute to an existing project?

Slide 41

Slide 41 text

Step 2. Figure out what to build ● Contribute to an existing project? ○ A noble endeavour ○ Fix what you’re already using

Slide 42

Slide 42 text

Step 2. Figure out what to build ● Contribute to an existing project? ○ A noble endeavour ○ Fix what you’re already using ● Start a new project?

Slide 43

Slide 43 text

Step 2. Figure out what to build ● Contribute to an existing project? ○ A noble endeavour ○ Fix what you’re already using ● Start a new project? ○ More glory ○ Need to figure out what’s valuable...

Slide 44

Slide 44 text

https://twitter.com/shazow/status/567797705570836480

Slide 45

Slide 45 text

Problem: Upload billions of images to S3 in 2008. The story of urllib3

Slide 46

Slide 46 text

Problem: Upload billions of images to S3 in 2008. Problem: It’s going to take +3 weeks because there is no concurrency. The story of urllib3

Slide 47

Slide 47 text

Problem: It’s going to take +3 weeks because there is no concurrency. Solution: s3funnel, multithreaded S3 client The story of urllib3

Slide 48

Slide 48 text

Solution: s3funnel, multithreaded S3 client Problem: Managing threads is painful. >.< The story of urllib3

Slide 49

Slide 49 text

Solution: s3funnel, multithreaded S3 client Problem: Managing threads is painful. >.< Solution: workerpool (used in s3funnel) The story of urllib3

Slide 50

Slide 50 text

Solution: s3funnel, multithreaded S3 client Solution: workerpool (used in s3funnel) The story of urllib3

Slide 51

Slide 51 text

Solution: s3funnel, multithreaded S3 client Solution: workerpool (used in s3funnel) Problem: HTTP libraries don’t re-use connections, most solutions aren’t threadsafe, and no multipart (filepost) encoding. The story of urllib3

Slide 52

Slide 52 text

Problems all the way down

Slide 53

Slide 53 text

Solution: s3funnel, multithreaded S3 client Solution: workerpool (used in s3funnel) Solution: urllib3 (used in s3funnel) The story of urllib3

Slide 54

Slide 54 text

Solution space s3funnel Usecase: Upload things to S3

Slide 55

Slide 55 text

Solution space workerpool s3funnel Usecase: Manage your threads (not a super-common use case in Python-land)

Slide 56

Slide 56 text

Solution space workerpool s3funnel urllib3 Usecase: ALL http related things. APIs, crawling… and APIs!!

Slide 57

Slide 57 text

Problems seeking solutions urllib3 workerpool s3funnel

Slide 58

Slide 58 text

Problems seeking solutions urllib3 workerpool s3funnel

Slide 59

Slide 59 text

Maybe it was all timing? ● Python in 2008 was not as mature, easier to make a popular http library?

Slide 60

Slide 60 text

Maybe it was all timing? ● Python in 2008 was not as mature, easier to make a popular http library? ○ urllib3 didn’t get “big” until ~2012

Slide 61

Slide 61 text

Maybe it was all timing? ● Python in 2008 was not as mature, easier to make a popular http library? ○ urllib3 didn’t get “big” until ~2012 ● Find any 7-yearold language and write http clients for it?

Slide 62

Slide 62 text

Maybe it was all timing? ● Python in 2008 was not as mature, easier to make a popular http library? ○ urllib3 didn’t get “big” until ~2012 ● Find any 7-yearold language and write http clients for it? ○ Not that simple, Go launched with a comparatively great HTTP client right out of the gate.

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

Step 3. Minimum Viable OSS

Slide 65

Slide 65 text

Step 3. Minimum Viable OSS ● Open source it, put it on Github.

Slide 66

Slide 66 text

Step 3. Minimum Viable OSS ● Open source it, put it on Github. ● README

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

Step 3. Minimum Viable OSS ● Open source it, put it on Github. ● README ○ What is it? Can I use it? ● Really good README ○ What's the license? What can I do with it? How to contribute?

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

Step 3. Minimum Viable OSS ● Open source it, put it on Github. ● README ○ What is it? Can I use it? ● Really good README ○ What's the license? What can I do with it? How to contribute? ● Even better README

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

Making it thrive ● If you build it, that doesn’t mean they’ll come.

Slide 75

Slide 75 text

Making it thrive ● If you build it, that doesn’t mean they’ll come. ● github.com/shazow: ○ 44 source projects ○ 16 with more than 5 stars ○ Arguably 3 “popular” projects

Slide 76

Slide 76 text

ASK FOR HELP

Slide 77

Slide 77 text

ASK FOR HELP ● Get people to send pull requests

Slide 78

Slide 78 text

https://twitter.com/shazow/status/545027120116690944

Slide 79

Slide 79 text

ASK FOR HELP ● Get people to send pull requests ● Ask specific people to help review

Slide 80

Slide 80 text

ASK FOR HELP—AND ACCEPT IT!!! ● Get people to send pull requests ● Ask specific people to help review ● Accept pull requests very generously, especially in the beginning

Slide 81

Slide 81 text

ASK FOR HELP—AND ACCEPT IT!!! ● Get people to send pull requests ● Ask specific people to help review ● Accept pull requests very generously, especially in the beginning ● Get people involved!

Slide 82

Slide 82 text

https://twitter.com/shazow/status/545317310546735104

Slide 83

Slide 83 text

ASK FOR HELP—AND ACCEPT IT!!! ● Get people to send pull requests ● Ask specific people to help review ● Accept pull requests very generously, especially in the beginning ● Get people involved! ● Please be nice

Slide 84

Slide 84 text

Promote your project ● Write interesting blog posts (and promote them)

Slide 85

Slide 85 text

https://twitter.com/shazow/status/551120576010403840

Slide 86

Slide 86 text

… If only I could retweet my own tweets. >.>

Slide 87

Slide 87 text

https://twitter.com/shazow/status/551128846397751297

Slide 88

Slide 88 text

No content

Slide 89

Slide 89 text

Promote your project ● Write interesting blog posts ● Answer StackOverflow questions

Slide 90

Slide 90 text

No content

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

“If anyone is up for improving our documentation to this effect, that would be greatly appreciated. :) …”

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

“I would be +1 to adding something like this if you’re interested in making a PR. :) (Opened an issue here…)”

Slide 95

Slide 95 text

Promote your project ● Write interesting blog posts ● Answer StackOverflow questions ● Participate in discussions (HN, Reddit, etc)

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

Feed the non-trolls

Slide 98

Slide 98 text

… Would you rather click Lorem ipsum dolor sit amet (ipsum.org) 8 points by batman 3 hours ago | flag | 1 comments Lorem ipsum dolor sit amet (ipsum.org) 8 points by batman 3 hours ago | flag | 7 comments

Slide 99

Slide 99 text

Promote your project ● Write interesting blog posts ● Answer StackOverflow questions ● Participate in discussions (HN, Reddit, etc) ● Sell to other projects and establish partnerships.

Slide 100

Slide 100 text

https://twitter.com/shazow/status/524672011516145665

Slide 101

Slide 101 text

No content

Slide 102

Slide 102 text

So you’re swimming in pull requests, what’s next? Monetizing Open Source

Slide 103

Slide 103 text

So you’re swimming in pull requests, what’s next? Dolla dolla billz, ofc. Monetizing Open Source

Slide 104

Slide 104 text

“We want to be like Docker…”

Slide 105

Slide 105 text

“We want to be like Docker…” ● Why is Docker doing so well? ○ Very well funded. ○ Thousands of contributors helping for FREE!

Slide 106

Slide 106 text

“We want to be like Docker…” ● Why is Docker doing so well? ● Kinda like having your cake and eating it too (you’ll need two cakes).

Slide 107

Slide 107 text

“We want to be like Docker…” ● Why is Docker doing so well? ● Kinda like having your cake and eating it too (you’ll need two cakes). ● This is actually somewhat common...

Slide 108

Slide 108 text

https://twitter.com/shazow/status/567838766544515072

Slide 109

Slide 109 text

Corp’en Source business models ● Open Core (Docker)

Slide 110

Slide 110 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay)

Slide 111

Slide 111 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx)

Slide 112

Slide 112 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx) ● Advertising (Mozilla)

Slide 113

Slide 113 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx) ● Advertising (Mozilla) ● Charity & Grants (GnuPG)

Slide 114

Slide 114 text

No content

Slide 115

Slide 115 text

No content

Slide 116

Slide 116 text

No content

Slide 117

Slide 117 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx) ● Advertising (Mozilla) ● Charity & Grants (GnuPG)

Slide 118

Slide 118 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx) ● Advertising (Mozilla) ● Charity & Grants (GnuPG, urllib3?)

Slide 119

Slide 119 text

https://twitter.com/shazow/status/524982245744836608

Slide 120

Slide 120 text

No content

Slide 121

Slide 121 text

Moving forward: Monetizing 0$$

Slide 122

Slide 122 text

Moving forward: Monetizing 0$$

Slide 123

Slide 123 text

Results: HUGE SUCCESS* * ‘success’ is a lie.

Slide 124

Slide 124 text

Results: HUGE SUCCESS* ● One $5 donation via Donorbox (via Stripe!) ● One $5 Bitcoin donation via Coinbase. ● Gittip grew by 50% ($1/wk → $1.50/wk, lol) ● … Lessons were learned. * ‘success’ is a lie.

Slide 125

Slide 125 text

Funding Open Source ● Significant time chunks required for meaningful progress (at least half-day slots).

Slide 126

Slide 126 text

Funding Open Source ● Significant time chunks required for meaningful progress (at least half-day slots). ● Peer-funded is not practical for most cases.

Slide 127

Slide 127 text

Funding Open Source ● Significant time chunks required for meaningful progress (at least half-day slots). ● Peer-funded is not practical for most cases. ● Need to hack accounting for corporate funding.

Slide 128

Slide 128 text

Funding Open Source ● Significant time chunks required for meaningful progress (at least half-day slots). ● Peer-funded is not practical for most cases. ● Need to hack accounting for corporate funding. ● Fantasy: Government-funded open source.

Slide 129

Slide 129 text

Dear Stripe, Your contributions had a big impact on open source. I hope more companies will follow your lead. Thank you. Love, Andrey

Slide 130

Slide 130 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx) ● Advertising (Mozilla) ● Charity & Grants (GnuPG, urllib3?) ● … More???

Slide 131

Slide 131 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx) ● Advertising (Mozilla) ● Charity & Grants (GnuPG, urllib3?) ● Kickstarter (Neovim)

Slide 132

Slide 132 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx) ● Advertising (Mozilla) ● Charity & Grants (GnuPG, urllib3?) ● Kickstarter (Neovim) ● Speculation (Bitcoin)

Slide 133

Slide 133 text

Corp’en Source business models ● Open Core (Docker) ● Dogfooding (Gratipay) ● Consulting & Support (Nginx) ● Advertising (Mozilla) ● Charity & Grants (GnuPG) ● Kickstarter (Neovim) ● Speculation (Bitcoin)

Slide 134

Slide 134 text

Corp’en Source business models Open source first, make money later?

Slide 135

Slide 135 text

Making your OSS thrive

Slide 136

Slide 136 text

Making your OSS thrive ● Make an awesome README.

Slide 137

Slide 137 text

Great README ● What is it? Is it what I’m looking for?

Slide 138

Slide 138 text

Great README ● What is it? Is it what I’m looking for? ● Demo? What else can I do with it?

Slide 139

Slide 139 text

Great README ● What is it? Is it what I’m looking for? ● Demo? What else can I do with it? ● Link to more docs?

Slide 140

Slide 140 text

Great README ● What is it? Is it what I’m looking for? ● Demo? What else can I do with it? ● Link to more docs? ● License?

Slide 141

Slide 141 text

Great README ● What is it? Is it what I’m looking for? ● Demo? What else can I do with it? ● Link to more docs? ● License? ● How do I contribute? Run Tests?

Slide 142

Slide 142 text

Great README ● What is it? Is it what I’m looking for? ● Demo? What else can I do with it? ● Link to more docs? ● License? ● How do I contribute? Run Tests? ● Goals? Future milestones?

Slide 143

Slide 143 text

Making your OSS thrive ● Make an awesome README. ● Push to Github.

Slide 144

Slide 144 text

Making your OSS thrive ● Make an awesome README. ● Push to Github. ● Maybe even write some code!

Slide 145

Slide 145 text

Making your OSS thrive ● Make an awesome README. ● Push to Github. ● Maybe even write some code! (And push it) ● Get people involved, be generous and nice.

Slide 146

Slide 146 text

Get people involved ● Ask for help. ● Call specific people out. ● Please be nice. ● Accept generously.

Slide 147

Slide 147 text

Making your OSS thrive ● Make an awesome README. ● Push to Github. ● Maybe even write some code! (And push it) ● Get people involved, be generous and nice. ● Promote your work.

Slide 148

Slide 148 text

Promote your work ● Write interesting blog posts. ● Share it with your friends, multiple times. ● Find people with the problem you solved. ● Give talks about it. ● Find projects which benefit from your solution.

Slide 149

Slide 149 text

Making your OSS thrive ● Make an awesome README. ● Push to Github. ● Maybe even write some code! (And push it) ● Get people involved, be generous and nice. ● Promote your work. ● Do it a bunch of times.

Slide 150

Slide 150 text

You don’t need to wait for my next talk to read my tweets! twitter.com/shazow

Slide 151

Slide 151 text

You don’t need to wait for my next talk to read my tweets! twitter.com/shazow