Skip to content

feat: promote discover-your-innersource #780

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 15 commits into
base: main
Choose a base branch
from

Conversation

jeffabailey
Copy link
Contributor

@jeffabailey jeffabailey commented Feb 28, 2025

This pattern has been around in a draft/initial stage for a long time (almost 8 hears)!

As we believe that it does add some interest points, we want to try to improve it so that we feel comfortable publishing it in our pattern book.

Checklist

from the Contributor Handbook:

Extras

  • TBD

History

Copy link
Member

@spier spier left a comment

Choose a reason for hiding this comment

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

I pushed some changes to align the pattern with our pattern template.

Overall I think this is an interesting pattern, that has some way to go before being ready to be published to our book though.

My main concerns right now are:

  • The Solution section contains multiple different things. What are the core aspects of the solution? Maybe we could try to group the bullets into categories, and give each category a distinct name to find out what the overarching themes of the solution are.
  • How is this pattern related to other patterns like InnerSource Portal and Gig Marketplace?
  • Not sure what to do with the "Discussion on" section. this seems more like meeting notes from a discussion that must have happened a long time ago. Maybe we can ask people that are still around if they remember anything about this pattern, like @gruetter and @NewMexicoKid

Besides that, we would have to check the requirements here before publishing to the book: Contributor Handbook - Requirements for maturity 'Structured'

If the ambition here is to have a better version of this pattern merged into our repo, I would recommend to leave this in the Initial state (and folder) for a bit longer. This would allow us to make some fixes and merge these PRs faster.

If the ambition is to get this pattern live in our book, then we will have to invest quite some work here and keep the PR open for a while.

Either way is fine with me, I just want to prevent frustrations as I don't know what your expectations are here.

@spier
Copy link
Member

spier commented Mar 4, 2025

Btw @jeffabailey if you want to use this pattern as a way to learn what it takes to get a pattern ready for publication in the book, by all means, keep pushing :) Just it might not be the easiest path on this particular pattern, as the current content of the pattern leaves a lot of room for improvement.

@spier spier added the 📖 Type - Content Work Working on contents is the main focus of this issue / PR label Mar 4, 2025
@jeffabailey
Copy link
Contributor Author

I pushed some changes to align the pattern with our pattern template.

Awesome, thank you!

If the ambition is to get this pattern live in our book, then we will have to invest quite some work here and keep the PR open for a while.

This, TBH! :)

Just it might not be the easiest path on this particular pattern, as the current content of the pattern leaves a lot of room for improvement.

Sounds like a great challenge and learning opportunity.

I'll read through more of the published patterns to align this one closer to the others.

I was having a conversation with @rrrutledge about what constitutes an approachable and useful pattern.

The patterns listed on the fearless change website are an interesting overlay to the patterns.

https://fearlessjourney.info/fearless-change-patterns/

I really like "Discover Your InnerSource" name for the pattern.

What do you think about the name?

How is this pattern related to other patterns like InnerSource Portal and Gig Marketplace?

Another great question to answer after defining the appropriate name and scope for this pattern.

## Resulting Context

* Internal components are easily visible
* Developers looking for code can search for it and find it quickly.
* Developers are now looking internally for software components
* Search results are combined (internal and external)
* Process changes, establishing a common communications channel, and encouraging and rewarding owners of reusable code to use the same search engine can contribute to changing the corporate culture. Transformation begins from the grassroots but requires strategic involvement of thought leaders.
* See [Improved Findability](improve-findability.md) (aka Poor Naming Conventions or Badly Named Piles) as a related pattern.
* See [Improved Findability](../1-initial/improve-findability.md) (aka Poor Naming Conventions or Badly Named Piles) as a related pattern.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@spier do we generally omit links to initial patterns?

I see one link to an initial pattern here.

Copy link
Member

Choose a reason for hiding this comment

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

Yes, we would only link to same maturity or higher.

ie omit this link.

Copy link
Member

Choose a reason for hiding this comment

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

Hmm - do we have a way to track the links that we remove from patterns as they move up so that those links can be added back as soon as the patterns one level further below move up as well?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We can comment the link to keep the reference but not publish it.

Do we like this option?

Copy link
Member

Choose a reason for hiding this comment

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

That sounds like a nice solution. I'm just trying to avoid losing these cross references.

Copy link
Member

Choose a reason for hiding this comment

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

@jeffabailey feel free to try that approach with the commenting.
I have not used comments in markdown in this project, so we will have to try out if it works properly in gitbook as well (I suspect it will work though).

@jeffabailey jeffabailey requested a review from spier April 2, 2025 00:56
@spier
Copy link
Member

spier commented Apr 2, 2025

@jeffabailey I took some liberties and added the checklist for maturity Structured to the initial message of this PR. That gives us some guidelines for the various things that we want to check before promoting this pattern to our book.

Copy link
Member

@spier spier left a comment

Choose a reason for hiding this comment

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

The biggest challenge I see in this pattern at the moment is the Solution section.

  • Some of the bullets in the Solution section propose things that already exist as dedicated patterns. We could link to them.
    • Aside: this is not surprizing as some of those other patterns might have not existed 8 years ago when this pattern was drafted
  • Through that we might also figure what is the "net new" content in this pattern.
  • How is this pattern related to these patterns

I suspect my comments may seem overly critical of this pattern.

However my goal is to only publish useful patterns to the book. And given that this pattern has not been touched in so long, it will need a bit of love/work to be ready for prime time :)

* Pull in repo names, descriptions and `README.md` files into the search engine assuming that a search engine exists.
* A one-stop-shop kind of search engine for all relevant communication and documentation is difficult to attain.
* Even when using GitHub's enterprise offering, people often deploy additional systems like wikis to host content orthogonal to what is in the code repositories, slack channels (or IRC), mailing lists (or even nntp servers), some place to store stuff written down in office formats, search over personal e-mail etc.
* Several of these systems come with search built-in, but integrating this content in one search box or even just deploying a federated search engine across all sources often doesn't come off-the-shelf.
* Implement process change to first check for internal solutions for this problem.
* Tool with a central view (but people are more inclined to google externally than look internally)
Copy link
Member

Choose a reason for hiding this comment

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

What does this mean?

* Implement process change to first check for internal solutions for this problem.
* 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 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.
* Need some very visible lighthouse projects that start using InnerSource components and make positive statements about the InnerSource program.
Copy link
Member

Choose a reason for hiding this comment

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

This seems unrelated to the problem at hand.

Copy link
Member

Choose a reason for hiding this comment

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

I believe the failure to discover your InnerSource is described here as caused by two potential issues:
a) lack of a well integrated search engine for internal projects
b) people failing to even think of searching internally: "People don't bother looking for internally developed solutions" to quote the problem setting.

I would assume the positive examples talking about the benefits of InnerSource components addresses b)

Me personally I wouldn't call that lighthouse projects though - most likely because my gut feeling has a very negative co-notation with lighthouse projects. Instead One might talk about early adopters and link to the Crossing the Chasm pattern.

* Need some very visible lighthouse projects that start using InnerSource components and make positive statements about the InnerSource 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 organization size.
* It is possible people will start splitting this one channel into multiple channels by topic once traffic gets too high.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
* It is possible people will start splitting this one channel into multiple channels by topic once traffic gets too high.
* When using common chat systems, start with one single chat channel for the InnerSource project, only split into multiple channels by topic once traffic gets too high. This way the channel feels alive. In addition the number of input channels to watch is kept at a minimum for the host team.

I think we need a bit of reasoning why one should start with only one communication channel. This might also link to our Communication Tooling pattern.

* 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.
Copy link
Member

Choose a reason for hiding this comment

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

I don't understand that sentence. Maybe instead mention where to mention this communication channel so that downstream users can find it? (E.g. withing the README.md of the project, the CONTRIBUTING.md of the project, ...?)

@jeffabailey
Copy link
Contributor Author

The biggest challenge I see in this pattern at the moment is the Solution section.

  * [Unified Source Code Inventory](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/source-code-inventory.md)

I agree this is a big challenge against this pattern.

Following the style guide:

don't use "InnerSource" in the name - all of these patterns are about InnerSource, so consider if using the term InnerSource makes it easier for potential readers to understand what this pattern is about. Note that there can also be good reasons to use InnerSource in the name as in "InnerSource License" for example.

We might change this pattern's name to "Discover Internal Code" or "Discover Internal Projects" which does have sections that overlap Unified Source Code Inventory (USCI).

I propose a rewrite to remove any overlapping concerns in USCI.

My friend Cursor gave me this comparison:

I'll help refine discover-your-innersource.md to focus on its unique aspects while removing overlap with source-code-inventory.md. Let me analyze the overlaps and propose changes:

Overlapping Concepts to Remove:

  1. The general concept of finding internal code (covered in source-code-inventory.md)
  2. The organizational-level inventory aspects
  3. The dashboard/visualization aspects
  4. The strategy framework aspects

Unique Aspects to Keep in discover-your-innersource.md:

  1. The specific developer behavior and cultural aspects
  2. The search engine implementation details
  3. The process changes for developers
  4. The communication channel aspects

Does this sound like a reasonable approach?

@spier
Copy link
Member

spier commented Apr 13, 2025

@jeffabailey this comparison on the unique and overlapping concepts is very helpful!

Could you also ask your friend Cursor for a comparison between this pattern and the InnerSource Portal pattern?

My current take one the unique ideas in each of these patterns:

  1. InnerSource Portal - highlight key InnerSource projects, with a focus on highlighting projects that are actively promoting themselves as InnerSource
  2. Unified Source Code Inventory - aggregate projects from various version control systems in a single place, no matter if they are closed source, InnerSource or open source
  3. Discover your InnerSource - the behavioral changes required by developers to "look for InnerSource first" (described so well by Cursor!). maybe combined with the concierge service idea.

So maybe one could stay 1 and 2 are about tooling, while 3 is not?

The idea of providing actual search functionality would fit equally well in 1 and 2, wouldn't it? Neither of these patterns has been very explicit about how to set up a good search engine with a focus on InnerSource though. My suspicion is that most orgs re-use the search functionality of their VCS (github, gitlab, ...) to accomplish this. Some might use Backstage.

@spier
Copy link
Member

spier commented Apr 13, 2025

Sorry about the mess that I made with my last 3 commits. I was on the wrong branch. I cleaned it all up again (I hope), and committed those changes to #779 instead.

@jeffabailey
Copy link
Contributor Author

jeffabailey commented Apr 17, 2025

  1. InnerSource Portal - highlight key InnerSource projects, with a focus on highlighting projects that are actively promoting themselves as InnerSource

  2. Unified Source Code Inventory - aggregate projects from various version control systems in a single place, no matter if they are closed source, InnerSource or open source

  3. Discover your InnerSource - the behavioral changes required by developers to "look for InnerSource first" (described so well by Cursor!). maybe combined with the concierge service idea.

Here's a comparison of concepts introduced in the three patterns using a custom GPT I created that sources our InnerSource Patterns and Managing InnerSource Projects book.

🧭 InnerSource Pattern Comparison Table

Concept InnerSource Portal Unified Source Code Inventory Discover Your InnerSource Best-Fit Pattern for Practitioner
Highlighting InnerSource projects ✅ Central function: promoting InnerSource visibility ❌ Not focused on promotion 🔸 Indirectly, via encouragement to explore InnerSource Portal
Aggregating all source code (IS, closed, open) 🔸 May include some InnerSource projects ✅ Core purpose: unify all codebases ❌ Not applicable Unified Source Code Inventory
Making InnerSource discoverable ✅ Projects curated for discoverability ✅ Through aggregation of all sources ✅ Cultural push to explore and adopt InnerSource All (tech: Inventory & Portal; behavior: Discover)
Encouraging "InnerSource first" mindset 🔸 Reinforces via visibility ❌ Not focused on mindset ✅ Primary goal — shift developer behavior Discover Your InnerSource
Concierge service / guided onboarding ❌ Not included ❌ Not included ✅ Often part of behavioral support (e.g., internal advocates) Discover Your InnerSource
Cross-system code search 🔸 Might link out ✅ Key feature — aggregates across systems ❌ Not part of scope Unified Source Code Inventory
Rewarding teams for InnerSource openness ✅ Visibility acts as incentive ❌ Does not emphasize recognition 🔸 Could be part of cultural change strategy InnerSource Portal
Single entry point for exploring InnerSource ✅ Designed for this 🔸 Possible via UI aggregation 🔸 Encouraged behavior InnerSource Portal
Supports culture change / developer behavior shift 🔸 Visibility aids change ❌ Purely technical ✅ Central goal — behavior and mindset change Discover Your InnerSource

💡 Summary

  • InnerSource Portal: Best for visibility, promotion, and incentivizing InnerSource openness.

  • Unified Source Code Inventory: Best for technical aggregation and removing silos across repositories.

  • Discover Your InnerSource: Best for cultural transformation, onboarding support, and developer behavior change.

Here's the prompt I used to produce this table.


Compare these InnerSource Patterns and describe overlapping concepts while suggesting which pattern is most suited to contain individual concepts for an InnerSource practitioner.

Create a table.


 InnerSource Portal - highlight key InnerSource projects, with a focus on highlighting projects that are actively promoting themselves as InnerSource
   
 Unified Source Code Inventory - aggregate projects from various version control systems in a single place, no matter if they are closed source, InnerSource or open source
   
Discover your InnerSource - the behavioral changes required by developers to "look for InnerSource first" (described so well by Cursor!). maybe combined with the concierge service idea.

So maybe one could stay 1 and 2 are about tooling, while 3 is not?

That sounds reasonable. The table suggests that 3. is about culture and behavioral, and mindset changes. It seems the name of this pattern is moving toward "Promote Project Discovery" rather than "Discover Internal Code" or "Discover Internal Projects".

The idea of providing actual search functionality would fit equally well in 1 and 2, wouldn't it? Neither of these patterns has been very explicit about how to set up a good search engine with a focus on InnerSource though. My suspicion is that most orgs re-use the search functionality of their VCS (github, gitlab, ...) to accomplish this. Some might use Backstage.

It depends on if we want to make this pattern about behavior, tooling, or both.

@spier
Copy link
Member

spier commented Apr 18, 2025

This is really cool @jeffabailey . The comparison table with concepts, the 3 patterns, and the best-fit pattern is super helpful!

I have various thoughts about different aspects of this. I will reply in separate comments, so that it becomes easier to separate the conversations.

@spier
Copy link
Member

spier commented Apr 18, 2025

The way that you used AI support here is interesting. I have used ChatGPT for creating pattern drafts, but not for comparing patterns so yet.

Here's a comparison of concepts introduced in the three patterns using a custom GPT I created that sources our InnerSource Patterns and Managing InnerSource Projects book.

I looked at your ChatGPT prompt. How did you add InnerSource Patterns and Managing InnerSource Projects book as sources thought? I cannot see how that works in the prompt.

@spier
Copy link
Member

spier commented Apr 18, 2025

The comparison table is helpful for figuring out what the core focus of each of the existing patterns is, and how new patterns can add new insights to "fill the gaps" between the existing patterns.

I wonder if such overviews/comparisons could be published as a new content type in our InnerSource patterns book (or elsewhere). If I had to give such write-ups a name I might call it "scenario", "use case", or even just "article".

e.g. we could publish a scenario called "Enable project reuse". In that scenario we would incorporate the comparison table above, and point to patterns immediately related to the scenario (e.g. the 3 patterns that we are discussing here, and potentially others).

I will post that idea as a new issue, so that it can be discussed separate from this PR here.

@jeffabailey
Copy link
Contributor Author

I looked at your ChatGPT prompt. How did you add InnerSource Patterns and Managing InnerSource Projects book as sources thought? I cannot see how that works in the prompt.

I used using my ChatGPT account to create a custom GPT.

image

Clicking on the innersourcecommons.org config at the bottom of this image, I added this schema.

openapi: 3.1.0
info:
  title: InnerSource Commons Website API
  version: 1.0.0
  description: >
    Access content from the InnerSource Commons public website.
    This API allows retrieving pages and resources from the live website.
servers:
  - url: https://innersourcecommons.org
paths:
  /{path}:
    get:
      operationId: getWebsiteContent
      summary: Get content from the InnerSource Commons website
      parameters:
        - name: path
          in: path
          required: true
          description: >
            Path to a page or resource on the website
            (e.g. `about/privacy`, `learning/patterns`)
          schema:
            type: string
      responses:
        '200':
          description: Page content returned successfully
          content:
            text/html:
              schema:
                type: string
                description: HTML content of the page
        '404':
          description: Page not found
  /:
    get:
      operationId: getHomepage
      summary: Get the website homepage
      responses:
        '200':
          description: Homepage content returned successfully
          content:
            text/html:
              schema:
                type: string
                description: HTML content of the homepage

This uses https://innersourcecommons.org as a source.

The other config is for api.github.com, which navigates the GitHub API to pull information.

openapi: 3.1.0
info:
  title: InnerSource Commons GitHub API
  version: 1.1.1
  description: >
    Access structured content from InnerSource Commons repositories. Lists all content
    from both the Managing InnerSource Projects book and InnerSource Patterns repositories.
servers:
  - url: https://api.github.com/repos/InnerSourceCommons
    description: GitHub API endpoint for InnerSource Commons repositories
security:
  - github_auth: []
paths:
  /{repository}/contents:
    get:
      operationId: listRepositoryContents
      summary: List all repository content
      description: >
        Lists all content from the specified repository. Supports both the Managing InnerSource Projects
        book and InnerSource Patterns repositories. Returns metadata about each file including its path
        and download URL.
      parameters:
        - name: repository
          in: path
          required: true
          schema:
            type: string
            enum: [managing-innersource-projects, InnerSourcePatterns]
          description: The repository to list contents from
        - name: path
          in: query
          required: false
          schema:
            type: string
          description: The path to list contents from
        - name: ref
          in: query
          required: false
          schema:
            type: string
          description: The name of the commit/branch/tag
      responses:
        "200":
          description: A list of all repository content files
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/GitHubContent"
        "404":
          description: Repository or content not found

components:
  schemas:
    GitHubContent:
      type: object
      properties:
        name:
          type: string
          description: The filename of the content
        path:
          type: string
          description: Full path to the content file
        sha:
          type: string
          description: The SHA of the content
        size:
          type: integer
          description: The size of the content
        url:
          type: string
          description: The API URL to fetch the content
        html_url:
          type: string
          description: GitHub web URL to view the content
        git_url:
          type: string
          description: The Git URL to fetch the content
        download_url:
          type: string
          description: Direct URL to download the raw content
          nullable: true
        type:
          type: string
          enum: [file, dir]
        _links:
          type: object
          properties:
            self:
              type: string
            git:
              type: string
            html:
              type: string

  securitySchemes:
    github_auth:
      type: http
      scheme: bearer
      description: GitHub API token for authentication

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
📖 Type - Content Work Working on contents is the main focus of this issue / PR
Projects
Status: In Progress
Development

Successfully merging this pull request may close these issues.

4 participants