Why use InnerSource when developing enterprise applications?
Developing enterprise applications with open-source practices
TL;DR:
Do you want an endless pool of developers building your enterprise application features? InnerSource is a development methodology where engineers build enterprise software adopting best practices from large-scale open source projects to build enterprise proprietary software. In addition, InnerSource empowers individual engineers to contribute code from within their team to another team, application, or platform to speed up the process of adding desired features, enhancements, and fixing defects.
Read on to learn:
-
Why you should consider innersourcing while building enterprise applications
-
Best practices to set up your project for external contributions to ensure innersourcing will lead to success in project delivery and help you decrease time to market
Why should you consider innersourcing while building enterprise applications?
There are many benefits to employing innersourcing in your project, including:
Breaking Down Specialization Silos and Bottlenecks
The most rewarding motivation to adopt innersourcing is breaking down silos of ownership and specialization that inherently exist in large organizations. In hierarchical organization structure, project management aims at optimization that is constrained by the skills, speed, and resources of a single team rather than the whole company. Innersourcing removes these constraints.
Endless Resource Pool
Adopting innersourcing practices is conducive to faster developer onboarding and creates an endless pool of developers who can contribute to a platform. Innersource unlocks an infinite reservoir of capacity, skills, and knowledge to deliver new features and versions of the platform. An example: If the consumer of your code wants a new feature enhancement on the platform, they could contribute that feature to the existing code so that they and others benefit from it. The consumer doesn't have to wait on the platform team's resources to implement the feature.
Improved Code Quality
Sheer knowledge that every contribution is publicly available for everyone to analyze and review before being accepted creates pressure on developers to follow best-in-class coding practices while contributing since nobody wants to be on a public wall of shame. Additionally, standard controls on quality through tightly coupled CI/CD processes covering code review, automated testing suites, sonar code coverage, and quality scanning tools make adherence to quality easier. Another open source principle of releasing early and often leveraging CI/CD helps uncover code bugs and vulnerabilities faster and makes code more stable and secure.
Promote Reuse of Existing Software
Innersourcing promotes the reuse of existing code and makes adoption easier through transparency- the code, documentation, and processes are publicly and readily available. Knowledge of available implementation of similar use cases across the company leads to faster time to market through reuse and less resource duplication by the reinvention of the wheel.
Promote Knowledge Sharing and Collaboration
Transparency creates a culture of knowledge sharing and collaboration in the company.
Innovation
Allowing contributions to the platform from outside the team can expose your team to new possibilities in efficiency, design, and performance from someone with a different perspective.
Standardization of Coding Practices
For ease of contribution by an external community of developers, it is optimal for the platform to use widely/freely available software implementation tools and adopt standard practices for tools, coding, and processes. Standardization generally helps faster onboarding of new developers and delivering high-quality code by the platform team and the innersourcing community. Hence standardization simplifies and accelerates onboarding of the innersourcing community.
How the Capital One Credit Card Team Harnesses Innersourcing
I lead two software applications teams in Capital One's US Credit Card decisioning flow platform. This platform requires frequent product and credit card partners onboarding enhancements. Additionally, the teams are responsible for technical investments for growth, running the engine, scalability, performance, and security enhancements of the platform. Therefore, we needed a way to help ensure all our work gets implemented without delays with a fixed team capacity. So my team invited product partner /feature development teams to contribute enhancements to our code repository through the Innersourcing program to achieve a faster time to market.
To implement a successful innersource model, I researched the documentation made available by the InnersourceCommons community and the book “Adopting Innersource - Principle and Case Studies” to walk through the innersource journey of other organizations. I referenced the innersourcing models that Capital One InnerSource Community recommends and adopted the Managed Contribution and Moderation Innersourcing Model and the best practices associated with it, for our innersourcing needs.
With this approach, code contribution to the platform is not anonymous and managed with Agile methodology. This model recommends a managed approach to prioritization of features, manage dependencies and mitigate any surprises in the code base. We introduced new processes, tools and dedicated innersourcing roles to support this model.
Results of Our Managed Contribution and Moderation Innersourcing Model
The results of our innersourcing model speak for themselves. With this model, we:
-
Doubled the annual business growth intent - Innersourcing helped my team double the annual business growth intent delivered by the teams as the contribution model matured.
-
Expanded resourcing - Over time, the number of external and internal developers with knowledge on the platform is spread across teams. I can harness this knowledge when I need additional resourcing capacity for growth intent implementation or to re- architect parts of the platform.
-
Led to scalable solutions - The platform team capacity is utilized to address platform technical debt and ensure the application is scalable, resilient, and performant as new growth increases the scope of the application.
-
Drove reusable solutions - Bringing in developers from different teams brought in diverse perspectives and helped us capitalize on opportunities for reuse across teams as new capabilities and features are built.
What You Need to Know When Implementing Your Own Innersourcing Model
Innersource isn’t a defined methodology with defined roles and processes hence there can be a variety of ways to adopt innersourcing. While there is no one size fits all approach, I share my experience with innersourcing and what worked for me through a 3 pillar model of Product, Tools & practices and Community Management that is supported by Transparency.
Transparency is the foundation of innersourcing and for innersourcing success it is imperative to create an open culture where platform code, documentation, processes and product decisions are transparent; and welcome contributions.
Product
Before you dive into adoption it is important to understand what product characteristics make it a good candidate for innersource.
-
Seed Product - The initial or early version for the product should be already available and should have opportunities to evolve by additions of new feature implementations.It is very hard to design and build a platform from scratch with just innersource contributions.
-
Shared Stakeholder Interest - The product should host features utilized by multiple teams hence have the interest and need to be developed by multiple stakeholders. With numerous stakeholders, maintaining transparency while building consensus is critical to ensure that the product vision is not diluted.
-
Modular Design - As different feature teams contribute to various features in different sections of the code a high degree of modularity or loose coupling facilitates parallel work by teams on different modules in the same code base without getting in each other's way. Modular architecture also makes it easier to identify dependencies, plan the test strategy and allow for frequent code release of impacted modules in isolation.
-
Agile Development Strategies - An Agile development environment facilitates tracking progress, dependency management, visibility, and faster detection of issues through frequent promotion to production.
Tools and Practices
To make innersourcing a success and allow mindshare beyond the platform team, it is imperative that the platform code is supplemented with documentation and standardized code contribution processes, tools and CI/CD processes to support contributions while ensuring code quality is not compromised.
Documentation
Availability of accurate documentation of the platform detailing platform technical stack and code development processes assists faster developer onboarding. Publicly available log of current and upcoming product features creates much needed transparency with the stakeholders and helps plan forthcoming feature changes.
Development Processes
Innersource requires code development processes to be standardized to facilitate cross-team collaborations. We utilized GitHub pull request template to establish a standard contribution workflow and required two peer reviews followed by an approval from a trusted code moderator before the code could be merged.
Quality Assurance
Every code contribution is required to include system tests and automated integration tests with automated regression tests executed with every commit to the code. Static code inspection analysis and monitoring helped ensure 90% test coverage never dropped with any contribution.
Standard CI/CD Tools and Practices
Adopting standard CI/CD tools and practices bridges the gaps between development and DevOps activities by enforcing automation in the building, testing, and deployment of applications, thus enabling automated testing and ensuring deployment pipelines are green and stable with each contribution.
Community Management
Ultimately it’s about managing the community of people ( developers, product managers, stakeholders) that support the product and building a culture of trust and collaboration. Ensuring that people feel supported and stakeholders align with the product vision goes a long way in ensuring product vision is not diluted and the InnerSource pools keep growing.
Contribution Approach
With managed contribution and moderation InnerSource model contributions to the platform are prioritized with Agile practices and cadence. This helps manage feature prioritization, dependencies and release with a single product backlog.
Roles and Responsibilities
Agile Product Managers play a significant role in coordination, prioritization, moderation, and managing release timelines of contributions made from external and internal teams.Additionally, contribution, and moderation expectations are shared with the developer community in repeating Innersourcing and Agile planning sessions, with clear definition of rights, responsibilities, and capacity commitment from contributors and trusted code moderators. Expectations for code contributions, quality, size, best practices, trusted moderator graduation process, etc. are also shared. In addition to traditional agile development roles we adopted the following innersourcing roles:
- Trusted Code Moderators - As contributors gain sufficient knowledge of the code by contributions, their contribution history is assessed for maturity, quality and quantity, and they graduate to become trusted code moderators of the platform. Trusted code moderators act as senior developers whose review and approval are required before code is merged into the master codebranch. They also mentor new contributors.
- Innersourcing Champion - Innersouring champion leads the way to assess current gaps and the destination of innersourcing for the platform. He/She is responsible for sharing best practices, setting expectations, measuring the success of the innersourcing model, expanding the contributor, trusted code moderator pool, ensuring good associate morale, and enabling improvements to make innersourcing a good experience for contributors, moderators, and the platform team.
- Internal Innersource Community - CapitalOne has an internal Innersource community with a collection of Innersourcing Champions who meet at a regular cadence to learn from the innersource journey of different platforms and propose standards, processes, bot/tools and playbooks for quick adoption. Their goal is to improve and streamline Innersource practices across platforms and make Innersourcing a widely accepted means of building enterprise applications at Capital One. This community played a significant role in helping me adopt innersourcing for my platform and streamline this process on an ongoing basis.
Growing Contributor and Trusted Moderator Pool
As the InnerSource Champion of my platform, I focus on continuously expanding and supporting the innersourcing contribution and trusted code moderator pools through education and appreciation. As part of this initiative:
-
Knowledge Sharing and Support - Various forums are hosted by the platform team to ensure support is available to the contributors as needed. Bi-weekly office hours are hosted to answer questions from the contributors in regard to an upcoming feature contribution. Weekly technical scrums are hosted to share any major changes to the platform code base and technology stack.
-
Education - Quarterly platform InnerSource sessions are organized to introduce and educate new product managers, developers on the contribution model for the platform, the innersourcing processes, and the benefit to them and their teams with this model.
-
Trusted Code Moderator Graduation Process - Trusted code moderator graduation process (assessing developer's maturity and depth of knowledge) is documented and responsibilities and expectations for all innersourcing roles is established and shared.
-
Recognition and Appreciation - Contributors and moderators are appreciated and rewarded through spot awards, lunch coupons, and appreciation emails. Trusted code moderators are given extra credit in the bi-annual performance assessments, which is a huge morale boost for these developers.
- Platform Optimization - Trusted code moderators are included in platform design and re- architecture sessions to get their expert and diverse opinion which results in creating an expanded platform team. This model helps ensure that new developers join the pool of moderators and contributors, as some left due to attrition or role/team movement.
Communication and Collaboration
Communication and transparency are the foundation of this innersourcing process, so creating multiple means of communication with the innersourcing community is paramount. Apart from hosting Platform Tech Scrum and Office hours, I also created an innersourcing community channel on slack to create a persistent and open mode of communication between all developers, product managers, contributors, and moderators to get questions answered. The persistent chat became an inventory of FAQs which could be referenced by new contributors laters.
Survey bot is attached to each PR to get feedback from contributors and trusted code moderators to gauge the efficacy of the model and make further improvements. Innersourcing retrospective sessions are also conducted with contributors to improve the process with external developers' experience and suggestions.
References:
-
Adopting InnerSource - Principles and Case Studies by Danese Cooper & Klaas-Jan Stol with foreword by Tim O’Reilly