Skip to content

Instantly share code, notes, and snippets.

@mikeal
Last active December 29, 2015 22:39
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikeal/7738226 to your computer and use it in GitHub Desktop.
Save mikeal/7738226 to your computer and use it in GitHub Desktop.
The road ahead.

When Ryan was the only committer and most of the regular node contributors were in the bay area we'd assemble 8 or so people together when we wanted to deal with a new challenge to node. At first we went to the Old Oakland office of CouchOne where I worked but then we upgraded to Matt Ranney's much nicer San Francisco Voxer office.

We scaled out of that pretty quickly, the contributors and stake holders spreading across the world made impromptu local meetings intangible. At first I put together a closed node core meeting before the first NodeConf but it didn't go as well as we'd hoped. Then I ran an unconference, NodeConf Summer Camp, at Walker Creek Ranch, and that served as a much better environment to hammer out the details of streams and seeds of ideas like domains.

Today there are a handful of regular committers to core. They do a regular conference call and contribute consistently. There is a loose structure that appears to be working for them. I decided to end the unconferences and bring NodeConf proper to Walker Creek Ranch instead.

Node's biggest challenge is its growth. This kind of sustained explosive growth in users and ecosystem is somewhat unprecedented. The work we've done to create a positive and inclusive community could be easily lost in that growth.

Conservative numbers have node's growth at over 100% a year. That means that if every current node user doesn't impact, on average, one new user to propagate the culture we've worked to create we will start to lose it. We have to change the way we organize, the way we teach, and the way we interact as a community so that we might handle such dramatic growth.

Node core's growth, in terms of contributors, has not shared the same growth curve as its users or ecosystem. Node core is stabilizing, it's tuning performance, all great things for the project and the community but also things that make contributions by newcomers more and more difficult. Those that work actively on core already do a lot and should not be asked to take on any additional burden.

The majority of users and value being created are in the ecosystem. The ecosystem is not owned by a company. Joyent's ownership of node.js has not become a critical issue for our community yet and it is hard to imagine it will in the future considering that the majority of growth is happening elsewhere.

The ecosystem is owned by all of us. Every package is owned by the creators. We don't have ecosystem ownership issues. Our biggest challenges are not going to be fixed by a non-profit or foundation taking ownership of core being that the committers are the ones that would need to handle the burden of such an institution.

We, as a community, have some incredibly hard challenges ahead and creating institutional infrastructure isn't going to fix them. The growth is far too great to try and control or bring under the the management of any process. The ecosystem expands so quickly because it lacks institutional barriers to growth and adoption. What we have is a community and a culture we need to scale, that can't be solved by a single project or a single institution but by all of the community members and leaders working hard to promote the kind of place we all want to be.

@joemccann
Copy link

slow clap

@hackygolucky
Copy link

"being that the committers are the ones that would need to handle the burden of such an institution."
Care to elaborate? I don't quite understand why this would need to be owned by the core maintainers, who are obviously EXTREMELY important to Node.js but only a tiny percentage of the community. You guys work your butts off, seriously.

If it's already been noted that core committing is diffficult and is NOT scaling as node scales, why does it seem reasonable that the core maintainers need to bear all burden? I think I'm conflating core with community.

I think it is finding a place for those in the community not -quite- at a place where we feel comfortable(or quite frankly, have the chops) to commit to core that I worry for here.

"We have to change the way we organize, the way we teach, and the way we interact as a community so that we might handle such dramatic growth."

Is there a central place for us to talk or interact about how we can do this moving forward? As a local organizer, it would be wonderful to be more tied in to the direction you're discussing. There are many user groups I have gotten to know through travel that have expressed a need for help with resources, speakers, and guidance. See cjs-meatspace and knode . Knode was started right after CascadiaJS after a number of Node organizers at the conference were talking about their struggles with local groups and how they'd like to share resources. If by creating a portal that allows for user groups to help support each other is a means you are suggesting, awesome! We are always looking for input and help. We love Node.js and hope we evangelize the code and its community well.

I am no expert. I watch and listen because I care and want to learn--to be better. I have only been in the Node community for a year and what lies ahead is only brighter. How can I help?

@SaraJo
Copy link

SaraJo commented Dec 1, 2013

A big challenge that the Node community faces is not having a Guido, Matz, or DHH. Those communities have clear leadership, and the concept of a benevolent dictatorship resonates well in a software community.

Where there is no clear leadership (JS, Standards, HTML...etc) there are foundations with boards and sometimes CEOs.

I have observed a few folks trying to become the defacto leader for Node, mainly by touting their contributions (I did 4% of this, I spent 5 months on that, Dahl is my godfather...etc).

It's a challenge where to move from here, as it's obvious the community wants a say on how things move forward, and the current diluted leadership needs to find a way to do that without adding bureaucracy.

@SaraJo
Copy link

SaraJo commented Dec 1, 2013

I think figuring out what people think is lacking would be a great place to start, does anyone know the problem we are trying to solve for?

I haven't seen a clear need that isn't currently being met, but I may have missed a part of why we are at this discussion.

@hackygolucky
Copy link

The reasoning I had behind seeing some larger entity for the Node.js community is support. Local groups need support.

We ran International NodeBots day in Portland, It was awesome. 50+ person turnout with kits able to be provided to every participant for use(thanks in no small part to @Mikael). It could have been worlds easier if we had more coordination sooner that would have alleviated stress off the shoulders of organizers. What about the user groups who didn't have the same number of local sponsors like we did? What if we had the opportunity to source kits for 1000 people(worldwide) before the next International NodeBots day? What kind of discounts could we get? What kind of insane international linking/syncing of nodebots could we do that would be a once-in-a-lifetime experience?

We run our local user group. We want to run workshops to make our group more newbie friendly. Why newbie friendly? That's how we grow the diversity of our community and make people feel included. Code shaming is not allowed and speakers discuss and answer questions during all talks. Having something like NodeSchool is a blessing we could not have put together currently. We are excited to have this. What about user groups disconnected from all the awesome happenings in SF? How do we make that discoverable?

What about the Code of Conduct supported by JSConf and NodeConf? They're awesome. What if a local Node.js user group doesn't adopt a CofC or represent what the community as a whole supports. Is that okay?

As Node.js grows, having some sort of org that allows for a place people can go to for knowledge/resources without having the blessing of knowing someone in the Bay Area seems like it would be useful.

Again, I say this out of love for you guys and the Node.js community-at-large. I don't know if I'm properly relaying my concerns.

@justinabrahms
Copy link

Reading through that, it sounds like there are 3 central issues being
discussed here.

Issues:

  1. We want to maintain community values through growth.
  2. We want to adopt to the needs of an evolving community.
  3. We want to decouple core committer involvement from community organization.

The solution that you appear to be against is a foundation (in the
vein of the Python Software Foundation or Django Software Foundation)
which owns the IP of node.js. It's worth pointing out that being
against this form of organization doesn't necessarily mean being
against all forms of organization.

Adding structure is actually how the node community has handled growth
to date, as you stated at the beginning. In efforts to be inclusive,
meeting of core committers went from informal meetings to
unconferences to conferences. This can also be viewed as a change in
size and location: progressing from location-based San
Francisco-centered meetings towards a more global event of
conferences. It appears that things are moving from local and small to
larger and more remote. This is a great trend!

I think there are a few ways that some sort of group, focused on
community outreach, could benefit these stated goals.

First, they can be a repository of knowledge around what works and what
doesn't when it comes to organizing events. Organizing events is hard
and getting a suggestions for how it could be done better is always
welcome. This seems to be what knode is working towards.

Also, someone has to listen for what the needs of the community are. I
think at this point its mostly a grass-roots effort where we've been
gracious enough to have people step up and make it happen. This is, as
best as I can tell, served by local interests. This is great, but as
the node community grows, there will be more people who will be
underserved here either because they live in remote areas and don't
have a community or aren't able to travel to places that do (for
financial or other reasons).

I feel like the notions I've heard about regarding the node world
aren't about "managing growth through process" or "creating
instutitional infrastructure". It's about solving issues for actual
people who need some structure. Just as there are guidelines about
what is an acceptable node commit (style guide, test plan, permissable
speed degredations, etc), folks who organize communities need similar
structure.

@mikeal
Copy link
Author

mikeal commented Dec 1, 2013

So many things to respond to! You all rock though, and these are great comments and concerns.

I don't quite understand why this would need to be owned by the core maintainers

"Ownership," as an issue related to the actual ownership of copyright and direction is only an issue in node core which is owned by Joyent. The only people we could expect to run such an organization would be the current maintainers. Ownership is not an issue outside of core and the larger community and ecosystem have no owner.

I don't think a foundation or central organization will work to direct node, JS, or its community, for reasons I'll try to elaborate on as I work through many of the other comments.

Is there a central place for us to talk or interact about how we can do this moving forward?

There have been multiple efforts here which we can learn from.

After doing the first JSConf Chris Williams started to gather people together in an informal organization who were running more conferences. There's nothing official but there is a backchannel and we all talk regularly. At this point we mostly give each other mental support or access to certain contacts. Nearly every member of this backchannel is working with other people in the "JSConf Family" of events, especially the first year conferences.

Chris also attempted to create a larger public channel where all of the JSConf Family events and others could talk. This mostly failed, people didn't ask all that often and replies were rare. The channel eventually died. It took me a while but I think I finally have some understanding of why this didn't work.

Private channels allow people to ask questions and express frustration they wouldn't normally do publicly. In addition, the members of a private channel have an implied responsibility as members. I've organized several conferences now in private GitHub repos, people are very engaged and responsive and it works much better than alternatives like private email. After the conference we've made these repos public so that people can learn from the process. Why not do them publicly from the start? This was my only attempt No9/peerconf-2013#1 and it's a mess. Being that anyone can comment nobody is responsible for their suggestions or implying that they are willing to take on the work of realizing their suggestion. It's hard to tell who is willing to put in the work and who is not.

That said, how can we create a place where anyone can come and get help?

I think a successful formula is to create a place that is very specific. I tried to make a place where anyone could come doing a node event but engagement has been lacking https://github.com/mikeal/node-meatspace/issues which is in stark contrast to the engagement we've seen with people coming to the NodeSchool channels to launch local versions.

It seems that the formula here is to avoid centralization as much as possible. The Node/JS/Web is very wide with hundreds of smaller sub-communities. Getting help from people with experience is easy once you reach the people who are passionate about the same thing you are, these are found in the sub-communities not in broader generalized forums.

The same thing goes for creating something new. Nodebot and NodeSchool events have very different formats because of the differences in what they are trying to teach and the communities they are engaging.

Another thing to note is that the more centralized something is the more it will grow some sort of ruling class. Maintainers, committers, curators, whatever you want to call it. The problem with this system is that people who engage don't feel responsible for doing things themselves so much as they think it is the responsibility of the ruling class to do them. Conversely, de-centralization is more democratizing, there not only isn't anyone to tell you can't do something there is no dominant structure, process, or class to expect it from.

@SaraJo this brings me to your first comment. While in the short term it may have been beneficial to have this sort of leader I think that in the long term it ends up being a huge hindrance. The community eventually grows to the point that one person cannot dictate the culture even if they are the best figure to be doing so. The longer the community goes without growing a distribution of leaders who re-enforce the culture the weaker it is in sustaining that culture.

Our biggest challenge is growing more/new leaders and encouraging more people to run community events like NodeSchool, NodeCopter, NodeBots and future events for new and growing sub-communities.

Action Items

  • we need to get a link on the NodeSchool and NodeBots sites for "run an event" that links to a GitHub Issue all the stakeholders can watch. we have already been building resources to help with this, people clearly can't find them.
  • identify communities not represented by the current events and get some new events off the ground. i can probably use JSFest as a launch pad for a few.

@thoward
Copy link

thoward commented Dec 5, 2013

So maybe what the "NodeJS Community" needs (so weird to talk about it as a thing) is documentation.

This discussion comes from the idea of having Node become owned by a foundation, the goals of which, we assume would be to:

  • do all the stuff related to legal ownership and management of a open source project
  • direct and enforce/encourage specific cultural values
  • be a centralized resource for the community as it grows

If we look at ASF as a model for this, it does all of those things for it's projects. It provides the infrastructure to host the code/issue trackers/etc, it has mailing lists for all the projects, it does all the legal things it needs to, and it has created "The Apache Way" which is it's weird hybrid of cultural values and software process.

When I joined ASF as a committer, it was easy for me to learn what the community expected and valued, because there was a document I could read that explained it, plus lots of mailing list where I could read old discussions on various topics, and where I could ask questions. I could also just lurk and see how other people's situations played out and learn from that.

Anyhow, a foundation doesn't have to do all the cultural work and all the technical work. There's no need for all these things to exist in a single entity. Joyent is doing a good job of bullet point number one up there; owning the code and managing the development on that code. Folks like Chris have become sometimes-accidental/sometimes-explicit cultural leaders (eg: An End to Negativity), there's a mailing list, which is a mix of cultural and technical topics. There's a bunch of them, actually.

But all this stuff is totally disorganized and hard to discover.

@mikeal you talked about this directly in your own blog: http://www.futurealoof.com/posts/the-fiction-of-leadership.html ... On one hand I see this as a strength of the Node community (non-inflated egos, emergent decisions, no barriers to input, very accessible to newcomers), but on the other hand it's a fucking mess and eventually someone will get hurt by it.

Maybe a reasonable next step would be for there to be a "Node Foundation" which does not own the Node code, but DOES own the culture and community: in the sense that it holds the responsibility of centralizing cultural values, being a meeting and discussion place for the community, etc. It would have no "power" per-se (assuming that ownership of the code imparts some kind of power to Joyent, which it really doesn't).

It seems the primary goal of a foundation like that would be to provide clear and unambiguous cultural guidelines, (similar to "The Apache Way"), which are well documented, and mediate discussions around that culture. Additionally, it can be a place to discuss/coordinate/community events. An active entity to promote and expand the community and keep those human values intact.

Maybe the myth of Node Leadership should stop being a myth. Perhaps it's time for our de-facto leaders to step up to the plate and take responsibility for this. No one wants to assume that role because it feels too egotistical to do so.. but isn't it also irresponsible not to do it when you are uniquely positioned and capable of it? When the community clearly needs leadership?

If something like that foundation existed, Joyent (and/or StrongLoop) wouldn't have to risk it's business every time something new came up that as a problem for the community. They could refer to the Node Foundation for questions about culture/process/values/governance/etc, and just agree to follow the recommendations of that foundation. As an independent entity, "corporate interest" grumbling wouldn't factor in. Governance would have a forum to be discussed, without any direct "power" to influence those discussions.

Maybe it's not even a "foundation". Maybe it's just some documentation text on a website. Maybe it's just folks like @mikeal, @voodootikigod, @izs, @substack, @maxogden, @hackygolucky, and lesser folks like myself picking a central place to talk about what we feel is important to us and encourage other people to do the same, and giving them the tools they need to do that, and the tools they need to build more community.

That seems like something that could be run for almost no money, some time, and a lot of effort... and the best part; no one needs to approve it to get it started.

Sorry if I'm rambly, I usually don't talk about this kind of stuff. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment