Inside and Outside Lines

Synopsis::Allows external agent to contribute changes on an independent branch before merging them into the internally controlled development codeline.

Intent
Provides a means for internal teams to synchronise work performed by external teams in a controlled manner, while allowing external teams autonomy in controlling their own work environment.

Motivation
The main motivation for the inside/outside lines pattern is the need to permit (potentially) complete strangers to input to a development without risking the stability of the main line of development.

Applicability
All projects that need to protect the main codeline from external input while allowing external developers largely unfettered access.

Also known as
also known as::Internal and External Lines, also known as::Local and Remote Lines, also known as::Central and Remote Lines

Structure
An external code line is created in parallel to the main internal codeline. This external codeline is exposed to the input from the external developers or development teams. Work from the external codeline is selectively synchronised into the main internal development codeline (effectively 'pulled' from the external codeline by the internal development codeline owner).

The internal codeline periodically synchronises ('pushes') changes to the external codeline in order to make current changes from the official internal codeline available to the external development teams.



Consequences

 * Developers on the external codeline have access to the code that enables them to contribute work to the development independent of the internal development team.
 * The outside codeline acts as a 'firewall' between the external developers and the internal development codeline.
 * This protection comes at the cost of additional merge effort required to propagate changes back and forth between the external and internal codelines.

Known uses
The internal/external lines pattern is commonly seen in open source projects where a core team takes input from external developers and selectively integrates these changes into a core development, which is subsequently pushed back to the external developers as the next official release of the product.

Related patterns
There are no known variants of the pattern.

The following patterns are related to the pattern.
 * related pattern::Codeline Ownership
 * related pattern::Codeline Policy
 * related pattern::Relaxed Access
 * related pattern::Restricted Access
 * related pattern::Stable Receiving Line
 * related pattern::Remote Line