Description
Might be related to https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/reluctance-to-accept-contributions.md
Problem
As the number of new feature contributions to a mature inner-source repository rapidly increase, it adds more burden on code reviews and maintenance. How do we allow for faster release of new features, encouraging innovation and experimentation; while also keeping repositories well maintained?
Context:
-
More organizations or company employees are contributing to strategic inner-source codebases, some of which are scaling rapidly with new feature contributions. This is adding a huge code review backlog on a smaller group of maintainers, resulting in maintainer burnout as well as slowing down release of new capabilities.
-
Adding an excessive number of capabilities and code to repositories without due diligence is making them difficult to maintain.
-
New features are getting released without thorough documentation, hardening or testing, creating a poor user experience.
-
You want to allow for expansion and encourage innovation and experimentation without restricting contributions, while also keeping good code and quality standards for user experience.
-
A large amount of time goes into hardening and thorough testing of features to meet product standards, but you want to allow for faster release of new innovations for adopting products to explore before investing time in productionization of capabilities.
-
You want to encourage the community to share innovations, combining product capabilities with other use-cases without adding more dependencies to primary repository.
Solutions
Allowing extensions/plugins to high-scale inner-source codebases or libraries can relieve the maintenance burden on repository maintainers and allow faster release of new features for adopting products to explore. This shifts maintenance of capabilities to extension owners and allows the primary repository to support capabilities that have been adopted more widely and are more strategic.
-
Create library or repository extension templates to allow addition of new features in new repositories, retaining the same modular structure and APIs as the primary repository.
-
Loosen the requirements for contributors to create extensions by bypassing reviews to allow for faster release or experimentation.
-
Allow registration of extensions with primary libraries for users to leverage extensions alongside the original project.
-
Make extensions easily discoverable with a publishing page showing the best extensions that users have created, which are ready for product usage.
-
Establish the lifecycle for extensions from creation to porting into the primary library. For instance:
- Extension creators continue maintaining the extension, providing any support and fixing defects. Any extension left unmaintained will be unlisted from the publishing page.
- Create criteria for when an extension can be ported to the primary repository, such as adoption of the extension by internal products and demand for the feature.
- Porting process of the extension to the primary repository will follow more stringent code review guidelines as set by library maintainers.
Following the principles outlined above ensures that:
-
Contributing an extension feels identical to adding a new feature to the primary repository and is a similar amount of work.
-
Extensions are discoverable in a repeatable manner to all users of the primary project; just because code doesn't live in the main repository yet does not mean it is not valuable.
-
The maintainer burden is reduced until an extension has demonstrated that it fills an important gap in the primary project.
Authors:
Sukriti Sharma
Alexander Brooks