rags to open source - allthingsopen, raleigh, nc 2014
DESCRIPTION
How did a small, completely self-funded team build a web framework that became more popular than comparable tools with million-dollar budgets? By welcoming the outsiders. Mike will recount how Sails.js grew from an internal tool to one of the most popular frameworks for Node.js, without forgetting its roots. Javascript is quickly becoming more than just the lingua franca of the web– it’s rapidly growing in popularity on servers, mobile devices, and embedded systems. In many ways, “Javascript is the new Java.” More and more backend developers are becoming familiar with tools like Bower, Yeoman and Grunt, and Angular has empowered web developers to create single page apps as part of their everyday workflow. As the industry standardizes around Javascript, it’s not only important to take advantage of new tools; we must also make sure these new tools and methodologies are accessible and understandable to developers from more traditional backgrounds. In this talk, Mike will reflect on the experiences he’s had building and managing an open-source Node.js framework, Sails.js. He’ll discuss the success we’ve had attracting interlingual developers to Sails, and share some lessons and difficulties we’ve encountered migrating a new generation of developers from PHP, Java, .NET and Rails to Node.js. He will share examples from both sides of the spectrum, both community-related and technical, including: How to encourage (not dissipate) the growth of subcultures within an open-source community How to reconcile different levels of familiarity and preference for different collaboration tools (Github, IRC, Google Groups, etc) How to assimilate the technical heritages from past frameworks (i.e. syntax, nomenclature, project structure) How to meet expectations around reference documentation, and direct community contribution towards guides and tutorials Mike is an engaging speaker with a knack for dynamic Q&A. He is passionate about the subject matter and can adapt the talk to any time frame. http://allthingsopen.org/talks/rags-to-open-source-the-story-of-sails-js/ http://allthingsopen.org/speakers/mike-mcneil/TRANSCRIPT
![Page 1: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/1.jpg)
from rags to open-source
Raleigh, North Carolina 2014
![Page 3: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/3.jpg)
bdfl ofthe leading open-source MVC framework for Node.js
![Page 4: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/4.jpg)
the leading open-source MVC framework for Node.js
![Page 5: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/5.jpg)
at least pageviews since 2013830,000
GitHub stars 8,030
over downloads / day1,500
![Page 6: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/6.jpg)
in funding$0
![Page 7: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/7.jpg)
![Page 8: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/8.jpg)
est. feb 2012
![Page 9: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/9.jpg)
![Page 10: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/10.jpg)
(us)
(customer)
(Javascript app)
![Page 11: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/11.jpg)
love at first sightcirca 2011
Node.js...
![Page 12: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/12.jpg)
“We’re doing I/O completely wrong.”
![Page 13: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/13.jpg)
<— “just look at the Unterschied!”
“Not acceptable!”
![Page 14: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/14.jpg)
“Threads should be used by experts only.”
“Concurrency should be easy.”
![Page 15: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/15.jpg)
How is that possible?
(copy the browser)
![Page 16: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/16.jpg)
// synchronous!console.log(‘hi’)
// asynchronous!setTimeout(function (){! console.log(‘hi’);!}, 240000000);
vs.
incredible
![Page 17: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/17.jpg)
could we use
…for everything?
I wondered…
![Page 18: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/18.jpg)
so…
![Page 19: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/19.jpg)
![Page 20: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/20.jpg)
You don't want to be writing all these system calls.
You need something that gives you… an ORM abstraction, or
something.
![Page 21: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/21.jpg)
so Sails.js was born
![Page 22: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/22.jpg)
![Page 23: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/23.jpg)
![Page 24: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/24.jpg)
Sails is an MVC framework.
![Page 25: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/25.jpg)
Sails is an MVC framework.
![Page 26: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/26.jpg)
Sails is an MVC framework.
![Page 27: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/27.jpg)
Sails is an MVC framework.
![Page 28: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/28.jpg)
Sails is an MVC framework.
![Page 29: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/29.jpg)
Sails is an MVC framework.
![Page 30: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/30.jpg)
Sails is an MVC framework.
![Page 31: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/31.jpg)
Sails is an MVC framework.
![Page 32: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/32.jpg)
first version (late 2011)
![Page 33: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/33.jpg)
December 2012
![Page 34: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/34.jpg)
![Page 35: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/35.jpg)
>=20 other community adapters custom app-specific adapters
![Page 36: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/36.jpg)
January 2013
first halfway-decent docs
http://web.archive.org/web/20130514080123/http://balderdashy.github.io/sails/
![Page 37: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/37.jpg)
posted screencast in early 2013
![Page 38: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/38.jpg)
…woke up to 1000 views
![Page 39: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/39.jpg)
reddit — Feb 2013hacker news — Mar 2013and again two months later
![Page 40: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/40.jpg)
![Page 42: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/42.jpg)
issues pull requests
questions
![Page 43: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/43.jpg)
![Page 44: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/44.jpg)
![Page 45: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/45.jpg)
![Page 46: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/46.jpg)
????
![Page 47: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/47.jpg)
???????????
![Page 48: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/48.jpg)
v0.9 introduced a new streamlined asset pipeline
![Page 49: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/49.jpg)
asset pipeline????
“what about gulp?!”
“so thirsty…”
asset pipeline????????!!!!
asset pipeline????????!!!!
asset pipeline????????!!!!
asset pipeline????????!!!!
asset pipeline????????!!!!
![Page 50: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/50.jpg)
so v0.10 introduced generators.
![Page 51: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/51.jpg)
feature requests are the hydra
![Page 52: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/52.jpg)
they will never stop.
![Page 53: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/53.jpg)
they will never stop.
ever.
![Page 54: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/54.jpg)
moral of the story
![Page 55: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/55.jpg)
only write code you actually need
if someone else actually needs something, they’ll write a pull request
only merge new code if someone actually needs you to merge it (i.e. there’s no other way, via a
plugin or something)
![Page 56: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/56.jpg)
![Page 57: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/57.jpg)
![Page 58: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/58.jpg)
Supporting the Community
![Page 59: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/59.jpg)
Tools
Metrics
Advice
![Page 60: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/60.jpg)
#sails on freenode (IRC)
issues
groups
![Page 61: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/61.jpg)
Tools
Metrics
Advice
![Page 62: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/62.jpg)
• Github stars
• NPM downloads / day
• Google group membership
• IRC channel activity
• Number of tagged StackOverflow questions(and your answer ratio)
![Page 63: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/63.jpg)
Tools
Metrics
Advice
![Page 64: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/64.jpg)
inline jsdoc comments are not enough
write docs in markdown
compile to HTML
![Page 65: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/65.jpg)
don’t repeat yourself
DRY
![Page 66: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/66.jpg)
don’t repeat ourselves
DRO
the goal of open source
![Page 67: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/67.jpg)
make an IRC channel start a Google group post a YouTube video
so
![Page 68: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/68.jpg)
support !== marketing
but remember
![Page 69: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/69.jpg)
support !== marketing
( )
but remember
![Page 70: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/70.jpg)
far more front-end developers
∃
than back-end developers
![Page 71: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/71.jpg)
far more front-end developers
∃
than back-end developers
eventually everyday backend development
will be commoditized
![Page 72: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/72.jpg)
Questions?
![Page 73: Rags to Open Source - AllThingsOpen, Raleigh, NC 2014](https://reader034.vdocument.in/reader034/viewer/2022051609/547e878c5906b5c9718b46ba/html5/thumbnails/73.jpg)
from rags to open-source
@mikermcneil