Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions introduction/principles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
This file holds the text to accompany the [InnerSource Principles](https://www.safaribooksonline.com/videos/introduction-to-innersource/9781492041504/9781492041504-video321610) video.
This accompanying text will appear as a part of the learning path (like [this example](https://www.safaribooksonline.com/learning-paths/learning-path-lean/9781491999738/9781491946527-/part01ch01.html)).

# Inner Source Principles

Every company, team, project, and individual is different.
Because of that fact, the exact way that the concept of inner source works will vary from one situation to another.
At its core, however, are four principles that form the bedrock of any successful instance of inner source.
These principles have inspiration in successful open source projects and must be respected and present in order for inner source to achieve the benefits described earlier.

The principles are:
* **Openness**
* **Transparency**
* **Prioritized Mentorship**
* **Voluntary Code Contribution**

Let's take a look at each of these principles in more detail.

## Openness

In being open, a project is set up in such a way that contributing is as frictionless as possible.
Projects should be discoverable and well documented.
Anyone within an organization should be able to find them and ramp up without an inordinate amount of direct guidance from host team members.
Host team contact information should be prevalent with as many channels as makes sense for the project.
Host team intentions to inner source their project should be broadcast through relevant organization channels.

By no means is the above an exhaustive list. Project openness will typically be directly related to how successful a project is
in terms of inner sourcing: The more open it is, the less barriers are put in place for prospective contributors. The less open
it is, the more difficult it becomes for anyone to contribute.

## Transparency

In order for guest teams to be able to contribute meaningfully to a project, the host team must be _transparent_.
This means that guest teams should be able to have an understanding of:

* The product and its direction
* Outstanding feature requirements
* Progress on feature requirements
* Decision making of the host team

When possible, the above should be communicated in such a way that does lend itself to tribal knowledge.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't entirely catch what this sentence is supposed to purvey. Can this be formulated differently?

Copy link
Member

@lenucksi lenucksi Mar 31, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rrrutledge What I did not get here (and probably turned into a sentence that sounded much more harsh than what was intended) was the reference to 'tribal knowledge'. I was wondering if that could be phrased differently.
What would an example of tribal knowledge being created be here? What makes it tribal and how does that differ from common knowledge?

Copy link
Collaborator

@breakbottle breakbottle May 17, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lenucksi "Tribal knowledge" typically leans towards the core team overall knowledge of the project code and direction that may not be "common knowledge" for those outside of the core team. I totally get it but it probably should be written in a way that anyone reading the principles should understand without question.

Suggested change
When possible, the above should be communicated in such a way that does lend itself to tribal knowledge.
When possible, the above should be communicated clearly and in details, from teams internal definitions of items to special case scenarios specific to the project, in a manner that can be easily understood to those that are not part of the core team.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds more understandable to me. I turned the suggestion in your comment into a commit suggestion.
I know the terms 'tacit knowledge' or 'implicit knowledge' for something describing similar concepts I guess - would those resemble what you wrote?


## Prioritized Mentorship

_Mentorship_ from host team to guest team via trusted committers is a key aspect of inner source.
Contributors on guest teams are upleveled so that they understand enough about the host team system to change it successfully.
In the process of doing so, they come to better understand the host team system as a general consumer.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does system refer to here? The technical artifacts of the project, the team's processes or the entire socio-technical construct that the inner source project in question is?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

technical artifacts of the project was what I was imagining.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about adding software system to make this clearer then?

Suggested change
In the process of doing so, they come to better understand the host team system as a general consumer.
In the process of doing so, they come to better understand the host teams' software system as a general consumer.
Suggested change
In the process of doing so, they come to better understand the host team system as a general consumer.
In the process of doing so, they come to better understand the host teams' software product as a general consumer.

They can use it more effectively and help other consumers to do so as well.

It's critical that this mentorship for contributors is _Prioritized_ by the host team.
The host team should strive to make time to mentor guest team contributors _at the time that the contributor needs it_ as opposed to when it's convenient to the host team.
At times at may be a culture change for engineers on the host team to spend time helping others to code rather than just coding themselves.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like a typo to me.

Suggested change
At times at may be a culture change for engineers on the host team to spend time helping others to code rather than just coding themselves.
At times it may be a culture change for engineers on the host team to spend time helping others to code rather than just coding themselves.

This mentorship is valuable to both the individual contributor and the host, and it is worth doing well.
It proves to be mutually beneficial in the long run, by improving the code, the contributor model and forging or
improving relationships within an organization that may not have existed otherwise.
Open source readily recognizes this point and considers it as an honor to achieve trusted committership on a project.

## Voluntary Code Contribution

The first word _Voluntary_ means that engagement in inner source from both the guest and host teams occurs of their own free will.
The guest team voluntarily donates code to the host team and the host team voluntarily accepts it.
This opt-in nature means that each team needs to be certain that their involvement adds value to the others' objectives.
Never is a host team required to accept a contribution that isn't in ultimate alignment with their overall mission.
Never is a guest team required to submit a contribution that doesn't ultimately further their own mission and priorities.

The word _Code_ emphasizes that the collaboration between guest and host goes all the way to the code.
Guest involvement in opening issues, updating requirements, fixing docs, etc. is good, but collaboration needs to reach as far as submitting code to achieve all of the benefits that we've discussed.