From 6f457ff37b421223804878b6e0e04b2680718dd5 Mon Sep 17 00:00:00 2001
From: Sebastian Spier
Date: Fri, 12 May 2023 11:05:33 +0200
Subject: [PATCH 01/38] Script to find upgradeable patterns (#534)
* Script to identify upgradeable patterns based on their number of Known Instances
* Formatting changes to the 'Known Instances' section of some patterns. Allows for easier scanning of the new find_upgradeable_patterns.rb script
---
meta/README.md | 1 +
meta/scripts/Gemfile | 7 ++
meta/scripts/find_upgradeable_patterns.rb | 84 +++++++++++++++++++
patterns/1-initial/governance-levels.md | 2 +
patterns/1-initial/incubator-pipeline.md | 2 +-
.../introducing-metrics-in-innersource.md | 2 +-
.../dedicated-community-leader.md | 2 +-
.../document-your-guiding-principles.md | 4 +
8 files changed, 101 insertions(+), 3 deletions(-)
create mode 100644 meta/scripts/Gemfile
create mode 100644 meta/scripts/find_upgradeable_patterns.rb
diff --git a/meta/README.md b/meta/README.md
index f2e801aef..f478310dd 100644
--- a/meta/README.md
+++ b/meta/README.md
@@ -12,6 +12,7 @@ The topics below cover information about how we define, operate, and upkeep this
* [Style Guide](./pattern-style-guide.md) - Recommended conventions to use when writing patterns
* [Glossary](./glossary.md) - Defines essential terms that are commonly used when writing new patterns.
* [Board Reports](./boardreports) - The Patterns Working Group submits a report to the Board of the InnerSource Commons Foundation on a quarterly basis. This folder contains all reports that the Patterns Working Group has created.
+* [Scripts](./scripts) - Scripts that help us with the maintenance of our patterns.
## Unfinished documentation
diff --git a/meta/scripts/Gemfile b/meta/scripts/Gemfile
new file mode 100644
index 000000000..1cd3261e2
--- /dev/null
+++ b/meta/scripts/Gemfile
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
+
+gem 'commonmarker'
diff --git a/meta/scripts/find_upgradeable_patterns.rb b/meta/scripts/find_upgradeable_patterns.rb
new file mode 100644
index 000000000..b80bde4fb
--- /dev/null
+++ b/meta/scripts/find_upgradeable_patterns.rb
@@ -0,0 +1,84 @@
+require 'rubygems'
+require 'bundler/setup'
+Bundler.require(:default)
+
+require 'pp'
+
+# ------------------------------------------------------------------------------------------------------------
+# This script scans all patterns in /patterns/1-initial and /patterns/2-structured.
+# Based on the number of Known Instances in the pattern, it suggests which patterns that might be ready to be leveled-up.
+#
+# The number of Known Instances are only one of the [requirement](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/meta/contributor-handbook.md#requirements-level-2---structured)
+# for our patterns to reach the next level. Therefore reading the pattern and the level requirements in detail is still required
+# to decide whether or not a pattern can be pushed to the next level.
+
+# NOTE: This script and `/book/scripts/generate_toc.rb` have some overlap in how they are parsing markdown.
+# However the overlap seemed minimal, so I opted not to do any deduplication of code.
+# ------------------------------------------------------------------------------------------------------------
+
+# Count Known Instances in a pattern
+# - return 0 if the section does not exist, or does not contain the expected list structure
+# - return
+def count_known_instances(file)
+ section_nodes = collect_section_nodes(file, "Known Instances")
+ list_nodes = []
+ # pick the first list in the "Known Instances" section, and return the number of elements in that list.
+ # CAUTION: this assumes a certain structure across all patterns. Therefore fairly brittle.
+ list_nodes = section_nodes.select {|n| n.type == :list}
+
+ known_instances_count = 0
+ known_instances_count = list_nodes.first.count if !list_nodes.first.nil?
+
+ return known_instances_count
+end
+
+def collect_section_nodes(file, section_title)
+ markdown = open(file).readlines().join
+ doc = CommonMarker.render_doc(markdown)
+
+ title_found = false
+ section_nodes = []
+
+ doc.walk do |node|
+ if node.type == :header
+ if title_found == false
+ node.each do |subnode|
+ if subnode.type == :text and subnode.string_content == section_title
+ title_found = true
+ end
+ end
+ # stop the recursion once the next header is reached
+ # TODO: is this correct, or should we check if this is another `##` header, rather than any header?
+ else
+ break
+ end
+ # once the title has been found, collect all nodes up to the next header
+ elsif title_found == true
+ section_nodes << node
+ end
+ end
+
+ return section_nodes
+end
+
+
+# Main block
+
+puts "## Initial => Structured"
+puts "## 1-Initial patterns primed for upgrade to 2-Structured (based on Known Instances only)"
+l1_patterns = Dir["../../patterns/1-initial/*.md"]
+
+l1_patterns.each do |file|
+ known_instances_count = count_known_instances(file)
+ puts "#{known_instances_count} | #{file}" if known_instances_count >= 1
+end
+
+puts "\n"
+puts "## Structured => Validated"
+puts "## 2-Structured patterns primed for upgrade to 3-Validated (based on Known Instances only)"
+l2_patterns = Dir["../../patterns/2-structured/*.md", "../../patterns/2-structured/project-setup/*.md"]
+
+l2_patterns.each do |file|
+ known_instances_count = count_known_instances(file)
+ puts "#{known_instances_count} | #{file}" if known_instances_count >= 3
+end
diff --git a/patterns/1-initial/governance-levels.md b/patterns/1-initial/governance-levels.md
index 5b65d11a1..35ab3e408 100644
--- a/patterns/1-initial/governance-levels.md
+++ b/patterns/1-initial/governance-levels.md
@@ -83,6 +83,8 @@ Examples of promoting the model names (3) are:
## Known Instances
+* Flutter Entertainment
+

Flutter Entertainment define an [InnerSource Pyramid](https://innersource.flutter.com/how/) to describe 3 different InnerSource operating models: Readable Source, Guest Contributions and Maintainers in Multiple Teams. Each name is centrally documented. The use of these names is encouraged via repeated usage, direct training and categorisation of each InnerSource project.
diff --git a/patterns/1-initial/incubator-pipeline.md b/patterns/1-initial/incubator-pipeline.md
index 557fbf639..6f17bfbdb 100644
--- a/patterns/1-initial/incubator-pipeline.md
+++ b/patterns/1-initial/incubator-pipeline.md
@@ -60,7 +60,7 @@ This pattern was inspired by things like the Apache Software Foundation's incuba
## Known Instances
-Being implemented at U.S. Bank.
+* Being implemented at **U.S. Bank**.
## Status
diff --git a/patterns/1-initial/introducing-metrics-in-innersource.md b/patterns/1-initial/introducing-metrics-in-innersource.md
index 3550dd55b..89bbf5056 100644
--- a/patterns/1-initial/introducing-metrics-in-innersource.md
+++ b/patterns/1-initial/introducing-metrics-in-innersource.md
@@ -92,7 +92,7 @@ Continued monitoring of these metrics will help middle management and developers
## Known Instances
-Santander Bank
+* **Santander Bank**
## Status
diff --git a/patterns/2-structured/dedicated-community-leader.md b/patterns/2-structured/dedicated-community-leader.md
index 00ed71373..19e6ce321 100644
--- a/patterns/2-structured/dedicated-community-leader.md
+++ b/patterns/2-structured/dedicated-community-leader.md
@@ -58,7 +58,7 @@ Having excellent and dedicated community leaders is a precondition for the succe
## Known Instances
-_BIOS at Robert Bosch GmbH_. Note that InnerSource at Bosch was, for the majority, aimed at increasing innovation and to a large degree dealt with internal facing products. This pattern is currently not used at Bosch for lack of funding.
+* _BIOS at Robert Bosch GmbH_. Note that InnerSource at Bosch was, for the majority, aimed at increasing innovation and to a large degree dealt with internal facing products. This pattern is currently not used at Bosch for lack of funding.
## Alias
diff --git a/patterns/2-structured/document-your-guiding-principles.md b/patterns/2-structured/document-your-guiding-principles.md
index 160d43434..18a80b927 100644
--- a/patterns/2-structured/document-your-guiding-principles.md
+++ b/patterns/2-structured/document-your-guiding-principles.md
@@ -121,6 +121,10 @@ All Trusted Committers of a project are published.
## Known Instances
+* Europace AG
+* GitHub
+* Robert Bosch GmbH
+
### Europace AG
The InnerSource principles listed in the Solution above are mostly based on Europace's experience.
From 5c3eb97e6b6cbf1bd9f7486dd3a9d2cbaf48d705 Mon Sep 17 00:00:00 2001
From: Isabel Drost-Fromm
Date: Fri, 12 May 2023 11:15:23 +0200
Subject: [PATCH 02/38] shared-code-repo-different-from-build-repo.md - Moved
to InnerSource as a term, changed formatting, shortened name (#409)
* Moved to InnerSource as a term, changed formatting, shortened name
I believe this pattern does need a bit of love. I only made some first changes to the name "InnerSource", changed some formatting and shortened the name.
However I believe the solutions given are incomplete in particular wrt. build chain solutions to the issue. It might make sense to mention explicit release naming and numbering schemes. It might make sense to mention the option of setting up build systems to trigger new builds on upstream code changes or upstream releases.
* Spell out definition of SCM and add a link
---------
Co-authored-by: Sebastian Spier
---
.../shared-code-repo-different-from-build-repo.md | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/patterns/1-initial/shared-code-repo-different-from-build-repo.md b/patterns/1-initial/shared-code-repo-different-from-build-repo.md
index 9dc473520..eba9748f6 100644
--- a/patterns/1-initial/shared-code-repo-different-from-build-repo.md
+++ b/patterns/1-initial/shared-code-repo-different-from-build-repo.md
@@ -1,6 +1,6 @@
## Title
-Repo for Shared Code Different from Repo the Product Org Uses in its Build
+Source Repo different from Deployment Chain
## Patlet
@@ -8,7 +8,7 @@ Deal with the overhead of having shared code in a separate repository that isn't
## Problem
-Deal with the overhead of having shared code in a separate repository that isn't the same as the project-specific one that is tied to production builds.
+The InnerSource code repo is different from the repos used in production builds. This causes friction each time changes are made to the InnerSource repo.
## Context
@@ -16,11 +16,15 @@ Shared code is kept in an accessible repository that is different from SCMs used
## Forces
-When the shared code is in a separate repository, any use of it could result in forking modifications, leading to complications later when the source is changed by the owning organization. When starting an inner sourcing program, it is possible there are many SCM systems in use; and, frequently, a new SCM is used for the inner sourcing program. Migrating from one SCM to another is not trivial. Since the using organization has a copy, they might not be aware of changes to the shared code. It is difficult and expensive for the using organization to change their automated build process to use a foreign repo.
+When the shared code is in a separate repository, any use of it could result in forking modifications, leading to complications later when the source is changed by the owning organization. When starting an InnerSource program, it is possible there are many source control management systems ([SCM](https://en.wikipedia.org/wiki/Version_control)) in use; and, frequently, a new SCM is used for the InnerSource program. Migrating from one SCM to another is not trivial. Since the using organization has a copy, they might not be aware of changes to the shared code. It is difficult and expensive for the using organization to change their automated build process to use a foreign repo.
## Solution
-Continuous integration, not only to with testing but also in production (aligns with DevOps). Known marker that shows the code hasn't been modified. Improved communication between teams. Accountability when you screw up; hold people accountable. Publish good stats about the negative implications of errors and processes for making this everyone's problem.
+* Continuous integration, not only for testing but also in production (aligns with DevOps).
+* Known marker that shows the code hasn't been modified.
+* Improved communication between teams.
+* Accountability when you screw up; hold people accountable.
+* Publish good stats about the negative implications of errors and processes for making this everyone's problem.
## Resulting Context
From 903c68c5402b0aa336a72024b016efc02416f392 Mon Sep 17 00:00:00 2001
From: Sebastian Spier
Date: Sat, 20 May 2023 15:28:19 +0200
Subject: [PATCH 03/38] Removing link to innersourceportal.santander.com (#539)
---
translation/ja/patterns/innersource-portal.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/translation/ja/patterns/innersource-portal.md b/translation/ja/patterns/innersource-portal.md
index 3d64de4af..df90eaceb 100644
--- a/translation/ja/patterns/innersource-portal.md
+++ b/translation/ja/patterns/innersource-portal.md
@@ -75,7 +75,7 @@
* **ã¢ã¡ãªã«ã³èªç©º**ã¯ã[ã¤ã³ã¿ã¼ãã«ã¤ã³ãã¼ã½ã¼ã¹ãã¼ã±ãããã¬ã¤ã¹](https://tech.aa.com/2020-10-30-innersource/)ãä»ãã¦InnerSourceããã¸ã§ã¯ããæ¨é²ãã¦ãã¾ããSAPã¨åæ§ã«ãããã¸ã§ã¯ãã¯GitHubã®ãããã¯ã¨ã㦠`innersource` ã追å ãããã¨ã§èªå·±ç»é²ããã¾ããããã¸ã§ã¯ãã¯ãè¨èªããããã¯ããªã¼ãã³ã¤ã·ã¥ã¼ã®æ°ãªã©ã§æ¤ç´¢ããã£ã«ã¿ãªã³ã°ãå¯è½ã§ãã
-* **Banco Santander**社ã¯ãã¤ã³ãã¼ã½ã¼ã¹ããµãã¼ããã¦å¢ããããã«ã[Santander ONE Europe InnerSource Community](https://innersourceportal.santander.com/)ã¨ããå
¬éãã¼ã¿ã«ã使ãã¾ããããã®ãã¼ã¿ã«ã«ã¯ãããã¸ã§ã¯ãã®ã«ã¿ãã°ã«å ããããã¥ã¡ã³ããä»äºã®é²ãæ¹ããã¥ã¼ã¹ãã¤ãã³ããªã©ã®é¢é£ã³ã³ãã³ããå«ã¾ãã¦ãã¾ãã
+* **Banco Santander**社ã¯ãã¤ã³ãã¼ã½ã¼ã¹ããµãã¼ããã¦å¢ããããã«ãSantander ONE Europe InnerSource Communityã¨ããå
¬éãã¼ã¿ã«ã使ãã¾ããããã®ãã¼ã¿ã«ã«ã¯ãããã¸ã§ã¯ãã®ã«ã¿ãã°ã«å ããããã¥ã¡ã³ããä»äºã®é²ãæ¹ããã¥ã¼ã¹ãã¤ãã³ããªã©ã®é¢é£ã³ã³ãã³ããå«ã¾ãã¦ãã¾ãã

From 1d27905fb09e29631795c8953fe8a141d7f40d34 Mon Sep 17 00:00:00 2001
From: Sebastian Spier
Date: Mon, 22 May 2023 23:17:13 +0200
Subject: [PATCH 04/38] Adding vale for spell and style checking (#519)
* Add vale.
* Fixes to the spelling, discovered by our new spellchecker. Mostly fixes in the Structured patterns, some for the Initial patterns as well.
* Move config for pattern syntax linting to .github
* Explain spellchecking approach in the Contributor Handbook
---
.../lint-pattern-syntax}/pattern-template.js | 0
.../lint-pattern-syntax}/pattern-template.yml | 0
.github/workflows/lint-patterns.yml | 8 ++--
.github/workflows/vale.yml | 25 +++++++++++
.gitignore | 2 +
.vale.ini | 10 +++++
README.md | 8 ++--
meta/contributor-handbook.md | 2 +-
meta/pattern-template.md | 2 +-
patterns/1-initial/crossing-chasm.md | 2 +-
.../1-initial/discover-your-innersource.md | 2 +-
.../1-initial/explicit-shared-ownership.md | 4 +-
patterns/1-initial/governance-levels.md | 14 +++----
.../1-initial/innersource-guidance-group.md | 2 +-
.../1-initial/innersource-portal-hygiene.md | 6 +--
patterns/2-structured/30-day-warranty.md | 2 +-
patterns/2-structured/common-requirements.md | 4 +-
.../2-structured/contracted-contributor.md | 8 ++--
patterns/2-structured/core-team.md | 6 +--
.../crossteam-project-valuation.md | 12 +++---
.../dedicated-community-leader.md | 2 +-
.../document-your-guiding-principles.md | 42 +++++++++----------
patterns/2-structured/innersource-license.md | 2 +-
patterns/2-structured/innersource-portal.md | 4 +-
patterns/2-structured/maturity-model.md | 14 +++----
patterns/2-structured/praise-participants.md | 2 +-
.../project-setup/base-documentation.md | 2 +-
.../project-setup/communication-tooling.md | 2 +-
.../templates/CONTRIBUTING-template.md | 4 +-
.../templates/README-template.md | 2 +-
.../2-structured/repository-activity-score.md | 6 +--
patterns/2-structured/review-committee.md | 2 +-
patterns/2-structured/service-vs-library.md | 14 +++----
patterns/2-structured/start-as-experiment.md | 2 +-
patterns/2-structured/templates/rfc.md | 4 +-
...t-cross-team-decision-making-using-rfcs.md | 4 +-
patterns/2-structured/trusted-committer.md | 2 +-
37 files changed, 134 insertions(+), 95 deletions(-)
rename {lint => .github/lint-pattern-syntax}/pattern-template.js (100%)
rename {lint => .github/lint-pattern-syntax}/pattern-template.yml (100%)
create mode 100644 .github/workflows/vale.yml
create mode 100644 .gitignore
create mode 100644 .vale.ini
diff --git a/lint/pattern-template.js b/.github/lint-pattern-syntax/pattern-template.js
similarity index 100%
rename from lint/pattern-template.js
rename to .github/lint-pattern-syntax/pattern-template.js
diff --git a/lint/pattern-template.yml b/.github/lint-pattern-syntax/pattern-template.yml
similarity index 100%
rename from lint/pattern-template.yml
rename to .github/lint-pattern-syntax/pattern-template.yml
diff --git a/.github/workflows/lint-patterns.yml b/.github/workflows/lint-patterns.yml
index a2bb125ec..408619ea7 100644
--- a/.github/workflows/lint-patterns.yml
+++ b/.github/workflows/lint-patterns.yml
@@ -1,4 +1,6 @@
# from: https://github.com/marketplace/actions/markdown-linting-action
+# To test this locally, switch to the root of the repo and run:
+# markdownlint -r config/lint/pattern-template.js -c config/lint/pattern-template.yml patterns/2-structured/*.md patterns/2-structured/project-setup/*.md patterns/3-validated/*.md
name: Pattern Syntax Validation
on:
@@ -8,7 +10,7 @@ on:
pull_request:
paths:
- ".github/workflows/lint-patterns.yml"
- - "lint/*"
+ - ".github/lint-pattern-syntax/*"
- "patterns/2-structured/*.md"
- "patterns/2-structured/project-setup/*.md"
- "patterns/3-validated/*.md"
@@ -23,6 +25,6 @@ jobs:
- name: Lint pattern files (markdown)
uses: avto-dev/markdown-lint@v1
with:
- rules: './lint/pattern-template.js'
- config: './lint/pattern-template.yml'
+ rules: './.github/lint-pattern-syntax/pattern-template.js'
+ config: './.github/lint-pattern-syntax/pattern-template.yml'
args: 'patterns/2-structured/*.md patterns/2-structured/project-setup/*.md patterns/3-validated/*.md'
diff --git a/.github/workflows/vale.yml b/.github/workflows/vale.yml
new file mode 100644
index 000000000..c39a9d7ee
--- /dev/null
+++ b/.github/workflows/vale.yml
@@ -0,0 +1,25 @@
+name: Spelling & Styles
+
+on:
+ push:
+ branches:
+ - main
+ paths:
+ - '**.md'
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ vale:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Vale Linting
+ uses: errata-ai/vale-action@reviewdog
+ with:
+ files: '["patterns/2-structured/*.md", "patterns/2-structured/project-setup/*.md"]'
+ env:
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..a0d725221
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+# We want to ignore our vale StylesPath
+.github/vale/*
\ No newline at end of file
diff --git a/.vale.ini b/.vale.ini
new file mode 100644
index 000000000..8b6d88db1
--- /dev/null
+++ b/.vale.ini
@@ -0,0 +1,10 @@
+StylesPath = .github/vale
+MinAlertLevel = suggestion
+
+Packages = https://github.com/InnerSourceCommons/isc-styles/releases/latest/download/ISC.zip
+
+[*]
+BasedOnStyles = ISC
+
+; If you **don't** want to check for the correct spelling of "InnerSource", comment this in
+; ISC.InnerSource = NO
diff --git a/README.md b/README.md
index 19124023e..7d7c8e52c 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@ Our mission
* [Overcoming Project Management Time Pressures](patterns/1-initial/overcoming-project-management-time-pressures.md) - *Project management believes timeline pressure and commitments on feature content does not allow for developers to spend the time needed to develop shareable code and provide support.*
* [Introducing Metrics in InnerSource](patterns/1-initial/introducing-metrics-in-innersource.md) - *Involve all stakeholders in designing and interpreting metrics to measure the current status in terms of health and performance of the InnerSource initiative.*
* [Shared Code Repo Different from Build Repo](patterns/1-initial/shared-code-repo-different-from-build-repo.md) - *Deal with the overhead of having shared code in a separate repository that isn't the same as the project-specific one that is tied to production builds.*
-* [InnerSource Portal - Hygiene](patterns/1-initial/innersource-portal-hygiene.md) - *Allow generation of an official badge for projects intending to be recognised as InnerSource project within your company.*
+* [InnerSource Portal - Hygiene](patterns/1-initial/innersource-portal-hygiene.md) - *Allow generation of an official badge for projects intending to be recognized as InnerSource project within your company.*
* [Reluctance to Receive Contributions](patterns/1-initial/reluctance-to-accept-contributions.md) - *Core owner of shared asset is reluctant to take contributions due to the required maintenance that comes with them. Summary pattern that lays out four children patterns with three to be defined.*
* [Include Product Owners](patterns/1-initial/include-product-owners.md) - *Engaging and educating Product Owners about InnerSource can help them modify their actions (e.g., in the space of KPIs) to help InnerSource collaboration work better.*
* [Assisted Compliance](patterns/1-initial/assisted_compliance.md) - *Helping repo owners be compliant by writing their CONTRIBUTING.md for them as a pull request.*
@@ -73,10 +73,10 @@ Our mission
* [Transparent Governance Levels](patterns/1-initial/governance-levels.md) - *There are projects in multiple stages of InnerSource adoption. Contributors get confused when working with projects that are at different stages.*
* [Contained InnerSource](patterns/1-initial/contained-innersource.md) - *Apply InnerSource methods to facilitate collaboration in a cross-divisional project but don't invest in soliciting contributions from outside of that project.*
* [Good First Project](patterns/1-initial/good-first-project.md) - *An InnerSource program has been launched at an organization, and to get off to a successful start it requires some good first projects that lend themselves to InnerSource-style development. Assessing the InnerSource-readiness (fitness) of the candidate projects can help in selecting projects that have the potential to help demonstrate the power of InnerSource.*
-* [InnerSource Guidance Group](patterns/1-initial/innersource-guidance-group.md) - *A highly divergent set of development standards in different teams can slow down collaboration betweens these teams. A InnerSource Guidance Group that establishes broad governance and behavioral guidelines can help to reduce these frictions.*
+* [InnerSource Guidance Group](patterns/1-initial/innersource-guidance-group.md) - *A highly divergent set of development standards in different teams can slow down collaboration between these teams. A InnerSource Guidance Group that establishes broad governance and behavioral guidelines can help to reduce these frictions.*
* [Unified Source Code Inventory](patterns/1-initial/source-code-inventory.md) - *In a large organization with different legal entities is often hard to get full visibility into all software assets, in particular all source code. This situation reduces the opportunities to increase business value and keep liability costs, such as software maintenance, under control across the organization as a whole. An organization-level source code inventory addresses these issues while exploiting opportunities to identify and support valuable InnerSource assets.*
-* [Explicit Shared Ownership](patterns/1-initial/explicit-shared-ownership.md) - *A software component that several teams depend on has grown to the point where owners are no longer capable of taking full ownership. There is confusion who to involve for changes. Sharing ownership explicitly and making expected behaviour visible removes ambiguity. Writing a contributions document creates a natural way to evolve ownership.*
-* [Standarized Release Process](patterns/1-initial/release-process.md) - *Teams may be reluctant to use InnerSource projects that they are unfamiliar with when there is no clear release process apparent in the repository. Providing clear release notes and a published artifact (binary, docker image, jar, etc) gives people confidence you are publishing a quality product.*
+* [Explicit Shared Ownership](patterns/1-initial/explicit-shared-ownership.md) - *A software component that several teams depend on has grown to the point where owners are no longer capable of taking full ownership. There is confusion who to involve for changes. Sharing ownership explicitly and making expected behavior visible removes ambiguity. Writing a contributions document creates a natural way to evolve ownership.*
+* [Standard Release Process and Published Artifacts](patterns/1-initial/release-process.md) - *Teams may be reluctant to use InnerSource projects that they are unfamiliar with when there is no clear release process apparent in the repository. Providing clear release notes and a published artifact (binary, docker image, jar, etc) gives people confidence you are publishing a quality product.*
* [Overcoming the Not-Invented-Here Mindset](/patterns/1-initial/not-invented-here.md) - *Perfectly good solutions are being rejected because of "Not Invented Here" (NIH). Engineers and their managers will choose to implement functionality themselves first, even if an alternative exists. A shift towards a culture of "Proudly Found Elsewhere" can help reduce the negative impact of NIH.*
* [Balancing Openness and Security](/patterns/1-initial/balancing-openness-and-security.md) - *While InnerSource flourishes in environments with a high degree of shared code, Security/Legal prefers the limitation of source code access to only those that need it. By making Security/Legal part of the team, introducing explicit sharing levels and security policies for shared repositories, as well as defining what qualifies as sensitive information, code sharing can be facilitated while minimizing the associated risks.*
* [Crossing the InnerSource Chasm](/patterns/1-initial/crossing-chasm.md) - *Early InnerSource experiments have been successful. Methods that were successful convincing early teams stop working though when scaling the initiative. This chasm can be crossed by using different methods to reach people at different stages of the innovation curve.*
diff --git a/meta/contributor-handbook.md b/meta/contributor-handbook.md
index ffb60ad9d..592bfd160 100644
--- a/meta/contributor-handbook.md
+++ b/meta/contributor-handbook.md
@@ -47,6 +47,7 @@ To achieve a given maturity level, a pattern has to satisfy the requirements for
- The pattern links to related patterns of this level or higher.
- Links from the pattern to outside resources are working and are referencing a trusted resource - whether links are working is verified by [Check: Links](https://github.com/InnerSourceCommons/InnerSourcePatterns/actions/workflows/link-checker.yml)
- The pattern is added to at least one phase of the [InnerSource Program Mind Map](../pattern-categorization/README.md).
+ - Spelling & Styles checks pass - see [Check: Spelling & Styles](https://github.com/InnerSourceCommons/InnerSourcePatterns/actions/workflows/vale.yml)
- Artifacts:
- The patterns are stored as markdown files in [/patterns/2-structured][patterns-structured].
@@ -64,7 +65,6 @@ To achieve a given maturity level, a pattern has to satisfy the requirements for
- Uses & has no conflicts with working group terminology (defined by [Glossary](glossary.md) / implicit usage)
- Fits & has no conflicts with existing patterns (of this maturity level)
- Thorough review by at least two [trusted committers](../TRUSTED-COMMITTERS.md)
- - Spell Checking passes - *Oops! We have not yet developed this*
- Artifacts:
- The patterns are stored as markdown files in [/patterns/3-validated][patterns-validated].
diff --git a/meta/pattern-template.md b/meta/pattern-template.md
index 703c8778d..0464effe2 100644
--- a/meta/pattern-template.md
+++ b/meta/pattern-template.md
@@ -75,7 +75,7 @@ Often, this is yourself.
If you need to, find someone in the InnerSource Commons to be the nominal author (As Told To).
Could also be no-one if you do not want to take on authorship (common with a donut looking for a solution).
-## Acknowledgements (optional)
+## Acknowledgments (optional)
Include those who assisted in helping with this pattern - both for attribution and for possible future follow up.
Though optional, most patterns should list who helped in their creation.
diff --git a/patterns/1-initial/crossing-chasm.md b/patterns/1-initial/crossing-chasm.md
index 5970378bc..3a8320d2c 100644
--- a/patterns/1-initial/crossing-chasm.md
+++ b/patterns/1-initial/crossing-chasm.md
@@ -35,7 +35,7 @@ instead of running into all of the hurdles that early adopters run into.
- The goal is to increase collaboration, reduce duplication, increase knowledge
sharing.
- Some teams already adopted a lot of InnerSource best practices, often when
- doing so they had to fix hurdles within the organisation when adopting a more
+ doing so they had to fix hurdles within the organization when adopting a more
collaborative way of working.
- Some associates refuse to invest time in experimenting with new ways of
working, preferring a stable environment.
diff --git a/patterns/1-initial/discover-your-innersource.md b/patterns/1-initial/discover-your-innersource.md
index 926efe67c..f64a75c1a 100644
--- a/patterns/1-initial/discover-your-innersource.md
+++ b/patterns/1-initial/discover-your-innersource.md
@@ -53,7 +53,7 @@ Make it easy to find the reusable code.
* Tool with a central view (but people are more inclined to google externally than look internally)
* Concierge service (guide) to help product people find stuff. Might not scale but could be helpful in the beginning.
* Need some very visible lighthouse projects that start using inner source components and make positive statements about the inner source program.
-* Establish a common, asynchronous communication channel (e.g., like slack or metamorph or yammer) across team boundaries. This might not scale beyond a certain organisation size. It is possible people will start splitting this one channel into multiple channels by topic once traffic gets too high. Note: having one channel for many users of one tool might be considered an anti-pattern because they can't find it unless they already know about it.
+* Establish a common, asynchronous communication channel (e.g., like slack or metamorph or yammer) across team boundaries. This might not scale beyond a certain organization size. It is possible people will start splitting this one channel into multiple channels by topic once traffic gets too high. Note: having one channel for many users of one tool might be considered an anti-pattern because they can't find it unless they already know about it.
* Encourage (and reward) owners of reusable code to use the same search engine to continually search for products that are candidates for use and adoption of the reusable code but not currently doing so.
* Consider creating a marketplace for marketing InnerSource programs (management can use this mechanism to know which InnerSource projects to fund, but seeing how the marketplace reacts).
diff --git a/patterns/1-initial/explicit-shared-ownership.md b/patterns/1-initial/explicit-shared-ownership.md
index ce1f06b1d..aadcf36c9 100644
--- a/patterns/1-initial/explicit-shared-ownership.md
+++ b/patterns/1-initial/explicit-shared-ownership.md
@@ -4,11 +4,11 @@ Explicit Shared Ownership
# Patlet
-A software component that several teams depend on has grown to the point where owners are no longer capable of taking full ownership. There is confusion who to involve for changes. Sharing ownership explicitly and making expected behaviour visible removes ambiguity. Writing a contributions document creates a natural way to evolve ownership.
+A software component that several teams depend on has grown to the point where owners are no longer capable of taking full ownership. There is confusion who to involve for changes. Sharing ownership explicitly and making expected behavior visible removes ambiguity. Writing a contributions document creates a natural way to evolve ownership.
# Problem
-An organisation is already using InnerSource best practices in several teams. The architecture of the software offered has grown organically.
+An organization is already using InnerSource best practices in several teams. The architecture of the software offered has grown organically.
While talking about code ownership and accountability, teams notice that there is a component that is in a worrying state: Developed by an original team of authors it has grown it's userbase way beyond what the original team can handle. From time to time others step up to help out, however there is no formal process established. As a result, conflicts arise around who should do the work, and who should decide on project direction.
diff --git a/patterns/1-initial/governance-levels.md b/patterns/1-initial/governance-levels.md
index 35ab3e408..996ce276b 100644
--- a/patterns/1-initial/governance-levels.md
+++ b/patterns/1-initial/governance-levels.md
@@ -32,13 +32,13 @@ There are projects on GitHub, published purely for the pleasure of the author wi
There are projects where the roadmap is created in-house, hidden from public view. Where commit rights come and go with the contract of the employees of one company (e.g. MongoDB, Elastic, Tensorflow). Users are welcome to submit patches, they will even be mentored through. All development happens in the open, but control and strategy is never shared. This would be the equivalent of stage "Contributions Welcome".
-There are projects that share write access, but do not share the power to decide who gets write access next. This applies to everyone who is only a committer at an Apache project. There are projects that are fully shared across multiple independent organisations (e.g. k8s, any Apache project) - those would be "Shared Ownership".
+There are projects that share write access, but do not share the power to decide who gets write access next. This applies to everyone who is only a committer at an Apache project. There are projects that are fully shared across multiple independent organizations (e.g. k8s, any Apache project) - those would be "Shared Ownership".
-The same levels make sense inside of organisations.
+The same levels make sense inside of organizations.
## Context
-- InnerSource concepts are established within an organisation with multiple projects and teams adopting InnerSource.
+- InnerSource concepts are established within an organization with multiple projects and teams adopting InnerSource.
- Internal InnerSource practices are not prescribed in detail.
- Teams/projects have the autonomy to optimise for their local circumstances.
@@ -51,7 +51,7 @@ The same levels make sense inside of organisations.
## Solution
-The solution is to create a universally understood language to describe the InnerSource operating models that are used in your organisation.
+The solution is to create a universally understood language to describe the InnerSource operating models that are used in your organization.
We define **InnerSource operating model** as a description of how much influence the core development team of a project ist willing to share with contributing teams. Or in other terms, the level of influence a contributing team can gain in the respective project.
@@ -59,7 +59,7 @@ The shared language for these InnerSource operating models can be established wi
1. Identify the common recurring InnerSource operating models that exist in your teams and projects.
2. Document each model in detail, and give each a distinctive name.
-3. Promote the use of these names to describe projects until the name's meaning is understood across the whole organisation.
+3. Promote the use of these names to describe projects until the name's meaning is understood across the whole organization.
Examples of common InnerSource operating models (1) are:
@@ -77,8 +77,8 @@ Examples of promoting the model names (3) are:
## Resulting Context
- Cross team communication occurs efficiently without confusion using terms that are universally understood and centrally documented.
-- Organisation leaders understand the nuances within practising InnerSource and make better informed and more precise decisions that are easier to communicate.
-- Increased standardisation of InnerSource practices within the organisation as the named and documented building blocks are used by teams as a menu for adoption.
+- Organization leaders understand the nuances within practising InnerSource and make better informed and more precise decisions that are easier to communicate.
+- Increased standardisation of InnerSource practices within the organization as the named and documented building blocks are used by teams as a menu for adoption.
- Teams can adopt InnerSource best practices in a step-by-step way which makes adoption easier and less intimidating.
## Known Instances
diff --git a/patterns/1-initial/innersource-guidance-group.md b/patterns/1-initial/innersource-guidance-group.md
index 9b0c55773..9683d3320 100644
--- a/patterns/1-initial/innersource-guidance-group.md
+++ b/patterns/1-initial/innersource-guidance-group.md
@@ -4,7 +4,7 @@ InnerSource Guidance Group
## Patlet
-A highly divergent set of development standards in different teams can slow down collaboration betweens these teams. A InnerSource Guidance Group that establishes broad governance and behavioral guidelines can help to reduce these frictions.
+A highly divergent set of development standards in different teams can slow down collaboration between these teams. A InnerSource Guidance Group that establishes broad governance and behavioral guidelines can help to reduce these frictions.
## Problem
diff --git a/patterns/1-initial/innersource-portal-hygiene.md b/patterns/1-initial/innersource-portal-hygiene.md
index 97656ca3b..9ab6392ea 100644
--- a/patterns/1-initial/innersource-portal-hygiene.md
+++ b/patterns/1-initial/innersource-portal-hygiene.md
@@ -6,7 +6,7 @@ InnerSource Portal - Hygiene
Based off the [InnerSource portal](../2-structured/innersource-portal.md) pattern.
-Allow generation of an official badge for projects intending to be recognised as InnerSource project within your company.
+Allow generation of an official badge for projects intending to be recognized as InnerSource project within your company.
This will help users distinguishing InnerSource projects which strive to adhere to InnerSourcing principals from repos that - have been made public by mistake, due to negligence or for ease of discoverability (but do NOT adhere to InnerSource patterns/best practices). Furthermore the badge serves as additional marketing for the InnerSource initiative at your company.
@@ -17,7 +17,7 @@ This will help users distinguishing InnerSource projects which strive to adhere
## Context
-Large organisation with lots of public repos, not all necessarily meeting the desired innerSource project standard.
+Large organization with lots of public repos, not all necessarily meeting the desired innerSource project standard.
## Forces
@@ -57,7 +57,7 @@ The last step is for users update there repos `README.md` file to include the ba
Query InnerSource projects which have an expired badge. Delete badge file causing the badge to not appear in the repos rendered README anymore.
- Notify projects approaching expiry.
Query InnerSource projects which have a badge close to expiration. Send a notification to the InnerSource projects code owners, publish an issue to the repo, publish a message in the InnerSource channel on Teams. This should be ample warning to go update the badge.
-- Bonus: Notify owners of public repos not registered as InnerSource projects yet to either make their repos private or to consider registering their repo as an innerSource project. This isn't entirely related to hygiene of the InnerSource portal rather general hygiene of all repos in your organisations SCM system. Also servers as excellent marketing and awareness generation for your organisations InnerSource initiative.
+- Bonus: Notify owners of public repos not registered as InnerSource projects yet to either make their repos private or to consider registering their repo as an innerSource project. This isn't entirely related to hygiene of the InnerSource portal rather general hygiene of all repos in your organizations SCM system. Also servers as excellent marketing and awareness generation for your organizations InnerSource initiative.
## Resulting Context
diff --git a/patterns/2-structured/30-day-warranty.md b/patterns/2-structured/30-day-warranty.md
index b1a37d172..7c2ab75c3 100644
--- a/patterns/2-structured/30-day-warranty.md
+++ b/patterns/2-structured/30-day-warranty.md
@@ -54,7 +54,7 @@ In addition it helps to provide clear [contribution guidelines](./project-setup/
- Cedric Williams
-## Acknowledgement
+## Acknowledgments
- Dirk-Willem van Gulik
- Padma Sudarsan
diff --git a/patterns/2-structured/common-requirements.md b/patterns/2-structured/common-requirements.md
index c13899b92..0381be2b2 100644
--- a/patterns/2-structured/common-requirements.md
+++ b/patterns/2-structured/common-requirements.md
@@ -56,7 +56,7 @@ A related challenge (and possible new pattern) is a circular story-writing exerc
## Known Instances
-* Large telecom provider
+* Large telecommunications provider
## Status
@@ -66,7 +66,7 @@ A related challenge (and possible new pattern) is a circular story-writing exerc
Robert Hanmer
-## Acknowledgements
+## Acknowledgments
* Manrique Lopez
* Daniel Izquierdo
diff --git a/patterns/2-structured/contracted-contributor.md b/patterns/2-structured/contracted-contributor.md
index d36043fc3..0790f6774 100644
--- a/patterns/2-structured/contracted-contributor.md
+++ b/patterns/2-structured/contracted-contributor.md
@@ -31,12 +31,12 @@ initiative and partake in periodic reviews until there is proof it yields
the expected results (see [Review Committee](review-committee.md)). Top level
management has announced their support for InnerSource on various company-internal meetings.
-However, top-level management has not yet empowered or incentivised mid-level
+However, top-level management has not yet empowered or incentivized mid-level
managers to allow or even motivate their employees to participate in
cross-divisional InnerSource activities. In addition to that, the capacity of
every associate is usually allocated to non InnerSource projects for 100 % of
their working time. Cross organizational collaboration is not yet the norm and
-line managers usually do not have targets outside of their own organisation.
+line managers usually do not have targets outside of their own organization.
Contributions to InnerSource projects are expected to be made during working
hours, not during free time.
@@ -46,7 +46,7 @@ hours, not during free time.
- Line managers and HR will, by default, judge the performance of their subordinates against their business units goals, which might not be aligned with the goals of the InnerSource community.
- The less executive air cover a line manager perceives he has, the less likely is he or she to have his or her staff participate in InnerSource activities which contribute to another business unit.
- The less transparency and control a line manager has of work done by one of her subordinates, the less likely is she to allow her to contribute.
-- The less formally work in InnerSource is managed and organised, the less likely a line manager who is accustomed to formal processes is to sign off on one of her employees contributing to InnerSource.
+- The less formally work in InnerSource is managed and organized, the less likely a line manager who is accustomed to formal processes is to sign off on one of her employees contributing to InnerSource.
- The more time an associate spends on contributions to an InnerSource project which does not benefit his day-to-day work, the more will the workload for his teammates in his business unit increase.
- Individual contributors will likely consider participating in InnerSource as an opportunity to enhance their professional network within the company and to gain knowledge and experience in the technical area of her contributions.
@@ -93,7 +93,7 @@ A formal contracting is also beneficial for contributors and communities:
- Georg Grütter (Robert Bosch GmbH)
-## Acknowledgements
+## Acknowledgments
- Diogo Fregonese (Robert Bosch GmbH)
- Robert Hansel (Robert Bosch GmbH)
diff --git a/patterns/2-structured/core-team.md b/patterns/2-structured/core-team.md
index 84c6504e0..e62139595 100644
--- a/patterns/2-structured/core-team.md
+++ b/patterns/2-structured/core-team.md
@@ -20,7 +20,7 @@ This could be due to things like:
Some possible causes:
* Poor documentation (again).
* Frequent bugs.
- * Unintuitive setup.
+ * Nonintuitive setup.
## Story
@@ -35,7 +35,7 @@ It's clearly due for an overhaul (e.g. refactoring, testing, documentation, etc.
* Many teams need the project.
* The project has significant tech debt.
* Slow adoption and iteration on the project.
-* There is not a owner or maintainer who takes reponsibility for the project and contribution ecosystem as a whole.
+* There is not a owner or maintainer who takes responsibility for the project and contribution ecosystem as a whole.
## Forces
@@ -53,7 +53,7 @@ Here are some specific examples:
* Production bugs
* Documentation
-* Onboarding tutorials and examples
+* On-boarding tutorials and examples
* Automated testing
* CI/CD
* Local environment
diff --git a/patterns/2-structured/crossteam-project-valuation.md b/patterns/2-structured/crossteam-project-valuation.md
index 1fede7cc2..96b89c8e2 100644
--- a/patterns/2-structured/crossteam-project-valuation.md
+++ b/patterns/2-structured/crossteam-project-valuation.md
@@ -15,7 +15,7 @@ Here's a data-driven way to represent your project that both articulates its val
## Problem
Cross-team projects can potentially have a very large impact on the company yet are difficult to represent in a data-driven fashion.
-As a result, it is easy and common to either pursue projects that does not provide real value or to underfund what would otherwise produce great value.
+As a result, it is easy and common to either pursue projects that do not provide real value or to underfund what would otherwise produce great value.
## Forces
@@ -49,7 +49,7 @@ The idea is for the group of experts to be able to say to each other, "We don't
Specifically, you should estimate a _maximum_ reasonable time to consume your project output and _minimum_ reasonable times for consumers to otherwise home-roll, use and maintain their own solutions.
One note about cost of "rolling your own solution" (home-roll). The cost to home-roll a solution is NOT necessarily (very unlikely, in fact) the same as the cost of making a shared solution.
-Oftentimes for the same functionality the modularity and quality involved in building a cross-team, shared solution makes it a noticeably higher investment than a quick, hardcoded implementation used just once.
+Oftentimes for the same functionality the modularity and quality involved in building a cross-team, shared solution makes it a noticeably higher investment than a quick, hard-coded implementation used just once.
### Formula
@@ -58,9 +58,9 @@ Once you have your worst-case bounds you can value your cross-team project outpu
```
[Time Saved] - [Time Invested]
-([Count of New Onboardings] * [Cost to Home-Roll] * [Percent Useful Functionality] + [Count of Usages] * [Maintenance Cost Per Use]) - ([Count of New Onboardings] * [Cost to Onboard])
+([Count of New On-boardings] * [Cost to Home-Roll] * [Percent Useful Functionality] + [Count of Usages] * [Maintenance Cost Per Use]) - ([Count of New On-boardings] * [Cost to On-board])
-[Count of New Onboardings] * ([Cost to Home-Roll] * [Percent Useful Functionality] - [Cost to Onboard]) + [Count of Usages] * [Maintenance Cost Per Use]
+[Count of New On-boardings] * ([Cost to Home-Roll] * [Percent Useful Functionality] - [Cost to On-board]) + [Count of Usages] * [Maintenance Cost Per Use]
```
### Commentary
@@ -81,7 +81,7 @@ Some may be concerned about the lack of accuracy in this valuation approach. It
1. Help those involved to know what areas of cross-team effort are higher priority to pursue based on their value.
In-practice, as long as these valuations are within an order-of-magnitude of reality and one-another, they are sufficiently accurate to fill these purposes.
-They will provide a head-and-shoulders improvement in on-the-ground results over the ad-hoc valuations (and resultant effects) described in the **Problem** section at the beginning of this document.
+They will provide a head-and-shoulders improvement in on-the-ground results over the ad hoc valuations (and resultant effects) described in the **Problem** section at the beginning of this document.
## Resulting Context
@@ -103,6 +103,6 @@ They will provide a head-and-shoulders improvement in on-the-ground results over
* Russ Rutledge
-## Acknowledgement
+## Acknowledgments
* Jeremiah Wright for teaching me to think about cross-team projects as an internal business dealing in the currency of developer time.
diff --git a/patterns/2-structured/dedicated-community-leader.md b/patterns/2-structured/dedicated-community-leader.md
index 19e6ce321..91f3c3d0d 100644
--- a/patterns/2-structured/dedicated-community-leader.md
+++ b/patterns/2-structured/dedicated-community-leader.md
@@ -73,7 +73,7 @@ Dedicated Community Manager
- Georg Grütter (Robert Bosch GmbH)
- Diogo Fregonese (Robert Bosch GmbH)
-## Acknowledgements
+## Acknowledgments
- Tim Yao
- Padma Sudarsan
diff --git a/patterns/2-structured/document-your-guiding-principles.md b/patterns/2-structured/document-your-guiding-principles.md
index 18a80b927..01c423dfb 100644
--- a/patterns/2-structured/document-your-guiding-principles.md
+++ b/patterns/2-structured/document-your-guiding-principles.md
@@ -4,21 +4,21 @@ Document your Guiding Principles
## Patlet
-The usual InnerSource explanation of "applying open source best practices inside an organisation" does not work well with people lacking an open source background.
+The usual InnerSource explanation of "applying open source best practices inside an organization" does not work well with people lacking an open source background.
As a remedy the most important principles of InnerSource get documented and published widely.
## Problem
-The organisation is trying to roll out InnerSource at a larger scale.
+The organization is trying to roll out InnerSource at a larger scale.
The initiative started among open source enthusiasts.
The goal is now to get buy-in from people that are lacking open source experience.
For that audience the typical slogan of "applying open source best practices" is no longer sufficient to transport the message of what InnerSource is, which problems it solves and which tools it uses for solving these issues.
-As a result InnerSource adoption in the organisation slows down.
+As a result InnerSource adoption in the organization slows down.
Teams develop diverging ideas of what the goals of InnerSource is about and how to best implement it leading to confusion when contributors are starting to cross team boundaries.
## Story
-Early experiments in an organisation have shown that open source collaboration best practices can be beneficial.
+Early experiments in an organization have shown that open source collaboration best practices can be beneficial.
The next step now is to move the initiative to teams and individuals lacking a deep background in open source.
The goal now is to clearly communicate the goals of the InnerSource initiative
@@ -32,27 +32,27 @@ as well as a clear path towards achieving these goals.
## Forces
* Teams have trouble communicating exactly what the important aspects of InnerSource are.
-* People lacking open source experience fail to understand what it means to bring open source best practices into the organisation.
+* People lacking open source experience fail to understand what it means to bring open source best practices into the organization.
* On a daily basis teams trying to follow InnerSource best practices have a hard time deciding if what they are doing is inline with general InnerSource values.
## Solution
-Those driving the InnerSource initiative in the organisation need to help the teams and individuals that are lacking a deep background in open source, and therefore have a less intuitive understanding of InnerSource.
+Those driving the InnerSource initiative in the organization need to help the teams and individuals that are lacking a deep background in open source, and therefore have a less intuitive understanding of InnerSource.
Clarity should be provided to teams and individuals by documenting these two areas:
-1. **Purpose** - Why does the organisation want to adopt InnerSource?
+1. **Purpose** - Why does the organization want to adopt InnerSource?
2. **Principles** - Which InnerSource principles will help to address these challenges?
The following sections provide more details about both of these, meant as possible starting points to document them for your organization.
-### Why does the organisation want to adopt InnerSource?
+### Why does the organization want to adopt InnerSource?
-In the past InnerSource has proven to be successful to solve several issues commonly found in organisations.
+In the past InnerSource has proven to be successful to solve several issues commonly found in organizations.
However which organizational challenges does your organization hope to improve upon using InnerSource?
-Instead of going for generalizations, try to exactly identify the solutions that match the challenges of your organisation - preferably with those affected by the change you want to see.
+Instead of going for generalizations, try to exactly identify the solutions that match the challenges of your organization - preferably with those affected by the change you want to see.
Some challenges that others have addressed by following InnerSource best practices:
@@ -71,9 +71,9 @@ Once teams understand which problems InnerSource will help them address, the nex
Based on basic open source development principles the following guidelines have been proven successful:
-(1) Code must be transparently hosted within the organisation
+(1) Code must be transparently hosted within the organization
-Source code, documentation, data relevant for project development must be available and easy to find for anyone in the organisation.
+Source code, documentation, data relevant for project development must be available and easy to find for anyone in the organization.
(2) Contributions over feature requests
@@ -84,7 +84,7 @@ Projects provide contribution guidelines to avoid friction.
(3) Mistakes are opportunities for learning
-With work visible across the entire organisation any mistake is visible to everyone.
+With work visible across the entire organization any mistake is visible to everyone.
As a result a culture must be established in which mistakes are opportunities for learning instead of failure that should be avoided at all cost.
(4) Written over verbal communication
@@ -104,7 +104,7 @@ Previous communication needs to be stored in a way that can easily be searched.
Two caveats though:
1. This does not replace structured documentation. It can serve as a starting point to collect structured documentation though.
-2. There are exceptions to the rule of everything being written and accessible to the entire organisation: People related discussions as well as security related discussions are sensitive and should not be held in public.
+2. There are exceptions to the rule of everything being written and accessible to the entire organization: People related discussions as well as security related discussions are sensitive and should not be held in public.
(6) Reward Trusted Committership
@@ -114,10 +114,10 @@ All Trusted Committers of a project are published.
## Resulting Context
-* Organisation members understand which challenges they can address by applying InnerSource best practices.
-* Organisation members lacking prior open source experience understand the basic values and principles of InnerSource projects.
-* Organisation members lacking prior open source experience are able to check their daily activities against a set of common established values.
-* The organisation's development practices become more similar to open source projects thus making it easier for organisation members to participate in open source projects.
+* Organization members understand which challenges they can address by applying InnerSource best practices.
+* Organization members lacking prior open source experience understand the basic values and principles of InnerSource projects.
+* Organization members lacking prior open source experience are able to check their daily activities against a set of common established values.
+* The organization's development practices become more similar to open source projects thus making it easier for organization members to participate in open source projects.
## Known Instances
@@ -127,8 +127,8 @@ All Trusted Committers of a project are published.
### Europace AG
-The InnerSource principles listed in the Solution above are mostly based on Europace's experience.
-For more details see [Europace InnerSource Prinzipien](https://tech.europace.de/post/europace-inner-source-prinzipien/) (in German).
+The InnerSource principles listed in the Solution section above are mostly based on Europace's experience.
+See [details](https://tech.europace.de/post/europace-inner-source-prinzipien/) (in German).
### GitHub
@@ -206,7 +206,7 @@ Structured
* Isabel Drost-Fromm
* Georg Grütter
-## Acknowledgements
+## Acknowledgments
* Zack Koppert - for sharing GitHub's approach in the Known Instances
diff --git a/patterns/2-structured/innersource-license.md b/patterns/2-structured/innersource-license.md
index 37e199bdf..1183ea45a 100644
--- a/patterns/2-structured/innersource-license.md
+++ b/patterns/2-structured/innersource-license.md
@@ -37,7 +37,7 @@ At the time of sharing the source code, it can not be reliably predicted what th
Creating an **InnerSource License** customized to the needs of the organization in question (and their legal entities). This license needs to be generic enough to be applied to the most important inter-company relationships.
-It is important to write the InnerSource License such that it truly allows for OpenSource-like collaborations across the boundaries of the involved legal entities. Therefore the 4 freedoms of free software should be integrated into the license.
+It is important to write the InnerSource License such that it truly allows for open source style collaboration across the boundaries of the involved legal entities. Therefore the 4 freedoms of free software should be integrated into the license.
The License is written as a formal legal document, and can be used as part of contracts between the legal entities to govern the code sharing agreements.
diff --git a/patterns/2-structured/innersource-portal.md b/patterns/2-structured/innersource-portal.md
index 88c640a35..a12e28a82 100644
--- a/patterns/2-structured/innersource-portal.md
+++ b/patterns/2-structured/innersource-portal.md
@@ -69,7 +69,7 @@ A [reference implementation](https://github.com/SAP/project-portal-for-innersour
* **Elbit Systems** has used this pattern and added gamification on top.
* [Gamification As Means of Cultural Change and InnerSource Engagement Booster](https://www.oreilly.com/library/view/oscon-2018-/9781492026075/video321579.html) | Shelly Nizri | OSCON 2018 - Portland, Oregon
* Of Islands, Monsters & InnerSource [(slides)](https://docs.google.com/presentation/d/1P1OCEK9B6eSrVRUclVWY6meSI-qHOBjM_UAPNvCZamU/edit#slide=id.p15), [(video)](https://drive.google.com/file/d/1pM89uHMn0vhE3ayFJDGYcCO8R0tAXXZD/view?usp=drivesdk) | InnerSource Spring Summit 2019 (Galway, Ireland)
- * The code realizing this platform has been open sourced and is available at [gitlab.com/gilda2](https://gitlab.com/gilda2)
+ * The [code](https://gitlab.com/gilda2) realizing this platform has been open sourced.
* **American Airlines** promotes InnerSource projects via an [internal InnerSource Marketplace](https://tech.aa.com/2020-10-30-innersource/). Similarly to SAP, projects self-register by adding `innersource` as a GitHub topic. Projects are searchable and filterable by language, topics, number of open issues, etc.
* **Banco Santander** has created a public portal called "Santander ONE Europe InnerSource Community" to support and increase InnerSource adoption. In addition to the catalog of projects the portal includes relevant content such as documentation, way of working, news, and events.
@@ -91,7 +91,7 @@ A [reference implementation](https://github.com/SAP/project-portal-for-innersour
* Stephen McCall
-## Acknowledgements
+## Acknowledgments
* Shelly Nizri
* Melinda Malmgren
diff --git a/patterns/2-structured/maturity-model.md b/patterns/2-structured/maturity-model.md
index e9ce8c070..8e410625e 100644
--- a/patterns/2-structured/maturity-model.md
+++ b/patterns/2-structured/maturity-model.md
@@ -96,7 +96,7 @@ When working in host teams mistakes will automatically be widely visible. In ord
For silos to be reduced colleagues need to be comfortable sharing feedback openly. One easy way to support that is to use the same communication principles across hierarchies.
-Ideally you will end up with proper communication channels that are known by anyone in the organization - with channels focussed on different goals (announcements, user support, development channels, infra discussions, etc.). Some of the best practices you will establish as your InnerSource projects mature: Adoption of netiquette guidelines, opening a proven set of standard channels (which are being archived, publicly accessible, searchable) for each new InnerSource project.
+Ideally you will end up with proper communication channels that are known by anyone in the organization - with channels focused on different goals (announcements, user support, development channels, infra discussions, etc.). Some of the best practices you will establish as your InnerSource projects mature: Adoption of netiquette guidelines, opening a proven set of standard channels (which are being archived, publicly accessible, searchable) for each new InnerSource project.
* CF-0: There are no processes nor established channels. Some members of the organization share materials via private channels or discussions.
* CF-1: The organization is in the process of establishing internal guidelines and channels for encouraging diverse points of view about company/departmental decisions, so that anyone belonging to the organization can use them. Some members of the organization share decision-making materials informally using unofficial platforms. Leaders maintain at least one clear and direct channel for organization members to share opinions constructively on some matters relevant to their work.
@@ -139,12 +139,12 @@ Having a baseline of shared values makes it easier to work across team boundarie
* SP-0: No sharing culture nor written policies.
* SP-1: Some members of the organization unite to define values and principles, but are not clearly supported when they do.
-* SP-2: Members of the organization collectively document shared visions and agreements like mission statements and codes of conduct, make them easily accessible, and reference them often. Onboarding materials and orientation rituals provide adequate context for helping new members understand how the organization will benefit from their contributions.
+* SP-2: Members of the organization collectively document shared visions and agreements like mission statements and codes of conduct, make them easily accessible, and reference them often. On-boarding materials and orientation rituals provide adequate context for helping new members understand how the organization will benefit from their contributions.
* SP-3: Shared values and principles inform decision-making, conflict resolution, and assessment processes among members of the organization, who reference these values and principles consistently in both verbal and written formats.
**Feel part of the Organization**
-One of the possible reasons for introducing InnerSource into organisations can be increased engagement. This point tracks how engagement is changing while adopting InnerSource.
+One of the possible reasons for introducing InnerSource into organizations can be increased engagement. This point tracks how engagement is changing while adopting InnerSource.
* PA-0: Low engagement, no collaboration and people do not feel comfortable sharing with others.
* PA-1: Members of the organization feel comfortable sharing their thoughts and opinions without fear of retribution, but only in familiar domains. People understand that the best ideas win, and leadership responsibilities accrue to people with histories of contribution and commitment.
@@ -164,7 +164,7 @@ In order to drive adoption, extrinsic motivators can be used to increase cross t
**Monitoring Policies**
-InnerSource projects need a means for self assessment. Metrics can be one aspect to facilitate this assessment. Also, in organisations with a mature InnerSource adoption level we expect adoption of the method to be tracked based on clear, agreed upon metrics.
+InnerSource projects need a means for self assessment. Metrics can be one aspect to facilitate this assessment. Also, in organizations with a mature InnerSource adoption level we expect adoption of the method to be tracked based on clear, agreed upon metrics.
* MP-0: No existing monitoring policies at any level in the organization.
* MP-1: Metrics are important for certain teams, and they start using them in an isolated way.
@@ -175,7 +175,7 @@ InnerSource projects need a means for self assessment. Metrics can be one aspect
Not only should feature development be owned by InnerSource teams - support and maintenance is also part of the teams core tasks.
-* SM-0: Support given by the core dev or support team. A business contract guaranties the support. There is no knowledge about the product outside the team.
+* SM-0: Support given by the core development or support team. A business contract guaranties the support. There is no knowledge about the product outside the team.
* SM-1: There are rules and regulations to formalize the support on the product, given by a dedicated supporting team.
* SM-2: Support for InnerSource contributions is formalized through InnerSource patterns like [30 Day Warranty](./30-day-warranty.md) or [Service vs. Library](./service-vs-library.md).
* SM-3: There are rules and regulations to formalize the support on the product, given by a mature community.
@@ -195,7 +195,7 @@ InnerSource comes with explicit roles. While in early stages some patterns may b
* RO-0: There are no specific roles helping InnerSource adoption. Only common development roles are present: developer, analyst, tester, etc.
* RO-1: Occasionally some individuals and teams contribute to other projects. These are technical contributions, where the user/contributor role is seen. For some teams, it can be identified at least one member being a technical reference, who explains the development process to other development team members. He/she could be a candidate for covering the trusted committer role.
-* RO-2: An InnerSource Officer role is in charge of governance and support, including processes, etc. Identifies the education needs and ensures it is provided to the organization. Leads and mentors the organization in the engagement in IS projects. Is the first formal step in the way, defining the IS vision and roadmap. The organization has defined a trusted committer role, being a point of contact/reference not only for dev team members but also for external contributors. There is a standard process describing how to contribute to the community, contributor role is present. Data Scientist role is in charge of managing the traces of activity left by the InnerSource initiative, needed to measure the IS evolution. Trusted committer role will evolve to a more technical profile, and a community manager will be in charge of "energizing" the community, being his main responsibility to attract and retain new developers/users (contributors/community members).
+* RO-2: An InnerSource Officer role is in charge of governance and support, including processes, etc. Identifies the education needs and ensures it is provided to the organization. Leads and mentors the organization in the engagement in IS projects. Is the first formal step in the way, defining the IS vision and roadmap. The organization has defined a trusted committer role, being a point of contact/reference not only for development team members but also for external contributors. There is a standard process describing how to contribute to the community, contributor role is present. Data Scientist role is in charge of managing the traces of activity left by the InnerSource initiative, needed to measure the IS evolution. Trusted committer role will evolve to a more technical profile, and a community manager will be in charge of "energizing" the community, being his main responsibility to attract and retain new developers/users (contributors/community members).
* RO-3: Evangelists are moving inside organization, to let others know about the current work, what InnerSource does and how to do it, and help others to understand and become part of the initiative. Non technical contributors appear.
## Resulting Context
@@ -221,7 +221,7 @@ long term.
* Jorge
* Nerea
-## Acknowledgements
+## Acknowledgments
* Alexander Andrade (special thanks for the spelling fixes)
diff --git a/patterns/2-structured/praise-participants.md b/patterns/2-structured/praise-participants.md
index 27dc7aecc..10271045b 100644
--- a/patterns/2-structured/praise-participants.md
+++ b/patterns/2-structured/praise-participants.md
@@ -77,7 +77,7 @@ Overdoing it may feel insincere and mechanical and defeat your purpose in reachi
* Russ Rutledge
-## Acknowledgements
+## Acknowledgments
* [Todd Lisonbee](https://github.com/tlisonbee) for encouraging to "keep it real".
* [Isabel Drost-Fromm](https://github.com/MaineC) for [this extra explanation](https://youtu.be/h3MPewsk5PU?t=357) of a "qualified" thank you.
diff --git a/patterns/2-structured/project-setup/base-documentation.md b/patterns/2-structured/project-setup/base-documentation.md
index 746c87079..c076d5a61 100644
--- a/patterns/2-structured/project-setup/base-documentation.md
+++ b/patterns/2-structured/project-setup/base-documentation.md
@@ -12,7 +12,7 @@ the most common questions on their own.
## Problem
-A team wants to share either a freshly started or a pre-existing project with
+A team wants to share either a freshly started or a preexisting project with
the wider organization and receive contributions to it. Potential contributors
often are lost: They are failing to identify the team's preferred communication
channels. They have trouble quickly making a judgment about whether a new
diff --git a/patterns/2-structured/project-setup/communication-tooling.md b/patterns/2-structured/project-setup/communication-tooling.md
index 6e6af3612..b1fa99641 100644
--- a/patterns/2-structured/project-setup/communication-tooling.md
+++ b/patterns/2-structured/project-setup/communication-tooling.md
@@ -10,7 +10,7 @@ By consistently using asynchronous communication tooling, the project makes disc
## Problem
A team is open to receiving contributions from downstream users of their
-component. Coordination and communication happens in an ad-hoc fashion though
+component. Coordination and communication happens in an ad hoc fashion though
leading to incoherent information being shared, delays in answers received,
contributors pinging multiple host team members before receiving a definitive
answer.
diff --git a/patterns/2-structured/project-setup/templates/CONTRIBUTING-template.md b/patterns/2-structured/project-setup/templates/CONTRIBUTING-template.md
index f45541a25..a42cd013f 100644
--- a/patterns/2-structured/project-setup/templates/CONTRIBUTING-template.md
+++ b/patterns/2-structured/project-setup/templates/CONTRIBUTING-template.md
@@ -11,7 +11,7 @@ improving documentation, fixes to bugs, as well as new feature implementations.
Add information on how to submit bug reports here. This should include
hints about which type of information the project will need in order to
reproduce and fix issues. It can also include information on commonly found
-mis-configurations that look like bugs.
+misconfigurations that look like bugs.
Also include information on what contributors can expect in terms of time to
first response and process after that.
@@ -47,5 +47,5 @@ if that route is open to contributors.
This section serves as a reminder to existing and explanation for new Trusted
Committers detailing how to add others to the host team. Again ideally this
-information is identical for all projects in the organisation so central
+information is identical for all projects in the organization so central
information can be linked to from here.
diff --git a/patterns/2-structured/project-setup/templates/README-template.md b/patterns/2-structured/project-setup/templates/README-template.md
index 699283a1b..07fe0def2 100644
--- a/patterns/2-structured/project-setup/templates/README-template.md
+++ b/patterns/2-structured/project-setup/templates/README-template.md
@@ -43,7 +43,7 @@ communication channels.
This is a good place to give credit to Trusted Committers of the project.
It's also a good place to include information on what being a Trusted Committer
-means for this project - although ideally all projects in an organisation use
+means for this project - although ideally all projects in an organization use
the same definition that is only linked to from here. The reason to keep the
link here is for colleagues who have no or little experience with working in and
contributing to InnerSource projects to have a direct link back to company wide
diff --git a/patterns/2-structured/repository-activity-score.md b/patterns/2-structured/repository-activity-score.md
index 81c24c3d1..c7d699058 100644
--- a/patterns/2-structured/repository-activity-score.md
+++ b/patterns/2-structured/repository-activity-score.md
@@ -46,7 +46,7 @@ The repository activity score is a numeric value that represents the (GitHub) ac
In addition, it considers activity parameters like last update and creation date of the repo to give young projects with a lot of traction a boost.
Projects with contributing guidelines, active participation stats, and issues (public backlog) receive a higher ranking as well.
-All of this can be fetched and calculated automatically using the result set of the [GitHub search API](https://docs.github.com/en/rest/search#search-repositories) and [GitHub statistics API](https://docs.github.com/en/rest/metrics/statistics). Other code versioning systems like BitBucket, Gitlab, Gerrit can be integrated as well if a similar API is available.
+All of this can be fetched and calculated automatically using the result set of the [GitHub search API](https://docs.github.com/en/rest/search#search-repositories) and [GitHub statistics API](https://docs.github.com/en/rest/metrics/statistics). Other code versioning systems like Bitbucket, GitLab, Gerrit can be integrated as well if a similar API is available.
The code below assumes the variable `repo` contains an entity fetched from the GitHub `search` API and the `participation` object contains an entity from the GitHub `stats/participation` API.
@@ -114,7 +114,7 @@ The repository activity score is a simple calculation based on the GitHub API. I
## Known Instances
-* Used in SAP's InnerSource project portal to define the default order of the InnerSource projects. It was first created in July 2020 and is fine-tuned and updated frequently ever since. When proposed to InnerSourceCommons in July 2020, this pattern emerged. Also see [Michael Graf & Harish B (SAP) at ISC.S11 - The Unexpected Path of Applying InnerSource Patterns](https://www.youtube.com/watch?v=6r9QOw9dcQo&list=PLCH-i0B0otNQZQt_QzGR9Il_kE4C6cQRy&index=6).
+* Used in SAP's InnerSource project portal to define the default order of the InnerSource projects. It was first created in July 2020 and is fine-tuned and updated frequently ever since. When proposed to the InnerSource Commons in July 2020, this pattern emerged. Also see [Michael Graf & Harish B (SAP) at ISC.S11 - The Unexpected Path of Applying InnerSource Patterns](https://www.youtube.com/watch?v=6r9QOw9dcQo&list=PLCH-i0B0otNQZQt_QzGR9Il_kE4C6cQRy&index=6).
## Status
@@ -124,7 +124,7 @@ The repository activity score is a simple calculation based on the GitHub API. I
[Michael Graf (SAP)](mailto:[email protected])
-## Acknowledgements
+## Acknowledgments
Thank you to the InnerSource Commons Community for lightning-fast advice, and a lot of helpful input to feed this pattern! Especially:
diff --git a/patterns/2-structured/review-committee.md b/patterns/2-structured/review-committee.md
index a0d72f03b..e1a47e48e 100644
--- a/patterns/2-structured/review-committee.md
+++ b/patterns/2-structured/review-committee.md
@@ -4,7 +4,7 @@ Review Committee
## Patlet
-The InnerSource working model is a radical departure from more traditional approaches, for developers and managers alike. By establishing a review committee as an interface between the InnerSource initiative and all senior managers of business units participating in it, the latter are more likely to familiarise themselves with the initiative and support it, as it affords them a certain level of oversight and control without fostering micromanagement.
+The InnerSource working model is a radical departure from more traditional approaches, for developers and managers alike. By establishing a review committee as an interface between the InnerSource initiative and all senior managers of business units participating in it, the latter are more likely to familiarize themselves with the initiative and support it, as it affords them a certain level of oversight and control without fostering micromanagement.
## Problem
diff --git a/patterns/2-structured/service-vs-library.md b/patterns/2-structured/service-vs-library.md
index 8779615e4..6e33c53c7 100644
--- a/patterns/2-structured/service-vs-library.md
+++ b/patterns/2-structured/service-vs-library.md
@@ -24,12 +24,12 @@ reluctant to join forces even if there is significant overlap in requirements.
## Context
* Teams are working in a micro-services environment.
-* They are organised in fully functional DevOps teams: Each team is responsible for their contributions end-to-end, including maintenance, on-call and customer support.
+* They are organized in fully functional DevOps teams: Each team is responsible for their contributions end-to-end, including maintenance, on-call and customer support.
* A team is tasked with providing a service to their downstream customers that is fairly similar to an existing service built by another team.
## Forces
-* Organisational escalation paths may be different for each of the teams.
+* Organizational escalation paths may be different for each of the teams.
* Members of each team may be unwilling to answer on-call support for errors that do not affect their own downstream customers.
* Severity levels for the same types of errors may be different across team boundaries due to different SLA definitions per team/customer relationship.
* Teams may have different security or regulatory constraints governing their deployments.
@@ -51,7 +51,7 @@ Deployment configurations can be included as separate projects in your InnerSour
## Resulting Context
-Teams are willing to collaborate, benefitting from sharing the work of
+Teams are willing to collaborate, benefiting from sharing the work of
implementing the business logic.
A service that originally was built specifically to work in one environment is
@@ -61,10 +61,10 @@ Both teams get to know their respective escalation policy and deployment setup,
potentially identifying improvements for their own setup.
The likelihood that changes are needed and made in the shared source code
-increases, leading to more frequent opportunities to refine, improve and optimise
+increases, leading to more frequent opportunities to refine, improve and optimize
the implementation.
-Encourages incremental operational standardisation in release packaging, telemetry, health/readiness endpoints and so on as the teams realise they can more efficiently maintain this in the shared code if they agree on standard conventions.
+Encourages incremental operational standardization in release packaging, telemetry, health/readiness endpoints and so on as the teams realize they can more efficiently maintain this in the shared code if they agree on standard conventions.
## See also
@@ -73,7 +73,7 @@ Related to this pattern is the [30 Day Warranty](30-day-warranty.md) pattern tha
## Known Instances
* Europace AG
-* Flutter Entertainment: A [Flutter InnerSource application](https://innersource.flutter.com/sdlc/) has a shared code "service" repository with cross-team contribution and CI pipeline to build and publish a shared release artefact. Each adopting team has a "deployment config" repository defining their own deployment. This is driven by varying regulatory requirements, service and incident management practices and infrastructure skill sets in different areas of the business.
+* Flutter Entertainment: A [Flutter InnerSource application](https://innersource.flutter.com/sdlc/) has a shared code "service" repository with cross-team contribution and CI pipeline to build and publish a shared release artifact. Each adopting team has a "deployment config" repository defining their own deployment. This is driven by varying regulatory requirements, service and incident management practices and infrastructure skill sets in different areas of the business.
## Status
@@ -84,7 +84,7 @@ Related to this pattern is the [30 Day Warranty](30-day-warranty.md) pattern tha
* Isabel Drost-Fromm
* Rob Tuley
-## Acknowledgements
+## Acknowledgments
Thank you Tobias Gesellchen for review internal to Europace AG.
diff --git a/patterns/2-structured/start-as-experiment.md b/patterns/2-structured/start-as-experiment.md
index 12844e465..53326df2d 100644
--- a/patterns/2-structured/start-as-experiment.md
+++ b/patterns/2-structured/start-as-experiment.md
@@ -63,7 +63,7 @@ Finally, starting as an experiment makes it much easier to sidestep regulations
- Georg Grütter (Robert Bosch GmbH)
-## Acknowledgements
+## Acknowledgments
- Jason Zink (Robert Bosch GmbH)
- Diogo Fregonese (Robert Bosch GmbH)
diff --git a/patterns/2-structured/templates/rfc.md b/patterns/2-structured/templates/rfc.md
index 34e858a99..d128e728d 100644
--- a/patterns/2-structured/templates/rfc.md
+++ b/patterns/2-structured/templates/rfc.md
@@ -1,6 +1,6 @@
# 000-Template
-- Feature Name: (fill me in with a unique ident, `my_awesome_feature`)
+- Feature Name: (fill me in with a unique identifier, `my_awesome_feature`)
- Start Date: (fill me in with today's date, YYYY-MM-DD)
- Nominated owners: (Representatives of technical ownership areas affected by the RFC. This will often be tech leads, but they may delegate. RFCs cannot be accepted until all nominated owners have signed off.)
@@ -29,7 +29,7 @@ Explain the proposal as if it was already existing and you were teaching it to a
- Introducing new named concepts.
- Explaining the feature largely in terms of examples.
- Explaining how engineers should think about the feature. It should explain the impact as concretely as possible.
-- If applicable (eg code/architecture proposal), provide sample error messages, deprecation warnings, or migration guidance.
+- If applicable (e.g. code/architecture proposal), provide sample error messages, deprecation warnings, or migration guidance.
- If applicable, describe the differences between teaching this to existing engineers and new engineers.
For implementation-oriented RFCs, this section should focus on how contributors should think about the change, and give examples of its concrete impact. For policy/process RFCs, this section should provide an example-driven introduction to the policy/process, and explain its impact in concrete terms.
diff --git a/patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md b/patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md
index 484708276..f21de9753 100644
--- a/patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md
+++ b/patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md
@@ -60,7 +60,7 @@ Important elements of the solution are:
### Examples/Templates
- [Rust][rust] is a good Open Source example of RFC template and process, and has been the basis for many other RFC processes.
-- [Genericised BBC iPlayer & Sounds RFC template](templates/rfc.md), originally based on the [Rust][rust] template
+- [Generalized BBC iPlayer & Sounds RFC template](templates/rfc.md), originally based on the [Rust][rust] template
## Resulting Context
@@ -69,7 +69,7 @@ Implementing an RFC-like process has proven to be valuable, as it makes the cros
Observable positive effects:
- **democratization of the decision making process** for decisions that impact many teams (also offloading team leads from that burden)
-- **a open asynchronous communication method** that works well across multiple teams and geos
+- **a open asynchronous communication method** that works well across multiple teams and geographies
- **empowers individuals and teams** to effect large scale change
- **record of decisions made** for people to refer back to for context
- **scales impact of experienced engineers** as they can contribute to solutions asynchronously and remotely, rather than needing to be present in a meeting
diff --git a/patterns/2-structured/trusted-committer.md b/patterns/2-structured/trusted-committer.md
index 3d04ecae4..085513c77 100644
--- a/patterns/2-structured/trusted-committer.md
+++ b/patterns/2-structured/trusted-committer.md
@@ -141,7 +141,7 @@ This has been tried and proven successful at:
- [Fernando Freire]
-## Acknowledgements
+## Acknowledgments
- [Russell Rutledge]
- [Loren Sanz]
From 59c01a9ea1e50e6e076d3d40f136d47e48405b23 Mon Sep 17 00:00:00 2001
From: spier
Date: Mon, 22 May 2023 21:17:57 +0000
Subject: [PATCH 05/38] Writing updated files for the book
---
book/en/toc.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/book/en/toc.md b/book/en/toc.md
index 94183385e..51563055a 100644
--- a/book/en/toc.md
+++ b/book/en/toc.md
@@ -26,7 +26,7 @@ Instead edit toc_template.md
* [Core Team](../../patterns/2-structured/core-team.md) - Even when an InnerSource project is widely needed, contributions and usage may be hindered because the project is difficult to work with. Establish a core team that is dedicated to take care of the project's fundamental items. Their work enables contributors to add and use the features that provide value to their scenarios.
* [Cross-Team Project Valuation](../../patterns/2-structured/crossteam-project-valuation.md) - It's hard to sell the value of cross-team InnerSource projects that don't provide a direct impact on company revenue. Here's a data-driven way to represent your project that both articulates its value and amplifies it.
* [Dedicated Community Leader](../../patterns/2-structured/dedicated-community-leader.md) - Select people with both communications and technical skills to lead the communities to ensure success in starting an InnerSource initiative.
-* [Document your Guiding Principles](../../patterns/2-structured/document-your-guiding-principles.md) - The usual InnerSource explanation of "applying open source best practices inside an organisation" does not work well with people lacking an open source background. As a remedy the most important principles of InnerSource get documented and published widely.
+* [Document your Guiding Principles](../../patterns/2-structured/document-your-guiding-principles.md) - The usual InnerSource explanation of "applying open source best practices inside an organization" does not work well with people lacking an open source background. As a remedy the most important principles of InnerSource get documented and published widely.
* [Extensions for Sustainable Growth](../../patterns/2-structured/extensions-for-sustainable-growth.md) - An InnerSource project is receiving too many contributions, making maintenance difficult. By offering an extension mechanism outside of the core project, the maintainers enable scaling of project capabilities with minimal cost and maintenance overhead.
* [Gig Marketplace](../../patterns/2-structured/gig-marketplace.md) - Establish a marketplace by creating an intranet website that lists specific InnerSource project needs as "Gigs" with explicit time and skill requirements. This will enable managers to better understand their employeeâs time commitment and professional benefits thereby increasing the likelihood of garnering approval to make InnerSource contributions.
* [Group Support](../../patterns/2-structured/group-support.md) - What happens if a team or individual no longer supports an InnerSource project? Keep the project alive by forming a group of interested individuals.
@@ -36,7 +36,7 @@ Instead edit toc_template.md
* [Maturity Model](../../patterns/2-structured/maturity-model.md) - Teams have started adopting InnerSource. The practice is spreading to multiple departments. However, the understanding of what constitutes an InnerSource project varies. The solution is to provide a maturity model to allow for teams to go through a self check and discover patterns and practices that they are not yet aware of.
* [Praise Participants](../../patterns/2-structured/praise-participants.md) - After an inner source contribution, it's important to thank the contributor for their time and effort. This pattern gives guidance that not only effectively acknowledges the contribution but also engenders further engagement from the contributor and others.
* [Repository Activity Score](../../patterns/2-structured/repository-activity-score.md) - Potential contributors want to find active InnerSource projects in need of their help. By calculating a repository activity score for each project, a ranked list of projects can be created (e.g. on the InnerSource Portal), so that potential contributors can more easily determine which project they want to contribute to.
-* [Review Committee](../../patterns/2-structured/review-committee.md) - The InnerSource working model is a radical departure from more traditional approaches, for developers and managers alike. By establishing a review committee as an interface between the InnerSource initiative and all senior managers of business units participating in it, the latter are more likely to familiarise themselves with the initiative and support it, as it affords them a certain level of oversight and control without fostering micromanagement.
+* [Review Committee](../../patterns/2-structured/review-committee.md) - The InnerSource working model is a radical departure from more traditional approaches, for developers and managers alike. By establishing a review committee as an interface between the InnerSource initiative and all senior managers of business units participating in it, the latter are more likely to familiarize themselves with the initiative and support it, as it affords them a certain level of oversight and control without fostering micromanagement.
* [Service vs. Library](../../patterns/2-structured/service-vs-library.md) - Teams in a DevOps environment may be reluctant to work across team boundaries on common code bases due to ambiguity over who will be responsible for responding to service downtime. The solution is to realize that often it's possible to either deploy the same service in independent environments with separate escalation chains in the event of service downtime or factor a lot of shared code out into one library and collaborate on that.
* [Standard Base Documentation](../../patterns/2-structured/project-setup/base-documentation.md) - New contributors to an InnerSource project have a hard time figuring out who maintains the project, what to work on, and how to contribute. Providing documentation in standard files like README.md/CONTRIBUTING.md enables a self service process for new contributors, so that they can find the answers to the most common questions on their own.
* [Start as an Experiment](../../patterns/2-structured/start-as-experiment.md) - Start your InnerSource initiative as a time limited experiment to make it easier for managers unfamiliar with InnerSource to endorse and support the initiative.
From db15ee11da8966d6222d8eb3c1553b9d9b1bfaa5 Mon Sep 17 00:00:00 2001
From: Sebastian Spier
Date: Thu, 25 May 2023 17:44:16 +0200
Subject: [PATCH 06/38] Board Report 2023-05 (#540)
* Board Report 2023-05
---
meta/boardreports/2023-02.md | 2 +-
meta/boardreports/2023-05.md | 109 +++++++++++++++++++++++++++++++++++
2 files changed, 110 insertions(+), 1 deletion(-)
create mode 100644 meta/boardreports/2023-05.md
diff --git a/meta/boardreports/2023-02.md b/meta/boardreports/2023-02.md
index d9945fd74..b5deb781f 100644
--- a/meta/boardreports/2023-02.md
+++ b/meta/boardreports/2023-02.md
@@ -2,7 +2,7 @@
## Meta
-* Reporting Period: November 1st, 2022 - January 31st, 2022
+* Reporting Period: November 1st, 2022 - January 31st, 2023
* [merged PRs](https://github.com/InnerSourceCommons/InnerSourcePatterns/pulls?q=is%3Apr+closed%3A2022-11-01..2023-01-31+is%3Amerged)
* [opened issues](https://github.com/InnerSourceCommons/InnerSourcePatterns/issues?q=is%3Aissue+created%3A2022-11-01..2023-01-31+is%3Aopen)
diff --git a/meta/boardreports/2023-05.md b/meta/boardreports/2023-05.md
new file mode 100644
index 000000000..74b7db5d1
--- /dev/null
+++ b/meta/boardreports/2023-05.md
@@ -0,0 +1,109 @@
+# InnerSource Patterns WG - Report for Board Meeting 2023-05
+
+## Meta
+
+* Reporting Period: 2023-02..2023-04
+* [merged PRs](https://github.com/InnerSourceCommons/InnerSourcePatterns/pulls?q=is%3Apr+closed%3A2023-02..2023-04+is%3Amerged)
+* [opened issues](https://github.com/InnerSourceCommons/InnerSourcePatterns/issues?q=is%3Aissue+created%3A2023-02..2023-04+is%3Aopen)
+
+## Engagement
+
+The [patterns book] is the way InnerSource practices are captured and shared. Recent web analytics:
+
+* stable traffic on the patterns book (tracking_id: `G-QL1S8MW5D9`)
+ * 18,361 views total (previous report was 12,143 page)
+ * that is 50% more traffic, so quite significant!
+ * not sure where the increase in traffic comes from (didn't have time for a deep-dive)
+* Most popular patterns:
+ * Core Team
+ * 30 Day Warranty
+ * InnerSource Portal
+ * Common Requirements
+ * Maturity Model
+* traffic for translations:
+ * Japanese - 979 views total (somewhat continuous traffic but with spikes - probably around events of the Japanese community)
+ * Chinese - 545 views total (most traffic around the time when the book was released at end of 2023/01)
+
+## Changes
+
+Changes are contributed via the [InnerSourcePatterns] repository:
+
+* new visual and other improvements for the [Communication Tooling](https://patterns.innersourcecommons.org/p/communication-tooling) pattern - thank you @spier
+* adding known instances to various patterns (BBVA, GitHub, Bosch) - thank you @rahermur, @zkoppert, @gruetter
+* improvements to [Modular Code](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/modular-code.md) pattern. - thank you @fioddor
+ * This is a case of a pattern that is around for years and still did not make it into our book. We suspect that many orgs are using this approach and might not even consider this an enabler for InnerSource. Might be too obvious! We have filed an issue to improve the pattern further and get it published in our book. So please [contribute](https://github.com/InnerSourceCommons/InnerSourcePatterns/issues/529)!
+* New **Structured** patterns:
+ * [Group Support](https://patterns.innersourcecommons.org/p/group-support) - great work @rrrutledge
+* New **Initial** patterns:
+ * none
+* Last [Trusted Committer](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/TRUSTED-COMMITTERS.md) added was [@yuhattor](https://github.com/yuhattor) (added 2022-07-21)
+* Trusted Committer candidates in the pipeline: No
+
+## Next Goals (same as previous Board report)
+
+The overall goals of this group are:
+
+1. Increase number of people consuming the patterns. ("easier to discover", pattern of month, categories)
+2. Increase the number and quality of patterns.
+ 1. Increase the number of people thinking to contribute. ("patterns in wild", "known instances")
+ 2. Increase probability of successful contribution. ("reduce review time", "lower barrier of entry")
+ 3. Optimise the existing content. (level-up more patterns, "known instances" again)
+
+All goals will be progressed but we are prioritising effort towards 2.iii.
+
+Specifically we want to get existing **Initial (L1)** patterns improved to **Structured (L2)**, so that we can publish them in the book.
+
+We had a [discussion](https://github.com/InnerSourceCommons/InnerSourcePatterns/pull/486#discussion_r1029921121) about this and created a short-list of those patterns (details below).
+
+We now have a [script](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/meta/scripts/find_upgradeable_patterns.rb) that identifies patterns that could be upgrade, based on the number of Known Instances only:
+
+```
+$ ruby find_upgradeable_patterns.rb
+## Initial => Structured
+## 1-Initial patterns primed for upgrade to 2-Structured (based on Known Instances only)
+1 | ../../patterns/1-initial/innersource-guidance-group.md
+1 | ../../patterns/1-initial/innersource-customer-interview-questions.md
+2 | ../../patterns/1-initial/balancing-openness-and-security.md
+1 | ../../patterns/1-initial/source-code-inventory.md
+1 | ../../patterns/1-initial/incubator-pipeline.md
+1 | ../../patterns/1-initial/include-product-owners.md
+1 | ../../patterns/1-initial/introducing-metrics-in-innersource.md
+1 | ../../patterns/1-initial/modular-code.md
+1 | ../../patterns/1-initial/contained-innersource.md
+1 | ../../patterns/1-initial/transitioning-contractor-code-to-innersource-model.md
+1 | ../../patterns/1-initial/governance-levels.md
+
+## Structured => Validated
+## 2-Structured patterns primed for upgrade to 3-Validated (based on Known Instances only)
+3 | ../../patterns/2-structured/30-day-warranty.md
+5 | ../../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md
+3 | ../../patterns/2-structured/document-your-guiding-principles.md
+4 | ../../patterns/2-structured/trusted-committer.md
+3 | ../../patterns/2-structured/core-team.md
+3 | ../../patterns/2-structured/maturity-model.md
+5 | ../../patterns/2-structured/innersource-portal.md
+3 | ../../patterns/2-structured/gig-marketplace.md
+3 | ../../patterns/2-structured/project-setup/base-documentation.md
+3 | ../../patterns/2-structured/project-setup/communication-tooling.md
+```
+
+### Shortlisted Patterns
+
+Here you find more detail about the possible execution of this approach.
+It is more information than what the Board needs. It may however help you to understand how we are reasoning about our patterns.
+
+We identified these patterns as "low-hanging fruits", as they contain a **Known Instance** already, and that info is often hard to get.
+
+We believe we can contact the respective authors/organizations, and ask them to review the patterns against the [Structured (L2) Requirements](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/meta/contributor-handbook.md#requirements-level-2---structured). The upside for those orgs is to get their pattern (and brand) published in our book.
+
+We expect that with one round of review (or rather a single PR) we can get these patterns published in our book.
+
+* **(in progress)** (Comcast) [release-process.md](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/release-process.md) - We kept this pattern in Initial to give the community time to review/harden this pattern before it goes into the book. - See [#524](https://github.com/InnerSourceCommons/InnerSourcePatterns/pull/524)
+* **(in progress)** (Flutter, Europace) [governance-levels.md](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/governance-levels.md) - Proposed by Europace (Isabel) but further improved by Rob.
+* (??? Tim Yao, Georg Grütter) [contained-innersource.md](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/contained-innersource.md) - This pattern has been around for a long time. It can try to contact the two authors and see if they want to bring it over the finish line.
+* (Philips) [source-code-inventory.md](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/source-code-inventory.md)
+* (Philips, Verizon) [balancing-openness-and-security.md](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/balancing-openness-and-security.md)
+* (GitHub) [transitioning-contractor-code-to-innersource-model.md](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/transitioning-contractor-code-to-innersource-model.md)
+
+[patterns book]: https://patterns.innersourcecommons.org/
+[InnerSourcePatterns]: https://github.com/InnerSourceCommons/InnerSourcePatterns/
From 4afeec854fc937d389d6391205235a90821d68d8 Mon Sep 17 00:00:00 2001
From: Sebastian Spier
Date: Fri, 16 Jun 2023 12:27:20 +0200
Subject: [PATCH 07/38] Fixing link (#545)
---
patterns/1-initial/not-invented-here.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/patterns/1-initial/not-invented-here.md b/patterns/1-initial/not-invented-here.md
index a2657a6ba..0d95788de 100644
--- a/patterns/1-initial/not-invented-here.md
+++ b/patterns/1-initial/not-invented-here.md
@@ -79,7 +79,7 @@ Companies with software developers :) We suppose that this may also be a more co
## Solutions
-* [Going deep into the not-invented-here syndrome](http://blog.hypeinnovation.com/the-not-invented-here-syndrome) touches on this topic, describing a prescription for overcoming the "Not Invented Here" mindset:
+* [Going deep into the not-invented-here syndrome](https://www.hypeinnovation.com/blog/the-not-invented-here-syndrome) touches on this topic, describing a prescription for overcoming the "Not Invented Here" mindset:
* Acknowledge that the "Not Invented Here" mindset (NIH) exists
* Assess the impact of NIH on your innovation efforts. For example, have you missed opportunities?
* Build in explicit incentives to overcome NIH
@@ -131,5 +131,5 @@ TBD
## References
-* Oana-Maria Pop, Hype Innovation Blog: [Does Your Organization Have the Not Invented Here Syndrome?](http://blog.hypeinnovation.com/the-not-invented-here-syndrome)
+* Oana-Maria Pop, Hype Innovation Blog: [Does Your Organization Have the Not Invented Here Syndrome?](https://www.hypeinnovation.com/blog/the-not-invented-here-syndrome)
* DSM, Open Innovation: [Proudly Found Elsewhere](https://www.youtube.com/watch?v=jNNz9poyKJs)
From 9635fc45dd2aed566a7b16dce7508312c350da9f Mon Sep 17 00:00:00 2001
From: spier
Date: Fri, 16 Jun 2023 10:27:50 +0000
Subject: [PATCH 08/38] Re-creating markmap and screenshot
---
.../innersource-program-mind-map.png | Bin 420923 -> 426489 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/pattern-categorization/innersource-program-mind-map.png b/pattern-categorization/innersource-program-mind-map.png
index b14e572756b5c8a8e0ee3a14e26612cd935c03e7..02fd90aea3e177148f0fe37aa323406400dbb0e2 100644
GIT binary patch
literal 426489
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