Open Source development has revolutionized the software industry by promoting transparency, collaboration, and innovation. Enterprises, on the other hand, have traditionally relied on proprietary solutions to maintain competitive advantages. However, in recent years, the convergence of Open Source development practices, known as InnerSource, and enterprise needs has shown immense benefits for businesses.
Author: Anuj Agarwal, NatWest Group Open Source Program Office
InnerSource coding practice means using the same ideas that help people work together on public software projects but doing it inside a company. It's like opening up the way software is made so that anyone in the company can suggest changes or improvements, just like how anyone from around the world can contribute to Open Source software like Kubenetes or the Linux kernal.
Here's what it means for someone who is helping to make this happen in a company:
Breaking Down Walls: Usually in big companies, each team works on their projects and doesn't share much with other teams. InnerSource breaks down these walls. It allows all teams to see what others are doing and to help out or use parts of each other's work.
Making Better Software: When more people can see and improve the code, the software gets better. It's like having a lot of eyes checking to make sure everything is good and sharing smart ideas to make things work better.
Everyone Can Help: In an InnerSource setup, anyone in the company can suggest improvements. This could be fixing bugs, adding features, or making the software easier for others to use.
Adopting InnerSource practices within an enterprise has several benefits that align with both the operational efficiencies and cultural transformations organizations aim to achieve. Here's a detailed look at the key advantages of bringing InnerSource coding and software development practices into an enterprise environment:
Increased Collaboration and Innovation
Cross-Team Collaboration: InnerSource encourages collaboration across different teams, breaking down silos that often hinder cross-functional teamwork. This can lead to more innovative solutions as diverse perspectives are brought together.
Shared Problem Solving: By allowing developers from different teams to contribute to projects, organizations can leverage a broader skill set, which often results in more creative and effective solutions.
Improved Code Quality and Reusability
Reusable Code: One of the main principles of InnerSource is to create reusable code that can be utilized by other projects within the organization. This reduces duplication of effort and improves efficiency.
Peer Reviews: Code review is a core component of InnerSource. Having more eyes on the code can lead to higher quality, as bugs and issues are more likely to be identified and resolved before going into production.
Enhanced Transparency and Communication
Transparent Processes: InnerSource promotes an open environment where decisions and processes are transparent, enhancing trust and clarity across the company.
Improved Communication: Regular interactions through code reviews, documentation, and collaborative platforms improve communication and understanding among team members.
Accelerated Development and Flexibility
Faster Iteration: The openness of the InnerSource model can lead to faster iteration and development cycles as dependencies on external teams are reduced. Developers can make changes and improvements directly.
Scalability and Flexibility: Teams can scale more easily when they can extend and modify existing codebases without the need to reinvent the wheel. This adaptability is crucial in a fast-paced business environment.
Talent Development and Retention
Skill Development: Developers can work on different projects across the organization, helping them build new skills and expertise. This cross-pollination of skills can significantly enhance the talent pool.
Employee Satisfaction: Developers often feel more engaged and valued when they can see the impact of their work across the company and have the opportunity to contribute to various projects. This can improve job satisfaction and help retain top talent.
Cost Efficiency
Reduced Code Redundancy: By reusing code and resources, organizations can significantly cut down on unnecessary expenditures related to developing similar components from scratch for different projects.
Efficient Resource Utilization: InnerSource allows organizations to make the most of their existing resources, optimizing the workload and reducing the need for additional hires for specific expertise.
Cultural Shift Towards Openness
Adaptive Culture: Implementing InnerSource can drive a cultural shift towards more openness and collaborative practices, aligning well with modern agile and lean methodologies.
Innovation Culture: By fostering an environment that encourages experimentation and contributions from various sources, companies can maintain a competitive edge through continuous innovation.
Practical Tip for Engineering Teams
InnerSource development practice require robust documentation, contribution guidelines, and code review practices using GitLab or Github. The steps below will help standardize practices across the enterprise, aligning them with an InnerSource model.
Documentation
Objective: Ensure every project has up-to-date, accessible documentation that helps new contributors get up to speed quickly.
Steps:
-
Project README: Each project should have a dedicated README.md in the root of each repo. This page should include installation instructions, usage examples, and troubleshooting tips.
-
Templates: Create templates for documentation essentials. These templates should include sections on project overview, setup instructions, how to contribute, and contact points for project leads.
-
Automate Documentation Checks: Utilize GitLab/Github CI/CD pipelines to ensure that any merge requests or commits include necessary documentation updates. This can be achieved by script checks that verify if modifications in the codebase are accompanied by corresponding documentation updates.
Contribution Guidelines
Objective: Provide clear, comprehensive guidelines that explain how employees can contribute to projects, what the process looks like, and what standards must be met.
Steps:
-
Create a CONTRIBUTING.md File: Each project repository on GitLab or GitHub should include a CONTRIBUTING.md file. This document should outline:
-
How to set up their environment for development.
-
Steps to find issues to work on, including the use of labels like "good first issue".
-
How to submit changes: Forking the repository, creating branches, and submitting a Merge Request (MR).
-
Code style and conventions expected.
-
How contributions are reviewed and accepted.
-
Merge Request Templates: Use GitLab or GitHub's merge request templates to guide contributors on what information to include when they submit a merge request, such as a summary of the changes, testing done, and any relevant links or references.
-
Communication Channels: List communication channels such as internal chat channels or forums where contributors can discuss problems and find support.
Code Review Practices
Objective: Establish a structured, rigorous code review process to maintain code quality and facilitate knowledge sharing.
Steps:
-
Merge Request Reviews: Enforce a code review process where no merge request is merged without being reviewed. Utilize GitLab or GitHub's approval features to require at least one or more approvals for merge requests.
-
Reviewer Guidelines: Develop guidelines for reviewers that emphasize the need to check for code quality, alignment with project design principles, security issues, performance implications, and adherence to documentation.
-
Automated Testing: Leverage GitLab or GitHub's CI/CD to run automated tests every time a new commit is pushed to a branch or a merge request is updated. Ensure that failing tests block the merge.
-
Regular Code Review Training: Offer regular training sessions on effective code review techniques and updates on coding standards.
-
Feedback Mechanism: Encourage a constructive feedback culture where reviewers provide actionable, respectful, and supportive comments.
Implementing Continuous Integration (CI) Practices with GitLab/GitHub
Objective: Use GitLab CI/CD pipelines to automate testing and ensure consistent code quality.
Steps:
-
Define CI Pipeline Configurations: Create .gitlab-ci.yml files in each repository to define your CI pipeline steps, including linters, unit tests, integration tests, and deployment scripts.
-
Pipeline Review Processes: Include steps in your CI pipelines that require human review for critical stages, such as deployment to production environments.
-
Security Scans: Incorporate security scanning tools available in GitLab to automatically scan code for vulnerabilities as part of the CI process.
By implementing these detailed steps, you will foster a culture of high-quality, collaborative development that leverages the benefits of open source practices within the controlled environment of your enterprise.
InnerSource process not only enhance their technical capabilities but also foster a more open, collaborative, and innovative workplace culture. This can lead to significant improvements in both product development and employee engagement, positioning the company for long-term success.
--
Article by Anuj Agarwal, NatWest Group Open Source Program Office.
Edited by James McLeod, NatWest Group Open Source Program Lead.