Skip to content

Latest commit

 

History

History
369 lines (214 loc) · 14.5 KB

innersource.md

File metadata and controls

369 lines (214 loc) · 14.5 KB

InnerSource fundamentals

Organizations of all sizes and in all industries are chatting about InnerSource concepts. This course walks you through some of the key concepts of InnerSource and helps you build up an internal toolkit for adopting InnerSource practices.

Tags: none


Organizations of all sizes and in all industries are chatting about InnerSource concepts. This course walks you through some of the key concepts of InnerSource and helps you build up an internal toolkit for adopting InnerSource practices.

What you'll learn

After completing this course, you'll be able to:

  • Contrast user versus organization owned projects
  • Create discoverable repositories
  • Create robust repository READMEs
  • Use issue and pull request templates
  • Make sensible configuration decisions for repositories, like using protected branches and CODEOWNERS
  • Build transparency into repositories through well documented branching strategies, project management techniques, and workflow best practices
  • Prioritize what matters when measuring InnerSource and collaboration
  • Distribute your InnerSource toolkit

You'll be able to answer questions like:

  • What is the difference between InnerSource and open source?
  • How can my organization create repositories to organize work?
  • How should my organization handle bug reports?
  • How should I document my workflows to share with my team members?
  • How do I measure success in my projects?

What you'll build

As we work, we'll create a resource that others can use within your organization. This repository will be useful even after you finish this course.

56301905-009cad00-60f6-11e9-9bf4-ed1c1907ef55

What you need to know

We assume in this course you understand GitHub terminology and concepts. If you need help with this, take our Introduction to GitHub. You'll also want a working understanding of GitHub Pages. We have a course on GitHub Pages as well. Finally, it helps if you have prior experience working on team project.

What tools we'll learn

For this course we'll use GitHub Pages and Jekyll.

Who this is for

This is the best course for someone working at a company or organization that already works InnerSource. Or for a company or organization that is transitioning to InnerSource. This would be a great course for a technical leader interested in bringing transformation to their workflows.

Most of the ideas here work for all repositories on GitHub. This course has some content specific to working within an organization. If you are an open-source maintainer or contributor, this course has content that would be useful.


Welcome!

This repository will be a working website that you can publish as your own InnerSource landing page.

Screen Shot of final product

As we work, we'll create a resource that others can use within your organization. This repository will be useful even after you finish this course.

This is how this course will move along:

  • Every new issue or pull request will start with a challenge question
  • You'll answer the challenge question (don't worry, there are no right or wrong answers!)
  • The question will highlight the importance of each topic in InnerSource practices

Here's your first challenge question!

Challenge question

InnerSource and open source are the same thing.

  • True
  • False

I'll respond when you check one of the boxes above.

This pull request is about repository ownership and naming conventions.

Challenge question

Does a repository exist at https://github.com/githubtraining/training-manual?

  • True, there is a repository at the given URL
  • False, no repository exists at the given URL

I'll respond when you check one of the boxes above.

Answer 🔮

InnerSource and open source are very similar concepts, but they're not the same.

Open source software is public and typically accepts contributions from outside of an organization.

InnerSource is the practice of adopting open source patterns internally within your organization. An organization that practices InnerSource may or may not also maintain open source software.


You can find your next steps in the next pull request.

Answer 🔮

A repository does exist at githubtraining/training-manual, but it is private.

gif of repository, pointing to ownership by githubtraining organization, and to a private visibility

Why can't you see it then? Review the Files Changed tab and see if you can figure it out. Expand this text if you'd like an explanation.

Understanding repository visibility

There are three types of repository visibility: public, internal, and private.

Our repository, githubtraining/training-manual, isn't public. It could be internal, which means only members of the organizations that an account owns will see it. Or, it could be private, which means only teams and individuals that have been granted access to it can see it.

This is an example of why ownership structure is important. Otherwise, it can be difficult for members of your team to find and contribute to projects. Having too many disconnected organizations with restrictive permissions isolates each organization's work.

Here are some recommendations based on some ✨ admirable ✨ use of GitHub that we've seen:

  • Use the internal visibility (currently in beta) if you're working on behalf of an enterprise account.
  • Name your repositories meaningfully. Usually a simple project or application name is best.

⌨️ Activity: Review this pull request

  1. Read the additions in the Files changed tab
  2. Approve this pull request (if needed)
  3. Merge this pull request
  4. Delete the branch

I'll respond after you merge this pull request.

This pull request is about making repositories discoverable.

Challenge question

What is this repository for?

gif of a repository with no description, link, or and just a few folders: .github, .vscode, _appendix, _events, _includes, _layouts


I'll respond when I detect your new comment on this pull request.

You can find your next steps in your [next pull request]({{ url }}).

Answer 🔮

This repository is the source code for https://services.github.com.

Did you guess it? Probably not, because it doesn't contain many of the necessary elements to make a repository discoverable.

Some suggestions to ensure your teammates can find your repository are:

  • Use a descriptive repository name
  • Give your repository a description
  • Provide a URL for the deployment of the app, or documentation about this project

Discover more about how to make a repository discoverable by visiting the Files Changed tab. It's OK if you want to do this later, any resources we cover throughout the course will be available at the end.

⌨️ Activity: Discoverability

  1. Review the additions about discoverability in the Files changed tab
  2. Approve this pull request (if needed)
  3. Merge this pull request
  4. Delete the branch

I'll respond when you merge this pull request.

Let's now learn about issue and pull request templates.

Challenge question

Here are four different ways you could submit a bug report. Which is the right way?

  • Open an issue on GitHub
  • Create a Jira issue
  • Open an internal support ticket
  • Direct message or email the maintainer

I'll respond when you check one of the boxes above.

You can find your next steps in your [next pull request]({{ url }}).

Answer 🔮

Every project can have a different way to submit bug reports, so all the answers are right.

But, how could you know? With issue and pull request templates, you can take the mystery out of the equation. Templates show those across the organization the preferred way to contribute.

⌨️ Activity: Review templates

  1. Review the examples and types of template files in the Files changed tab
  2. Approve this pull request (if needed)
  3. Merge this pull request
  4. Delete the branch

I'll respond when you merge this pull request.

This pull request covers a few common workflows that may be used within your organization.

Challenge question

Suppose you'd like to contribute to the repository pictured below. Which branch should you use as a base for your contributions?

a screenshot of a repository's branches, they are: a protected master branch, a protected release-v1.0 branch. The rest are unprotected: bug-fix, green-colors, config-release-drafter, add-template

  • main
  • release-v1.0
  • bug-fix
  • green-colors
  • config-release-drafter

I'll respond when you check one of the boxes above.

You can find your next steps in your [next pull request]({{ url }}).

Answer 🔮

The real answer is that, without documentation, we don't know!

This pull request covers the basics, but here are some recommendations to help any contributor know the right way to open pull requests:

  • Use protected branches. Doing so will allow you to accept pull requests without fear of breaking production code.
  • Use CODEOWNERS in combination with protected branches to ensure the right people review changes.
  • If you haven't picked a workflow, use a common and well documented one.
  • Be explicit about your deployment and release strategy.

⌨️ Activity: Review workflow documentation

  1. Review the changes in the Files changed tab
  2. Approve this pull request (if needed)
  3. Merge this pull request
  4. Delete the branch

I'll respond when you merge this pull request.

It's time to discuss project management!

Challenge question

Here's some open issues in this company project. You're eager to help with this project. Which issue should you work on?

screenshot of a repository with 5 open issues, none without labels and all opened by @githubteacher. The issues are: restyle the slides, improve the readme, add a caption to an existing slide, add a new slide, activity 1: your first caption

  • Issue 6: Restyle the slides
  • Issue 5: Improve the README
  • Issue 4: Add a caption to an existing slide
  • Issue 3: Add a new slide
  • Issue 2: Activity 1: Your first caption

I'll respond when you check one of the answers above.

You can find your next steps in your [next pull request]({{ url }}).

Answer 🔮

Without a clear project management strategy, you might as well pick any issue.

Being explicit about your project management tool will help potential contributors. Whether it's inside of GitHub or elsewhere, communicate so they know whether their help is immediately helpful.

⌨️ Activity: Review project management strategies

  1. Review the changes in the Files changed tab
  2. Approve this pull request (if needed)
  3. Merge this pull request
  4. Delete the branch

I'll respond when you merge this pull request.

Once you've implemented InnerSource strategies, how do you know it's working?

Challenge question

What might be some ways to measure the success of InnerSource strategies?


I'll respond when you comment on this pull request.

You can find your next steps in your [next pull request]({{ url }}).

Answer 🔮

Those are great ideas!

Here are some other ideas for measuring how well you're doing:

  • Time to market
  • Pull requests to fix bugs
  • Pull requests to add suggested features
  • Number of collaborators to a project outside of maintaining team

⌨️ Activity: Review measurement techniques

  1. Review the changes in the Files changed tab
  2. Approve this pull request (if needed)
  3. Merge this pull request
  4. Delete the branch

I'll respond when you merge this pull request.

Almost done!

It's time to publish the InnerSource toolkit you've been working on.

To publish:

  1. Go to the Settings tab for this repository
  2. Scroll down to the section titled GitHub Pages
  3. Select main branch in the Source drop down

That's all! GitHub Pages will then deploy your site and report its status back to me.


I'll respond when I detect that GitHub Pages has finished deploying your site.

You can find your next steps in your [next pull request]({{ url }}).

🎉 Congratulations

You finished this course. You can see a deployed version of our work together at [your new GitHub Pages site]({{ deploymentURL }}). Feel free to share this link directly with others, or you can save the resources in one of the following ways.

Saving course resources

  1. If you'd like to just save the contents to your machine, you can:
    • Use this shortcut link to [download the files]({{ downloadURL }})
    • Download the files by clicking on the Code tab, clicking on Clone or download and clicking Download ZIP
    • Clone the repository to your machine
  2. If you'd like to transfer the repository to an organization on GitHub:
    • If your organization is on GitHub.com, [fork it]({{ forkURL }})
    • If your organization is on GitHub Enterprise Server, transfer the repository

I won't track any further events in this repository.

Your next steps are in the Innersource learning path.