Skip to content
This repository has been archived by the owner on May 12, 2020. It is now read-only.

How would you provide specific help to open-source projects? #79

Open
duracellko opened this issue Mar 17, 2019 · 23 comments
Open

How would you provide specific help to open-source projects? #79

duracellko opened this issue Mar 17, 2019 · 23 comments

Comments

@duracellko
Copy link

Question

Sometimes (and maybe even more often) open-source requires help with specific skills, which are not part of the core domain of the project. For example setup CI/CD, implement Roslyn analyzers for better guidance, structure documentation, or simple documentation proof-reading.

How would you support projects, so that they can get help with such requests? And vice versa, how would you encourage projects to ask for help?

Background / More Information

Several candidates have similar support in their statements. I am curious if there are any specific ideas or actions.

@jguadagno
Copy link
Contributor

I think the biggest thing to help is visibility. There are a lot of great projects out there that could use help. I think the simplest thing to do is to use our collective voices and the reach of the .NET foundation and it candidates/board to help spread the work and ask.

@SeanKilleen
Copy link
Contributor

Thanks for the question, @duracellko! Tagging @dotnet-foundation/candidates so they're aware aware this question has been asked.

@mitchelsellers
Copy link
Contributor

There are many resources available as part of the .net foundation so I think step one is making it easier to discover all that is available.

Further to the question though regarding technical needs. For example it is great to have Azure DevOps however of the team doesn’t have experience with CI/CD it can be hard to get started. To this point I hope we can start to collect and project “skills needed” type requests to the members. Helping to align those with the skill sets and desire to be involved with those needing assistance.

@schneidenbach
Copy link
Contributor

Echoing @jguadagno's sentiments - using our networks to get the word out has always been effective to getting the right eyes on a specific project to get them the right help. The .NET Foundation already provides support to open source projects in non-technical areas (legal, for example) so I would expect to continue that as it's a huge value-add for technical minded folks who aren't lawyers (e.g. most of us 🙂)

There's another component to open source that's related to your question - oftentimes people want to contribute to open source but don't know where to start. I think there's room for a foundation-sponsored initiative to connect people who need help with their open source projects with people who want to help. Such an initiative would be a great way to help connect people and encourage a culture of collaboration.

@jskeet
Copy link

jskeet commented Mar 17, 2019

I can read the question in two different ways. I want to be clear that if I'm elected to the board, that probably means I'll have less time to spend providing specific technical help. However, I hope I'd be able to help raise visibility as @jguadagno said earlier.

On a different tack, I'd like to help by reducing the amount of work Open Source projects need to do themselves anyway. Working on Noda Time and the Google Cloud .NET Client Libraries, I've found a lot of areas where I felt I shouldn't need to build my own tools in the repo, but I haven't found what I need elsewhere in the community. (These have largely been around documentation and versioning, but not just those.) This is something I'd like to address, following a rough plan of:

  • Discover and record the needs, both from my own experience and asking the community
  • Find what existing projects there are which might provide at least part of the answer
  • Provide support and encouragement to either give existing projects more visibility, or encourage them to join forces
  • Where there really aren't any existing projects attempting to fill the gap, try to encourage the community to start one up

@SeanKilleen
Copy link
Contributor

I think part of this question is difficult to answer for me because I believe the appropriate first step is to try to more fully understand what type of specific help is asked for and needed, which I think we should undertake quickly once we get started. That's one of the reasons I that I'm suggesting understanding user types and implementing some form of impact mapping as part of some first actions the board could take. (You'll find some other specific ideas there too)

With that said, I think there are a few specific ideas that could help us accomplish support for some of the examples you've provided:

  • A one-stop-shop "on-boarding guide" of sorts for various stakeholders. Are you a dev who wants to get started in open source? We should be able to provide resources for you to learn what it's about, jump in, and find projects that could use your help (linking to the community when guides exist rather than creating our own unnecessarily). Are you a company that uses .NET? We should be able to on-board you to ways you can support the projects you depend on. Are you the maintainer of an OSS project? We should be able to provide you a place that lays out exactly the kind of support we can offer, and how we can request it. Standardizing these kinds of requests can go a long way to figuring out how we can support them. Someone should be able to use the .NET Foundation as a "bat signal" that they can turn to when they need something for .NET and OSS.
  • A "marketplace of needs" related to the Foundation could help here, particularly for Foundation members looking to be more involved. Folks should be able to say what they think they can help with, and maintainers or the Foundation should be able to surface needs. My hope here is that the Foundation can be a good broker for keeping this marketplace of needs vibrant. Maintaining something like this would also allow us to see larger themes of needs and address them in various ways that might help -- a twitch session focused on CI/CD, pairing with devs who are new to OSS but want to contribute, a "hackathon of love" to support a project whose maintainer is feeling burned out, etc.

I believe the primary mission of the Foundation is to serve as "multiplier" -- for members looking to make a difference, for projects that are looking for support, and for positive ways to showcase and share the great work of the .NET community.

@schneidenbach
Copy link
Contributor

@SeanKilleen love your "multiplier" moniker - that's a powerful concept that I think embodies the vision I have for the Foundation as a whole.

@robertmclaws
Copy link
Contributor

robertmclaws commented Mar 17, 2019

First off, I love all the responses here. I think there is a lot of energy and passion here and a lot of great ideas.

The first thing I would do is recognize that burnout in OSS is a real, legitimate, and very common thing. I have been a part of too many organizations where new blood went full-tilt into tons of new ideas, and none of them ever got fully finished because the last 10% is 90% of the effort. Our members have lives and need to eat, sleep, have other hobbies, and spend time with family. So if we're going to be the beacon of OSS for the .NET Community, the first thing we must do is draft a set of guidance for maintaining a healthy balance while managing an OSS project.

Second, I think we can all agree that the foundation needs a Member Directory that is searchable based on projects, focus areas, and availability. That directory should let members specify which projects members are already working on, and gently warn people when they are making new commitments outside some healthy time boundary... the last thing we want is for our members to be stretched too thin. That Directory could then have a matching function, which would match specific, time-limited requests (like code and documentation reviews) with experts that can assist.

Third, I would suggest implementing a series of weekly webcasts, rotating through Foundation members and talking about various topics. Could be around project architecture guidance, unit testing, CI/CD, fundamentals of NuGet packaging, etc. Those resulting videos could then become part of a larger body of written guidance around OSS project management that would be developed over time.

Fourth, I would suggest the team start working on a repository of templates that would help with common architecture issues, possibly involving contributions to the NRepo tool. For example, the ASP.NET Core team has a great Directory.Build.props file that provides consistency for their builds. I've created a simplified and enhanced version that registers Roslyn Analyzers automatically based on project naming conventions, and disables certain complier warnings that are irrelevant in certain circumstances (like "underscore in function names" warnings in Test projects). It's highly useful in projects that ship multiple NuGet packages, and I'm sure a generator of some sort would be a big help to others. I could see us creating VS solution templates, DocFX templates, or build a new version of NuDoq, since that project has been abandoned.

Finally, I would suggest a streamlined way to help this whole process make money for people. Just because the code is free doesn't mean everything else should be. The Foundation should facilitate ways to help the community build businesses around their expertise. Creating frameworks for tiered support levels, building out common contributions infrastructure, or creating a marketplace for billable expert consulting are all ways that strengthen the community by making it financially sustainable. Everyone needs to be able to eat and feed their families, and the support we provide shouldn't just be through code.

I think there is enough expertise between all of the membership that this could be diviied up, managed, and implemented in a sustainable way.

@clairernovotny
Copy link
Member

I have been active in helping projects onboard to the Foundation and add any CI/CD they require. This has been AppVeyor in the past and more recently Azure Pipelines.

I also run the Foundations code signing service and help projects add code signing support into their build and release processes if they desire.

@Ant-hem
Copy link
Member

Ant-hem commented Mar 18, 2019

So many good ideas here, especially for the visibility.

I would love to help .NET open-source projects by providing them a great search experience for their documentation. I am working at Algolia (search technology) and we are providing to 900+ open-source projects a search for their documentation for free. We are supporting the doc search of popular frameworks such as: React, Bootstrap, Vue...

Having a great documentation for a project is one of the key to raise visibility and a strong user base. I would be very happy to bootstrap this project with the foundation.

@Mpdreamz
Copy link

Mpdreamz commented Mar 18, 2019

How would you support projects, so that they can get help with such requests? And vice versa, how would you encourage projects to ask for help?

I would love it if we could somehow change that you in the original ask to we. As all in of the .NET foundation member collective. Setting up working groups around different topics that continuously work on best practices driven from experience. We could use these best practices to augment: https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/

Currently the forums are very organizationally oriented: https://forums.dotnetfoundation.org but would love to include or create a separate forum for these working groups to self organize and receive questions.

@LuceCarter
Copy link

So my answer will echo a lot of the answers already given I think but I think the first step is definitely to establish what kind of help is needed.
I mentioned in my campaign statement that I want to help put together documentation that helps with tips and tricks for contributing to OSS. This could expand to cover other kinds of issues with helpful links.
For example when it comes to CI/CD, if Azure is an appropriate solution, there could be links for Microsoft Learn explaining how to get started with DevOps.
I think more focus needs to be on visiblity and connecting people across the world. I like the idea that @robertmclaws mentioned about a searchable directory.
Here in the UK we have an app called Community Connect where people can add themselves as a speaker or go to find speakers in a specific area.
Something similar could work for helping find people who might be worth connecting with to help on a project.

@IEvangelist
Copy link

This is another great question @duracellko, thank you for this. I think of this a few different ways, first most open source developers are usually already part of this community and it is somewhat difficult to add value within an existing project. Right, so in one scenario we have a seasoned developer who is an expert in their language, platform, etc... easing into an existing project is presumably seamless. There are still other concerns though, such as the domain knowledge. Building on a pillar of transparency and collaborative communication, it means working together, it means supporting one another, it means encouraging others and not being dismissive or talking down to others. It fosters the notion of equality.

On the flip-side there is the concern of trust, how does a junior develop get involved - how can we as a community build opportunities for collaboration and growth. This makes me think of the efforts around hacktober, and the various tags such as "up-for-grabs" which encourage anyone and everyone to contribute. I think it is odd that hacktober only occurs for one month a year. This should live on indefinitely 👍!

How would you support projects, so that they can get help with pull requests?

Perhaps there should be open source ambassadors, people who focus on pull requests... they offer up thoughtful critique and cater to education. I'm not saying that this is something that would happen immediately, but it is easy to imagine.

How would you encourage projects to ask for help?

I think this one is easy as if you're an open source developer they want your help, this is one of the reasons it is open source in the first place.

@daveaglick
Copy link
Member

daveaglick commented Mar 18, 2019

This is a great question with what I think are many overlapping but separate (and equally important) aspects.

To start, I think the question would be better phrased as “How would you facilitate specific help to open-source projects”. The difference in wording here is subtle, but gets to the question of what the Foundation’s role should be within the community. I don’t think we should be fostering a dependence on the Foundation to provide direct project assistance. Sometimes it’s helpful and necessary, but often it just won’t scale very well. Instead I’d like to see a mindset where the Foundation provides resources like training, promotes discovery across the entire ecosystem, and fosters the development of tools (by the community) to improve the experience of project maintainers.

Another aspect of this question is that there’s definitely a difference between member projects of the .NET Foundation and those of the greater community. While the Foundation currently offers specific resources to member projects (such as a code signing certificate and signing service), I’d like to see it deliberately consider ways in which an umbrella of support could be extended to the greater .NET open source ecosystem. For example buying a team LastPass subscription for every open source project would be cost prohibitive, but perhaps the Foundation could negotiate special rates on behalf of projects or offer guidance on how best to manage passwords across a team.

One final thought before I mention some specifics is that we need to be mindful that every project has it’s own requirements, conventions, community, and preferences. The Foundation should strive to meet projects where they are and help them from there rather than adopt a mindset of the “best” way to accomplish something. Providing guidance is often helpful until it become prescriptive guidance at which point it can become discouraging and counter-productive.

The original question was:

I am curious if there are any specific ideas or actions

So within the context of my thoughts above, here’s some initial ideas (some of which are already mentioned on my candidate profile):

  • Create a mentoring program for project maintainers with regular checkins between them and their mentors. There are a few ways this could be executed, but I’d ideally like to see a scalable approach that could be offered across the entire community. Perhaps pairing maintainers with other maintainers in similar domains would be a good start, with the Foundation/board taking on a supervisory role.
  • Make sure that the Foundation regularly checks in with it’s member projects to learn their specific needs and identify areas where it could assist. Likewise, a regular standup between all Foundation projects could foster a sense of community and uncover areas where projects could complement and help each other.
  • To extend the checkin or standup concept further, it would be nice to see the Foundation have community-oriented standups similar to the ones the .NET team has been doing and broadcasting. Even better would be to hold these in a way they could be interactive.
  • Discovery in .NET open source continues to be a big problem. There are so many great projects in our community just waiting to be uncovered, and until they are the network effect won’t kick in and foster users and contributors. There are already initiatives in this area like Discover .NET, BuiltWithDot.Net, Awesome .NET, and Up-For-Grabs. I’d like to see the Foundation look for synergies and ways it can integrate and promote these resources.

@sbwalker
Copy link

sbwalker commented Mar 18, 2019

Since the .NET Foundation was originally created in 2014 it has added a variety of services that are focused on providing support for open source projects that are generally not part of their core technology domain. Some of these services include:

IP / Legal Support - the foundation provides free legal advice to projects in matter related to intellectual property, licensing, etc...

CLA - the foundation provides a best-of-breed solution for managing contributor license agreements
Certificates (HTTPS / Code Signing) - the foundation allows you to create more trusted and certified distributions by allowing projects to sign their assets

DevOps - as Oren mentioned above, the foundation offers assistance in setting up CI/CD using AppVeyor and Azure Pipelines. It also provides assistant with Package Feeds.

Hosting (Azure) - Azure hosting services are provided to projects which have a need for cloud infrastructure

SaaS - the foundation has affiliations with Meetup and other services which it can offer to open source projects as well as community organizations

Marketing - projects are promoted through a variety of marketing channels

Events - projects are promoted in events such as .NET Conf

I think the .NET community at large may not be aware of the full scope of services which the .NET Foundation already offers. Perhaps an awareness campaign is needed.

@SaraJo
Copy link
Member

SaraJo commented Mar 18, 2019

As a central organization, I believe the .NET foundation can uniquely help OSS contributors in a few ways that might be more difficult to do on their own:

  • Exposure Using the platform given to the organization, the .NET foundation can work as a bullhorn and make sure projects get the visibility needed to attract contributors and users.
  • Financing The foundation can approach corporate entities that utilize .NET open source to get sponsorship through capital or paid full time positions focused on contributing to .NET projects.

To answer OP's question around how to get people with varying skillsets to step in and help with things like CI/CD, Roselyn, and other needs: I hope that exposure would help with finding those type of collaborators. If not, I would look into ways we could rally the community to self identify their diverse skill sets so folks could ping the types of people they need for their projects. This could take many forms, this is just the first step.

@tidusjar
Copy link
Member

Excellent question.

So let me just start by saying everyone has an excellent answer and has probably covered most things here.

As a maintainer of a large open source application, I completely understand the needs from an open source project maintainer.
In my perspective it's not all about code.
Open source projects end up falling into the same area when they grow, the limited set of maintainers end up doing less code and end up focusing more on the support side of things.

Now I am not implying that I'd ask people to help support the projects, because that wouldn't be possible since I think to be able to support it, you'd need to be a subject matter expert on that project or at least know the it pretty in-depth.

What I would be suggesting is to assist in looking at alternative ways of handing support instead of using Github's Issues. That may be assisting in creating some sort of support room e.g. Gitter or even something like a forum. I think the board would have great input to be able to assist in these areas.

I think that is one of the single largest issues in open source projects right now, support piles up and without dedicated 'support staff' and the right tools, then you end up being burnt out and the project could potentially die. Which is what we want to avoid.

@ddieruf
Copy link

ddieruf commented Mar 19, 2019

In my full-time job :), I try to always make myself available to those that want to learn more. I may not have all the answers but we can find the right way, together. We also have the concept of a "value line."
Staying about the line, each member of a project brings peak focus and contribution. Go below it and that member is in the "toil" and is doing tasks that are not a part of their job. The value line is relative to each member's responsibilities, but it's usually clear where to draw it.

Let's say you have an OSS project to donate to the .NET Foundation. You want to do it the "right" way but you are only one person and the right way involves managing PR's, releases, and generally supporting the project. That's a lot of time. So now what?

You contact the Foundation looking for help. My approach would be centered around automation and enablement. My goal would be to keep you about the value line because frankly, that's where you're having fun (writing code). Enable you by connecting with other [single] successful OSS project owners, so you can learn from their story. Automate as much as possible with all the wonderful Azure DevOps tooling the Foundation provides.

For the life of your project, the Foundation is here to enable you. Give you the right tools to get the job done and facilitate a community of many, so everyone can learn from one another.

@pmbanugo
Copy link
Member

I think the foundation has a good online presence which can be used to regularly spread word about the projects under it and what kind of help it's seeking. That should help with exposure/visibility.

I think for projects to get help, they need to make it easy and exciting for people to contribute. The first will be a proper code of conduct. The second will be a contribution guide to explain areas you need help with (CI/CD, documentation, website design, test, etc) and how people can find issues related to those areas. These things should be easily visible in the project's README or introductory page. Projects should also spend time on crafting issues that will be easy to understand and tackle. With those in place I think the foundation can have some .NET meetups or student communities pick a project and have their members contribute to as a means to learn and practice, while the project grows from those contributions. The project could also make good use of labels. Maybe using something like help wanted label so people can search for issues by labels. Appreciating the work of done either through documentation (or anything) by sending out a list of gratitude either through the project's newsletter or twitter account can also keep people eager to continue contributing

What I would work towards is how many of these issues can beginners or people making their first OSS contributions take on. I think the foundation should ensure that projects continually create issues that first-time contributors (or beginners) can take on. Labels can be efficiently used here (e.g first-timers-only). The foundation can also work with project owners to reach out and collaborate with communities such as RAILS GIRLS SUMMER OF CODE and the likes, to provide issues and mentors (i.e maintainers from the project) that can guide people in those communities/program on contributing and growing their experience.

@Lakritzator
Copy link
Contributor

I didn't read through all of the answers, as in this case I wanted to be unbiased by others. It might be that I am repeating some of them...

To answer the question of @duracellko:
As I am a maintainer of a product, which is installed by many users & companies on many different systems, I have my experience with dealing with end users and system administrators. My technical experience covers many products & tools which help to create a better product, I gladly help where I can.

What I as a maintainer currently cannot do, is support every possible combination and afford the hard & software my customers run my software on. This might be something which could be solved with .NET Foundation assistance, while the .NET Foundation has better contacts.

But that would assume that the open source project call out for help, most of the times they don't know what to use for a certain issue or gap, but it also happens that they don't even know that there is an issue.

I would start by making something available which contains enough information that open source projects can do something like a health check, identifying the gaps they have to improve the general health of the project. This also would help the consumers of these project to have a better idea or feeling about what they are using.

This will go into different areas, not just the technology, and provide knowledge, products and a way to contact someone who can help you. As this sounds very abstract, maybe some examples:

Project "health" check:

  • Does your project have more than one maintainer? (description why this is needed)
  • Does your project have a vision & road map, this helps decision makers to decide if your project is good for them
  • Is the resulting end-product build via an automated process? (-> information on which CI/CD Systems one can use, links to training material, and maybe contacts)
  • If you want to deliver your end-product to enterprises, you might need to consider:
    • The project license, it should be ....
    • A code signing certificate, which you can get here / here, and this is how you integrate it into your build.
  • Do you have a process in place to get an CLA from your contributors? description why this is needed, how this can be included in your github repository.
  • Is the quality (security) of the Website taken care of, and do they have current documentation?

I would love to get a collection with best practices, tools & descriptions, this should be in a repository where the community itself can make changes (like the new microsoft docs). When looking at the community standups on youtube, there is always a "thing" which the presenters find annoying, and if there is no solution yet the community brings one a day or two later on twitter... This energy can be a bit more focused, also have a "slot" of time for people to bring this in.

Getting this information to the people needing it, will not be an easy task. Let's stat with the space we already can influence, and see how we can extend this.

Hope this somewhat answers your question?

@tonerdo
Copy link

tonerdo commented Mar 21, 2019

How would you support projects, so that they can get help with such requests? And vice versa, how would you encourage projects to ask for help?

One of the first things I'll champion as a board member is the creation of a dotnet new template that all built specifically for open source projects to kickstart their development. It'll come with options to choose a CI provider, enable strong naming of NuGet packages and other best practices. The template will be open source itself and feedback from the community will be used to broaden it's use cases.

cc @duracellko

@MarcBruins
Copy link
Member

I think the board should be a facilitator and not a know it all shop. What I would like to do is to set up community stand up for .NET foundation projects where these topics can be discussed. If a maintainer has a problem or needs help, other .NET foundation members can pitch in to help out.

This is a sustainable model and doesn't require board members with all kinds of expertise. What if we have a board member now that knows all about CI/CD and next year we lose that board member? Just giving an answer to a question is unsustainable and the foundation should facilitate a sustainable way to tackle problems.

@tenor
Copy link
Contributor

tenor commented Mar 22, 2019

Lots of great responses here. I'll echo what @MarcBruins said. .NET Foundation members can raise issues encountered in the course of open source development, to the board. As a board member, I'll look into how best to resolve issues raised by members.

One issue I've personally struggled with is burnout. In this particular case, the board can ask successful project maintainers for tips on sustainable models for open source developments.
The board can then share their findings with the foundation, and if needed, set up resources to help struggling developers.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests