Andrey Sitnik, Evil Martians
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/2583932/Iv5oal8.png)
How to Make a Popular
Open Source Project
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6028608/2019-04-15_23_29_19.png)
I am working at
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/10591486/evilmartians.png)
@sitnikcode
20 Years in Open Source
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6056421/1.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6056403/dscf1595.jpg)
since 2004
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6066818/sourceforge-logo_1.png)
Sharing Real Experience
Nano ID
Browserslist
PostCSS
Autoprefixer
130 M
180 M
300 M
75 M
Downloads per month
@sitnikcode
Chapter 1
Why should you create open source project?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6139527/8JKH7AiKUVQ.jpg)
“You must have OS to find a job”
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6070961/CvnhAwVWYAAKhtL.jpg_large.jpg)
HR
“Success Formula”
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6066928/cartman-south-park-twitter-ubjjpg-large_1024xx946-532-0-16.png)
Idea
GitHub
Popularity
Success
South Park, Go Fund Yourself episode
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6070993/10452843_1050006695019322_7766242695765799438_o.jpg)
Open Source dream is a lie
Popular project ≠ many followers
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11153652/Captura_desde_2024-02-27_22-08-32.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11174572/Captura_desde_2024-03-07_15-31-28.png)
@sitnikcode
Better ways to be popular
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072760/1_9PQogjP3vmuJ2DQlUFl7yQ.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072761/20190427195750.png)
Articles
Talks
GitHub project ≠ good resume
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072774/20190427202312.png)
1 month of work → few stars
vs
2 weeks → commit to Babel
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072777/20190427202635.png)
@sitnikcode
Better ways to be popular
Create app
Fix docs in popular projects
Use beta version → fix bugs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072781/Tic-Tac-Toe-game-on-React-js.gif)
App from slides.com/keziyahlewis/deck
The best reason: change the world
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072816/7LDLA.jpg)
My reason for Autoprefixer:
kill Compass
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4967883/5JqAjmf.png)
My reason for PostCSS:
CSS tools diversity
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072923/css-modules-logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072928/40150215.png)
Stylelint
cssnano
RTLCSS
@sitnikcode
My reason for Size Limit:
reduce JS lib size
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6072933/20190427232548.png)
Chapter 2
Success formula
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6139518/wMxhDuwi3Xo.jpg)
False formula
Good idea → Popular project
False
@sitnikcode
My open source projects
Nano ID
Browserslist
PostCSS
Autoprefixer
@sitnikcode
The real list of my projects
52 non-popular
and only 4 popular
The real success formula
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
@sitnikcode
Idea is not important
Idea
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
@sitnikcode
Useless projects can’t be promoted
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
@sitnikcode
Chapter 3
Base axioms
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6139533/9RrZIyKtiPU.jpg)
Axiom 1: Success formula
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
@sitnikcode
How we think people choose tools
Rational choice across all options
@sitnikcode
False
Rational choice across all options
How we think people choose tools
@sitnikcode
Axiom 2: How people choose tools
Irrational choice across popular options
@sitnikcode
How we think people read docs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075108/dec_2017_cozy_reads_hpl_resized.jpg)
How we think people read
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075108/dec_2017_cozy_reads_hpl_resized.jpg)
False
Axiom 3: How people read docs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075114/20190428204753.png)
Chapter 4
Preparations
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6139539/hFAtNTOxPE8.jpg)
Success formula has Popularity
on both sides
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
@sitnikcode
My mistake: only announce in Russian
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5124147/o7wb457.png)
@sitnikcode
My mistake: nobody to mention
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075242/20190428215708.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075244/20190428215746.png)
Advice 1: Create English account
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11174562/Captura_desde_2024-03-07_15-28-41.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11174564/Captura_desde_2024-03-07_15-28-50.png)
@sitnikcode
Success formula is based on luck
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
@sitnikcode
Advice 2: Be ready to try many times
Project popularity =
Your popularity
Promotion
Benefits for users
No Luck
+
+
+
Project popularity =
Your popularity
Promotion
Benefits for users
No Luck
+
+
+
Project popularity =
Your popularity
Promotion
Benefits for users
No Luck
+
+
+
Project popularity =
Your popularity
Promotion
Benefits for users
No Luck
+
+
+
Project popularity =
Your popularity
Promotion
Benefits for users
No Luck
+
+
+
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
Chapter 5
README.md
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6139536/6Az9cRoTN8Y.jpg)
README.md is your main entry point
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6085915/20190502105310.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6074257/smashing-logo.png)
How people read docs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075108/dec_2017_cozy_reads_hpl_resized.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075114/20190428204753.png)
What users need?
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
@sitnikcode
Advice 3: Start from the reason
to read docs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6082586/art-krasivye-kartinki-fantasy-art-morkardfc-3350174.jpeg)
What should be in first block
- Clear description
- How the product is useful for users
- The difference from other products
@sitnikcode
First block of PostCSS
PostCSS is a tool for transforming styles with JS plugins.
These plugins can lint your CSS, support variables and mixins, transpile future CSS syntax, inline images, and more.
PostCSS is used by industry leaders including Wikipedia, Twitter, Alibaba, and JetBrains. The Autoprefixer PostCSS plugin is one of the most popular CSS processors.
Clear description
How it could be useful
Why it is important
@sitnikcode
It’s OK to spend a week
on the first block
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6085891/20190502104138.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6085892/20190502104201.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6085895/20190502104217.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6085899/20190502104228.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6085900/20190502104240.png)
First block of Autoprefixer
PostCSS plugin to parse CSS and add vendor prefixes to CSS rules using values from Can I Use.
It is recommended by Google and used in Twitter and Alibaba.
Clear description
Why it is important
@sitnikcode
First block of Nano ID
A tiny, secure, URL-friendly, unique string ID generator for JS.
- Small. 116 bytes (minified and brotlied). No dependencies.
- Safe. It uses cryptographically strong random APIs and tests distribution of symbols.
- Fast. It’s 16% faster than UUID.
- Compact. It uses a larger alphabet than UUID (A-Za-z0-9_-).
Clear description
Difference from analogs
@sitnikcode
Bad example of first sentence
Svelte is cybernetically enhanced web apps
Svelte is JS framework with unique compiler
which generate smaller JS files
Not clear
@sitnikcode
How to make good description
You in the bar with friends.
”So, I created …”
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094677/O1EUy097psO4tuw9q5QAXGDV27j4gN.jpg)
And then cut it 2-4 times
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6095050/eddard-stark-02-1024x682.jpg)
What do you think people read
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094690/20190505090609.png)
@sitnikcode
What people actually read
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094690/20190505090609.png)
@sitnikcode
Progressive JPEG
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094705/1_e3DY3AsNIfbMzGb0wkeBJw.jpeg)
Advice 4: illustration or code example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094712/20190505091728.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094722/20190505092018.png)
Advice 5: More lists and bold
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11153717/Captura_desde_2024-02-27_22-35-14.png)
@sitnikcode
Important parts are highlighted
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11153717/Captura_desde_2024-02-27_22-35-14.png)
@sitnikcode
Advice 6: Use real proofs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094739/Webcomic_xkcd_-_Wikipedian_protester.png)
@sitnikcode
Size Limit to prove “small”
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094725/20190505092123.png)
@sitnikcode
Benchmarks to prove “fast”
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094742/20190505093044.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094725/20190505092123.png)
Code example to prove “good API”
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094743/20190505093219.png)
@sitnikcode
Advice 7: Step-by-step starting guide
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094752/20190505093509.png)
@sitnikcode
Your users
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075114/20190428204753.png)
@sitnikcode
Be very specific
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094754/20190505093623.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094755/20190505093709.png)
@sitnikcode
Help with choice
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094754/20190505093623.png)
@sitnikcode
Sections for specific use cases
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6102206/20190507104557.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6102207/20190507104610.png)
@sitnikcode
Test your guide on new project
npm init
…
everything works
@sitnikcode
Chapter 6
Slow growing
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6139553/c438mMGBqKg.jpg)
Wrong way to promote the project
Post 1 tweet
Got 4 retweets
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/3582556/14317911768789.jpg)
@sitnikcode
Grow by small iterations
@sitnikcode
Each iteration contains
- Action (feature, tweet, article, etc)
- Feedback
- Fixing the project according to feedback
@sitnikcode
Next iteration is a little bigger
- Bigger action
- More feedback
- More things to fix
@sitnikcode
1st step: explain the idea to friends
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094677/O1EUy097psO4tuw9q5QAXGDV27j4gN.jpg)
And find the way to describe the project
2nd step: convince colleagues to try
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6095843/d0e1c330f7c345cb60aacd1a553b2f6e.jpg)
Fix issues, DX,
and install docs
3rd step: social networks
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6095868/109099-rosagolijanD22130AC-585F-5A6C-8367-998F36BCFFC8.today-inline-large.jpg)
And find the best way to describe projects
@sitnikcode
And tweet again each big feature
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6095880/twitter.jpg)
@sitnikcode
Good tweet
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6095872/20190505191355.png)
Code example or screenshot
Project description
New feature which was added
@sitnikcode
4th step: reddit and hacker news
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6095898/iUrYEOpJ_400x400.png)
And fix compatibility issues
@sitnikcode
5th step: write English article
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6103173/dev_logo.jpg)
dev.to
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6074257/smashing-logo.png)
smashingmagazine.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6103198/akqRGyta_400x400.jpg)
css-tricks.com
@sitnikcode
6th step: send PRs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6116077/20190510130105.png)
Use success in next iterations
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6116088/20190510130421.png)
@sitnikcode
Don’t stop making iterations
Don’t spam: be regular
every 2 weeks or every month
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6103346/golden_honey_spam_large.jpg)
@sitnikcode
Why do you need multiple posts?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075114/20190428204753.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6103517/1_ftG_XQPkXrPKCO0Wf-d6qg.gif)
Why do you need many iterations?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6103487/e6fe683da9cf5a1ef6dfdf7d5bc623acc6ce2a7500c54fd66204d7d0644180ef.jpg)
Feedback will help to fix it
@sitnikcode
How people choose
Irrational choice across popular options
@sitnikcode
How long will they support the project?
How many resources are behind the project?
Regular posts answer
to these questions
Irrational choice across popular options
How long will they support the project?
How many resources are behind the project?
@sitnikcode
Chapter 7
Working with community
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6139545/v66OWL64R70.jpg)
You did everything right
Explain benefits in docs
Good step-by-step intructions
Regular posts, articles, talks
@sitnikcode
And got issues from users
@sitnikcode
The circle of guilt
Many issues without answer
Blaming yourself for being bad maintaner
Depression and lack of productivity
Even more issues without answer
@sitnikcode
You don’t need to write code
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6107804/20190508181144.png)
@sitnikcode
15 min in the morning
to answer new issues
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6107902/ST_STIR_A.gif)
It’s OK to ask people to wait
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6107975/20190508184350.png)
Just 1 response could make an ally
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6107980/20190508184455.png)
Avoid this issues in future
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4059039/f129011be0142f4d0da04b8ee530b172.jpg)
@sitnikcode
Add warning
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6108013/20190508185116.png)
Stopped issues about using PostCSS for Sass sources
Add note to docs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6108264/20190508192829.png)
Ask issue authors to change docs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6108275/20190508192930.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6108279/20190508193026.png)
How to deal with negative feedback?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11156644/Captura_desde_2024-02-28_22-31-40.png)
@sitnikcode
There is no ideal answer
Start asking questions
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11156672/Captura_desde_2024-02-28_23-06-06.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11156674/Captura_desde_2024-02-28_23-08-25.png)
Sometimes, people just need to talk
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6109342/08e47afad67d0cd276f9789fee9139a1.png)
They can become your fan
after a talk
Competitor means freedom
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11156681/Captura_desde_2024-02-28_23-12-59.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11156682/Captura_desde_2024-02-28_23-13-13.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/11156685/maxresdefault.jpg)
Chapter 8
Resume
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6139560/EgcmD2usGBA.jpg)
Success formula
Project popularity =
Your popularity
Promotion
Benefits for users
Luck
+
+
+
@sitnikcode
How people choose
Irrational choice across popular options
@sitnikcode
How people read
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6075114/20190428204753.png)
@sitnikcode
README.md is critical
- Clear description
- How the product is useful for users
- The difference from other products
- Easy step-by-step instruction
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6094752/20190505093509.png)
@sitnikcode
Regular posts, articles, talks
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6103296/ECqZTbGU_400x400.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6095898/iUrYEOpJ_400x400.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6103173/dev_logo.jpg)
@sitnikcode
Thanks
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/10591486/evilmartians.png)